這段時間公司做大數據統計,需要用到百度地圖,並且需要將數據的點位(也就是數據對應的位置)通過經緯度來在地圖上進行描點。但是不能單純用一種方法進行描點,後臺定時器也需要調用查看,下面我就簡單介紹前後臺兩種調用百度接口的方法。
需要準備百度一個開發者key,如果沒有可以去百度開發者中心申請key
百度開發者中心:http://developer.baidu.com
1 前端通過js調用百度接口方法獲取數據
廢話不多說,上我寫的test代碼
<!DOCTYPE html>
<html lang="en">
<head>
<title>根據地址查詢經緯度</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://api.map.baidu.com/api?v=2.0&ak=53oVIOgmSIejwV7EfphPgTynOZbIiVYu"></script>
</head>
<body style="background:#CBE1FF">
<div style="width:1200px;margin:auto;">
要查詢的地址:
<input id="text_" type="text" value="寧波天一廣場" style="margin-right:100px;" /> 查詢結果(經緯度):
<input id="result_" type="text" />
<input type="button" value="查詢" onclick="searchByStationName();" />
<div id="container" style="position: absolute;
margin-top:30px;
top:0;
bottom:0;
left:0;
right:0;
border: 1px solid gray;
overflow:hidden;">
</div>
</div>
</body>
<script type="text/javascript">
var map = new BMap.Map("container");
map.centerAndZoom("寧波", 12);
map.enableScrollWheelZoom(); //啓用滾輪放大縮小,默認禁用
map.enableContinuousZoom(); //啓用地圖慣性拖拽,默認禁用
map.addControl(new BMap.NavigationControl()); //添加默認縮放平移控件
map.addControl(new BMap.OverviewMapControl()); //添加默認縮略地圖控件
map.addControl(new BMap.OverviewMapControl({
isOpen: true,
anchor: BMAP_ANCHOR_BOTTOM_RIGHT
})); //右下角,打開
var localSearch = new BMap.LocalSearch(map);
localSearch.enableAutoViewport(); //允許自動調節窗體大小
function searchByStationName() {
map.clearOverlays(); //清空原來的標註
var keyword = document.getElementById("text_").value;
localSearch.setSearchCompleteCallback(function(searchResult) {
var poi = searchResult.getPoi(0);
document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat;
map.centerAndZoom(poi.point, 13);
var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat)); // 創建標註,爲要查詢的地方對應的經緯度
map.addOverlay(marker);
var content = document.getElementById("text_").value + "<br/><br/>經度:" + poi.point.lng + "<br/>緯度:" + poi.point.lat;
var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>");
marker.addEventListener("click", function() {
this.openInfoWindow(infoWindow);
});
// marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳動的動畫
});
localSearch.search(keyword);
}
</script>
</html>
經過反覆測試這種方法是可行的,上面的是我的測試key,大家可以採用這種方法前端調用百度查詢地理位置經緯度的接口。
2 後端通過java代碼調用百度接口方法獲取數據
package mz.approve.shtt.utils;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
*
* 獲取位置經緯度方法
* Created by LiXiaoTong on 2017/6/28.
*/
public class LngAndLatUtil {
public static String getLngAndLat(String address){
String map="";
String url = "http://api.map.baidu.com/geocoder/v2/?address="+address+"&output=json&ak=xUHj6j8bLRwOPBXex2B3fnyd9YeHlnNs";
try {
String json = loadJSON(url);
JSONObject obj = JSONObject.fromObject(json);
if(obj.get("status").toString().equals("0")){
double lng=obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
double lat=obj.getJSONObject("result").getJSONObject("location").getDouble("lat");
map= getDecimal(lng)+","+getDecimal(lat);
//System.out.println("經度:"+lng+"---緯度:"+lat);
}else{
System.out.println("未找到相匹配的經緯度!");
//System.out.println("未找到相匹配的經緯度!");
}
}catch (Exception e){
System.out.println("未找到相匹配的經緯度,請檢查地址");
}
return map;
}
public static double getDecimal(double num) {
if (Double.isNaN(num)) {
return 0;
}
BigDecimal bd = new BigDecimal(num);
num = bd.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
return num;
}
public static String loadJSON (String url) {
StringBuilder json = new StringBuilder();
try {
URL oracle = new URL(url);
URLConnection yc = oracle.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
yc.getInputStream(),"UTF-8"));
String inputLine = null;
while ( (inputLine = in.readLine()) != null) {
json.append(inputLine);
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return json.toString();
}
}
將代碼貼到java代碼中就能成功調用百度地圖位置查詢接口,很簡單,後期我會將我的代碼整理成壓縮文件方式上傳到csdn上面,有需要可以下載。對於剛剛這兩種方法獲取經緯度方式如果有其他方法獲取的小夥伴歡迎多多交流 如果代碼有錯誤也歡迎指錯。