百度地圖地址解析(百度Geocoding API)


1.什么是Geocoding?

Geocoding API 是一類簡單的HTTP接口,用於提供從地址到經緯度坐標或者從經緯度坐標到地址的轉換服務,用戶可以使用C# 、C++、Java等開發語言發送HTTP請求且接收JSON、XML的返回數據。

2.功能介紹

Geocoding API包括地址解析和逆地址解析功能。

  • 地理編碼:即地址解析,由詳細到街道的結構化地址得到百度經緯度信息,且支持名勝古跡、標志性建築名稱直接解析返回百度經緯度。例如:“北京市海淀區中關村南大街27號”地址解析的結果是“lng:116.31985,lat:39.959836”,“百度大廈”地址解析的結果是“lng:116.30815,lat:40.056885”
  • 逆地理編碼,即逆地址解析,由百度經緯度信息得到結構化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的結果是“江蘇省蘇州市虎丘區塔園路318號”。

 

3.如何使用

百度地圖Geocoding API是一套免費對外開放的API,無使用次數限制。使用方法:

第一步:申請ak(即獲取密鑰),若無百度賬號則首先需要注冊百度賬號

第二步,拼寫發送http請求的url,注意需使用第一步申請的ak。

第三步,接收http請求返回的數據(支持json和xml格式)。

以下是一個關於地理編碼的簡單示例。發送一個地址是“百度大廈”的請求,返回該地址對應的地理坐標。發送請求的url如下:

http://api.map.baidu.com/geocoder/v2/?address=百度大廈&output=json&ak=E4805d16520de693a3fe707cdc962045&callback=showLocation 
4.java調用測試
  View Code

運行結果:

5.簡單應用

期望實現功能:

input.txt存放中文地址
從input.txt中讀取中文地址,獲得經緯度
將中文地址以及經緯度輸出到output.txt中
  View Code

運行測試結果:

 

6.改進

上面的解決方案使用單線程,數據量小的情況下還可以勉強使用。但是當數據量巨大時,耗時就非常的長(測試使用15000條地址數據差不多用了1小時)。考慮到耗費的時間主要花費在獲取經緯度時服務器的響應上,因此考慮使用多線程。

從input.txt讀入,然后將地址信息切分為多個數組,為每一個數組開一個線程,轉換后統一輸出到output.txt

實現代碼:

  View Code
  View Code
7.不足

1,網速不好的情況下,開100個線程會出現 java.net.SocketTimeoutException: connect timed out錯誤。

雖然使用了uc.setConnectTimeout(10000);   uc.setReadTimeout(10000); 但是沒有起到效果。(求改進)

2,所有的數據都會放在內存上,當數據量到達千萬級別時候,會內存不足。(求改進)

8.引用

http://developer.baidu.com/map/webservice-geocoding.htm  

http://www.cnblogs.com/gzggyy/archive/2013/06/21/3148610.html

http://lavasoft.blog.51cto.com/62575/99150

http://www.360doc.com/content/13/0422/09/3776353_280044198.shtml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM