本文描述的是對國家統(tǒng)計(jì)局于
2019-01-31發(fā)布的《2018年統(tǒng)計(jì)用區(qū)劃代碼和城鄉(xiāng)劃分代碼(截止2018年10月31日)》中省市區(qū)三級的坐標(biāo)和行政區(qū)域邊界的采集。隨著時(shí)間變化,本文內(nèi)容會逐漸變舊或失效,請到GitHub倉庫查閱最新更新數(shù)據(jù)。
本文更新(移步查閱):
19-04-15 新采集了2018的省市區(qū)三級的坐標(biāo)和行政區(qū)域邊界數(shù)據(jù)csv格式
19-03-22 采集了2018的城市數(shù)據(jù)數(shù)據(jù)下載 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases
邊界效果預(yù)覽


數(shù)據(jù)來源
坐標(biāo)和邊界是高德地圖提供的數(shù)據(jù)接口;可通過方法轉(zhuǎn)換成其他坐標(biāo)系的坐標(biāo),比如百度地圖的。
省市區(qū)三級是國家統(tǒng)計(jì)局統(tǒng)計(jì)標(biāo)準(zhǔn)《2018年統(tǒng)計(jì)用區(qū)劃代碼和城鄉(xiāng)劃分代碼(截止2018年10月31日)》,截稿時(shí)是最新的。

數(shù)據(jù)采集
1. 調(diào)用高德地圖接口抓取原始數(shù)據(jù)
涉及源碼:map_geo.js
進(jìn)入高德地圖測試頁面,執(zhí)行代碼即可完成抓取,開了4個模擬的線程,采集了3300+數(shù)據(jù),首次運(yùn)行大概2分多鐘完成采集。

抓取完成后會自動彈出保存文件數(shù)據(jù)。
源碼里面包含了對不同地名的處理,有些城市不能直接通過編碼或城市名稱來查詢,高德地圖相對于統(tǒng)計(jì)局還是有些滯后。
2. 處理數(shù)據(jù)和導(dǎo)出CSV
涉及源碼:map_geo_格式化.js
這個代碼比較簡單,目前只是起到把數(shù)據(jù)導(dǎo)出來的作用,里面寫了一大堆方法,但運(yùn)行過一次后發(fā)現(xiàn),基本上可以不用了,因?yàn)閷?shù)據(jù)進(jìn)行驗(yàn)證部分發(fā)現(xiàn)高德的數(shù)據(jù)非常完美。
代碼運(yùn)行完成就自動彈出保存csv文件數(shù)據(jù)了。
為什么不采百度的
使用高德接口采集是后面才決定的,因?yàn)楸緛硎怯冒俣鹊貓D的接口,但數(shù)據(jù)全部搞完,經(jīng)過使用發(fā)現(xiàn)百度地圖數(shù)據(jù)有嚴(yán)重問題:
參考 肅寧縣(右下方向那塊飛地)、路南區(qū)(唐山科技職業(yè)技術(shù)學(xué)院那里一段詭異的邊界) 邊界,百度數(shù)據(jù)大量線段交叉的無效polygon(百度地圖測試),沒有人工無法修正,高德沒有這個問題(高德地圖測試);
并且高德對鏤空性質(zhì)的地塊處理比百度強(qiáng),參考天津市對唐山大塊飛地的處理,高德數(shù)據(jù)只需要Union操作就能生成polygon,百度既有Union操作又有Difference操作,極其復(fù)雜數(shù)據(jù)還無效。
所以放棄使用百度地圖數(shù)據(jù)。
如何使用這些數(shù)據(jù)
坐標(biāo)和邊界數(shù)據(jù)和省市區(qū)數(shù)據(jù)是分開存儲的,通過ID來進(jìn)行關(guān)聯(lián)。
采集到的csv文件可以導(dǎo)入到數(shù)據(jù)庫內(nèi)使用,由于POLYGON需要解析,蠻復(fù)雜的,可以參考src/map_geo_格式化.js內(nèi)的SQL Server導(dǎo)入用的SQL語句的例子。
如果需要特定的POLYGON格式,可以根據(jù)庫里面介紹的字段格式,自行進(jìn)行解析和驗(yàn)證。
使用過程中如果遇到多種不同坐標(biāo)系的問題,比如請求的參數(shù)是WGS-84坐標(biāo)(GPS),我們后端存儲的是高德的坐標(biāo),可以通過將WGS-84坐標(biāo)轉(zhuǎn)成高德坐標(biāo)后進(jìn)行處理,百度的坐標(biāo)一樣。轉(zhuǎn)換有相應(yīng)方法,轉(zhuǎn)換精度一般可以達(dá)到預(yù)期范圍,可自行查找?;蛘咧苯影迅叩碌脑甲鴺?biāo)數(shù)據(jù)轉(zhuǎn)換成目標(biāo)坐標(biāo)系后再存儲(精度?)。
SQL Server中的運(yùn)行結(jié)果(大概2分鐘完成POLYGON的轉(zhuǎn)換,表數(shù)據(jù)物理存儲空間大概300M):

最后
最新的數(shù)據(jù)下載和相關(guān)問題請到 Github查看:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
releases內(nèi)除了有省市區(qū)三級坐標(biāo)和行政區(qū)域邊界csv數(shù)據(jù)外,還有處理好的3級或者4級省市區(qū)鎮(zhèn) csv數(shù)據(jù)提供下載。
如果這個庫有幫助到您,請 Star 一下。