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
- mapbox獲取各種經緯度
- java 經緯度處理、計算兩地的距離、獲取當前一定距離以內的經緯度值Java
- 百度地圖:根據位置獲取座標地圖
- 微信小程式 計算兩地之間的距離 + 高德地圖獲取經緯度 + elasticsearch微信小程式地圖Elasticsearch
- iOS-百度地圖螢幕所顯示範圍內的經緯度iOS地圖
- 百度地圖獲取多行政區域圍欄地圖
- uni-app 呼叫安卓 高德sdk獲取經緯度(替代 uni.getLocation)APP安卓
- 安卓獲取百度地圖sha1問題安卓地圖
- java 經緯度處理、計算兩地的距離、獲取當前一定距離以內的經緯度值 2022-02-14 0Java
- C#根據經緯度獲取實體地址C#
- .NET程式獲取當前IP經緯度,並透過經緯度實現天氣查詢功能
- 透過經緯度計算距離獲取附近商家
- 如何透過裝置基站獲取裝置經緯度
- 智慧手環WIFI熱點和經緯度API獲取WiFiAPI
- java 根據兩個位置的經緯度,來計算兩地的距離 經緯度處理Java
- 百度地圖開發-顯示地圖預設介面 03地圖
- 呼叫百度地圖api只顯示網格地圖API
- uniapp使用高德地圖解析經緯度轉為中文地址APP地圖圖解
- 獲取使用者精準地理位置資訊(百度地圖)地圖
- 百度地圖POI爬取寫入TXT地圖
- java 呼叫百度人臉對比api介面JavaAPI
- Python呼叫百度OCR介面圖片識別轉文字Python
- 微信小程式獲取手機定位+經緯度轉詳細地址微信小程式
- Python獲取IP的地理位置:經緯度,國家,區域,城市Python
- 獲取資料庫中到指定經緯度距離的座標資料庫
- Zoho CRM整合整合微信、呼叫中心、百度地圖等地圖
- WebApiClientCore簡約呼叫百度AI介面WebAPIclientAI
- 中國所有省市區的ip經緯度介面
- 百度地圖GeoUtils示例地圖
- java 根據經緯度計算圓周Java
- 高德解析城市的分析,根據高德的經緯度獲取城市cityCode
- 經緯度轉換
- R語言:根據經緯度在世界地圖上畫出各個點R語言地圖