歡迎光臨
每天分享高質量文章

從高德採集最新的省市區三級坐標和行政區域邊界,用js在瀏覽器中運行

本文描述的是對國家統計局於2019-01-31發佈的《2018年統計用區劃代碼和城鄉劃分代碼(截止2018年10月31日)》中省市區三級的坐標和行政區域邊界的採集。

本文更新(移步查閱):
19-04-15 新採集了2018的省市區三級的坐標和行政區域邊界資料csv格式
19-03-22 採集了2018的城市資料

資料下載 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases


坐標和邊界是高德地圖提供的資料接口;可通過方法轉換成其他坐標系的坐標,比如百度地圖的。

省市區三級是國家統計局統計標準《2018年統計用區劃代碼和城鄉劃分代碼(截止2018年10月31日)》,截稿時是最新的。

1. 呼叫高德地圖接口抓取原始資料

涉及原始碼:map_geo.js

進入高德地圖測試頁面,執行代碼即可完成抓取,開了4個模擬的執行緒,採集了3300+資料,首次運行大概2分多鐘完成採集。

抓取完成後會自動彈出儲存檔案資料。

原始碼裡面包含了對不同地名的處理,有些城市不能直接通過編碼或城市名稱來查詢,高德地圖相對於統計局還是有些滯後。

2. 處理資料和匯出CSV

涉及原始碼:map_geo_格式化.js

這個代碼比較簡單,目前只是起到把資料匯出來的作用,裡面寫了一大堆方法,但運行過一次後發現,基本上可以不用了,因為對資料進行驗證部分發現高德的資料非常完美。

代碼運行完成就自動彈出儲存csv檔案資料了。

使用高德接口採集是後面才決定的,因為本來是用百度地圖的接口,但資料全部搞完,經過使用發現百度地圖資料有嚴重問題:

參考 肅寧縣(右下方向那塊飛地)路南區(唐山科技職業技術學院那裡一段詭異的邊界) 邊界,百度資料大量線段交叉的無效polygon(百度地圖測試),沒有人工無法修正,高德沒有這個問題(高德地圖測試);

並且高德對鏤空性質的地塊處理比百度強,參考天津市唐山大塊飛地的處理,高德資料只需要Union操作就能生成polygon,百度既有Union操作又有Difference操作,極其複雜資料還無效。

所以放棄使用百度地圖資料。

坐標和邊界資料和 省市區 資料是分開儲存的,通過ID來進行關聯。

資料儲存在AreaCity-JsSpider-StatsGov-GEO分庫中,也可自行到releases中下載。分開的原因是冗餘資料總有那麼一天會忘記更新,這個庫人工操作的多,儘量減少這種重覆資料避免產生問題。

採集到的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 一下。

已同步到看一看
赞(0)

分享創造快樂