連續一週都在嘗試解決如何獲取一個城市全部道路名的問題。嘗試解決的方法如下:
方法一:
從高德地圖獲取該城市的行政區域邊界經緯度。
http://restapi。amap。com/v3/config/district?key=
&key={高德地圖key}
words=成都市
&subdistrict=3
&showbiz=False
&extensions=all
&offset=20
&page=1
&filter=adcode
轉為百度經緯度座標
根據轉換後的經緯度座標找到經緯度中最大值點和最小值點,生成該多邊形區域的外包矩形。經度和緯度的步長設定為0。05。
把外包矩形分成若干個小矩形。
利用百度地圖Place Api介面,在該矩形區域以“道路”為關鍵字在每個矩形區域內搜尋。並存儲獲取到的道路名和經緯度。
http
:
//
api
。
map
。
baidu
。
com
/
place
/
v2
/
search
?
query
=
‘道路’
&
page_size
=
20
&
page_num
=
0
&
scope
=
2
&
bounds
=
31。000
,
104。004
,
31。2
,
104。114
&
output
=
json
&
ak
=
{
您的
ak
}
部分結果如下:
方法二:
1。從第三方郵編網獲取該城市各區縣的街道名或地址
2。利用百度地圖Place Api介面,根據步驟1中獲取的街道名在該城市查詢結果。
http://api。map。baidu。com/place/v2/search?
query={街道名,例如‘武侯祠大街’}
&page_size=10
&page_num=0
&scope=1
®ion=成都市
&output=json&ak={百度ak}
部分結果展示如下:
3。把所有解析出的結果,再透過百度地圖Geocoding API介面,根據pois_location,即經緯度解析成結構化地址。
總結:
方法一耗時耗力,結果也並不理想,實際獲取到的道路數與方法二相差無幾。
目前打算迴歸方法二,先解決目前的問題,待日後閒下來了再改進方法一。
更正:
方法1效果比較好,原來效果不理想的原因是因為使用的百度ak佇列中的一個ak無效,所以出現了誤差。
推薦方法一。