本文描述的是對國家統計局於
2019-01-31
發佈的《2018年統計用區劃代碼和城鄉劃分代碼(截止2018年10月31日)》中省市區三級的座標和行政區域邊界的採集。javascript
本文更新(移步查閱):
19-04-15 新採集了2018的省市區三級的座標和行政區域邊界數據csv格式
19-03-22 採集了2018的城市數據html數據下載 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releasesjava
座標和邊界是高德地圖提供的數據接口;可經過方法轉換成其餘座標系的座標,好比百度地圖的。git
省市區三級是國家統計局統計標準《2018年統計用區劃代碼和城鄉劃分代碼(截止2018年10月31日)》,截稿時是最新的。
github
涉及源碼:map_geo.js數據庫
進入高德地圖測試頁面,執行代碼便可完成抓取,開了4個模擬的線程,採集了3300+數據,首次運行大概2分多鐘完成採集。後端
抓取完成後會自動彈出保存文件數據。api
源碼裏面包含了對不一樣地名的處理,有些城市不能直接經過編碼或城市名稱來查詢,高德地圖相對於統計局仍是有些滯後。ide
涉及源碼:map_geo_格式化.js測試
這個代碼比較簡單,目前只是起到把數據導出來的做用,裏面寫了一大堆方法,但運行過一次後發現,基本上能夠不用了,由於對數據進行驗證部分發現高德的數據很是完美。
代碼運行完成就自動彈出保存csv文件數據了。
使用高德接口採集是後面才決定的,由於原本是用百度地圖的接口,但數據所有搞完,通過使用發現百度地圖數據有嚴重問題:
參考 肅寧縣(右下方向那塊飛地)
、路南區(唐山科技職業技術學院那裏一段詭異的邊界)
邊界,百度數據大量線段交叉的無效polygon
(百度地圖測試),沒有人工沒法修正,高德沒有這個問題(高德地圖測試);
而且高德對鏤空性質的地塊處理比百度強,參考天津市
對唐山
大塊飛地的處理,高德數據只須要Union
操做就能生成polygon
,百度既有Union
操做又有Difference
操做,極其複雜數據還無效。
因此放棄使用百度地圖數據。
座標和邊界數據和省市區數據是分開存儲的,經過ID
來進行關聯。
採集到的csv文件能夠導入到數據庫內使用,因爲POLYGON
須要解析,蠻複雜的,能夠參考2019/map_geo_格式化.js內的SQL Server導入用的SQL語句的例子。
若是須要特定的POLYGON
格式,能夠根據庫裏面介紹的字段格式,自行進行解析和驗證。
使用過程當中若是遇到多種不一樣座標系的問題,好比請求的參數是WGS-84座標(GPS)
,咱們後端存儲的是高德的座標,能夠經過將WGS-84座標
轉成高德座標
後進行處理,百度的座標同樣。轉換有相應方法,轉換精度通常能夠達到預期範圍,可自行查找。或者直接把高德的原始座標數據轉換成目標座標系後再存儲(精度?)。
SQL Server
中的運行結果(大概2分鐘完成POLYGON
的轉換,表數據物理存儲空間大概300M):
數據下載和相關問題請到 Github查看:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
releases內除了有省市區三級座標和行政區域邊界csv數據外,還有處理好的3級或者4級省市區鎮 csv數據提供下載。
若是這個庫有幫助到您,請 Star 一下。