java百度地圖介面呼叫獲取經緯度
1.這個介面是傳入一個 中文地址 獲取對應的 地理編碼即經緯度。以下是介面文件:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
介面文件提供了請求路徑:
http://api.map.baidu.com/geocoder/v2/?address=北京市海淀區上地十街10號&output=json&ak=您的ak&callback=showLocation //GET請求
由於我們使用的是java,這個callback請求是不用的,所以請求的url應該是:
http://api.map.baidu.com/geocoder/v2/?address=請求地址&output=json&ak=您的ak //GET請求
其中ak的申請在http://lbsyun.baidu.com/apiconsole/key?application=key。
2.我們在這裡請求的引數有兩個,一個地址,一個ak。這裡對地址做了處理,這個因為使用者的輸入很難確認,有的地址裡有,
有的地址有\n
, 更加誇張的是居然會有這種上海市xxxx22號樓207室
由於地址資訊比較敏感,中間我做了處理。
引數這裡有一個限制條件:最多支援84個位元組。一箇中文字元兩個位元組,那麼string的長度不能超過84/2=41,但是由於奇葩的資料真的多,一般長度到25已經是能到街道了,所以這裡又做了一個處理。
public static String convertAddress(String address, String ak) {
URL url = null;
HttpURLConnection urlConnection = null;
BufferedReader rd = null;
Double lng = null;
Double lat = null;
Map<String, Object> map = null;
Map<String, Object> result = null;
Map<String, Object> location = null;
address = address.trim();
address = address.replaceAll("\\\\", "");
String regEx = "[`~!@#$%^&*()\\-+={}':;,\\[\\].<>/?¥%…()_+|【】‘;:”“’。,、?\\s]";
address = address.replaceAll(regEx,"").trim();
if (address.length()>=25)address = address.substring(0,25);
String urlString = new StringBuilder().append("http://api.map.baidu.com/geocoder/v2/?").append("address=").append(address).append("&output=json").append("&ak=").append(ak).toString();
try {
URLEncoder.encode(urlString,"UTF-8");
url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
StringBuffer sb = new StringBuffer();
String data = null;
while ((data = rd.readLine()) != null) {
sb.append(data);
}
System.out.println(sb);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
try {
rd.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
在專案裡:
1. jdbc建立和資料庫的連線,獲取地址
2. 使用上述方法將地址轉換成經緯度
3. 將地址轉換的經緯度存回資料庫。
我們會發現一個問題:由於單純呼叫這種方法,開啟連線和釋放連線的時間太久。
資料庫裡我有5880條資料,居然跑了17分鐘!
為此我想了一下可能有下面3個解決方案:
- http連線池減少建立http連線,釋放的時間
- 資料庫連線池批量插入資料
- 多執行緒?
最後我採用了httpclient及相關連線池+多執行緒將時間壓縮到了2分30s。
這裡我就不做相關描述了。
相關文章
- Java根據地理位置獲取經緯度(呼叫百度地圖API)Java地圖API
- js呼叫百度地圖介面繪製任意多邊形並獲取每個點的經緯度等JS地圖
- js根據經緯度,獲取省市區。(百度地圖逆地址解析)JS地圖
- 呼叫百度api透過經緯度獲取實際地理位置資訊API
- 百度地圖根據經緯度計算瓦片行列號地圖
- 百度地圖JavaScript API獲取使用者當前經緯度並獲取使用者當前詳細地理位置地圖JavaScriptAPI
- 百度地圖介面地圖
- 微信小程式 計算兩地之間的距離 + 高德地圖獲取經緯度 + elasticsearch微信小程式地圖Elasticsearch
- java 經緯度處理、計算兩地的距離、獲取當前一定距離以內的經緯度值Java
- HTML呼叫百度地圖APIHTML地圖API
- 百度地圖:根據位置獲取座標地圖
- uni-app 呼叫安卓 高德sdk獲取經緯度(替代 uni.getLocation)APP安卓
- iOS-百度地圖螢幕所顯示範圍內的經緯度iOS地圖
- 百度地圖獲取多行政區域圍欄地圖
- iOS中地圖經緯度座標轉換iOS地圖
- C#根據經緯度獲取實體地址C#
- java 根據兩個位置的經緯度,來計算兩地的距離 經緯度處理Java
- 智慧手環WIFI熱點和經緯度API獲取WiFiAPI
- 透過經緯度計算距離獲取附近商家
- 百度地圖開發-顯示地圖預設介面 03地圖
- java 經緯度處理、計算兩地的距離、獲取當前一定距離以內的經緯度值 2022-02-14 0Java
- 獲取使用者精準地理位置資訊(百度地圖)地圖
- 呼叫百度地圖api只顯示網格地圖API
- uniapp使用高德地圖解析經緯度轉為中文地址APP地圖圖解
- asp.net系統中根據經緯度座標,直接呼叫google地圖,顯示位置ASP.NETGo地圖
- Android百度地圖開發實現點選地圖新增Marker並獲取地址資訊Android地圖
- 百度地圖POI爬取寫入TXT地圖
- 常用經緯度轉換為ntu經緯度
- Zoho CRM整合整合微信、呼叫中心、百度地圖等地圖
- java 呼叫百度人臉對比api介面JavaAPI
- 百度地圖之基礎地圖地圖
- 中國所有省市區的ip經緯度介面
- 通過百度地圖獲取公交站點的程式碼例項地圖
- 【地圖API】地址錄入時如何獲得準確的經緯度?淘寶收貨地址詳解地圖API
- iphone或Android伺服器端呼叫百度地圖iPhoneAndroid伺服器地圖
- 百度地圖API入門——(5)百度地圖API的簡介地圖API
- 獲取資料庫中到指定經緯度距離的座標資料庫
- 百度地圖GeoUtils示例地圖