最新全國省市區行政數據

最新全國省市區行政數據

 

 

AreaCity 開源庫整理了省、市、區縣、鄉鎮街道四級行政區劃數據,配套了在線工具轉換成三級、四級聯動JavaScript代碼,使用自帶的轉換工具軟件可以導入數據庫;數據源自: 統計局、民政部、騰訊地圖行政區劃、高德地圖行政區劃,從這四大平臺整合。

開源庫內帶有省市區三級座標邊界數據,數據來源:高德開放平臺,使用配套提供的轉換工具軟件可以轉換成shp、geojson、sql、導入數據庫;另配套有開源Java查詢工具,內存佔用低,性能優良,1秒可查1萬個以上座標對應的城市信息。

截止到發文(2023-02-08),開源庫內於2023年02月02日發佈了新整理的最新版數據;行政區劃數據更新頻繁,僅區縣每年都有好多個變更,統計局、民政部每年都會發布新數據(目前最新版的爲統計於2022-12-29日發佈的數據),不過需要自行處理;所以省市區數據需要經常去同步維護,好在這個開源庫有在持續的長期維護,且有配套的轉換工具,新數據發佈後更新相對容易很多。

由於開源庫更新維護數據比較及時,所以只要開源庫沒有被關閉,本文介紹的提取方法就一直適用,不僅僅是適用於今年; 比那些上傳到下載平臺就萬年不更新的數據優秀很多。

一、最新版行政區劃數據提取

1. 獲取通用json格式文件

數據在線預覽頁面底下,提供了個在線轉換工具,打開就是當前庫裏面整理好的最新版數據(開源庫更新維護數據比較及時),能將省市區鎮四級數據轉成json格式文件,控制選項也豐富,想要導出一級、兩級、三級、四級數據都可以:

通用json格式文件生成

轉換好後直接可以下載到json文件,json文件對於跨平臺使用很方便,不單單是網頁裏面使用,手機app、桌面程序、後端代碼內使用均適用。

通過自定義功能可以導出任意格式的JSON數據,比如第三方開源的級聯操作庫需要特定結構的JSON數組,部分自定義操作參考:

2. 獲取多級聯動js版數據代碼

數據在線預覽頁面底下,提供了個在線轉換工具,打開就是當前庫裏面整理好的最新版數據(開源庫更新維護數據比較及時),能將省市區鎮四級數據轉成多級聯動js,控制選項也豐富,轉成兩級、三級、四級聯動都可以,還能在頁面上直接體驗到四級聯動下拉選擇:

js多級聯動代碼生成

轉換好後直接可以下載到js文件,其實js代碼內已經內嵌了json格式的數據,並且封裝好了多級聯動js代碼,我們只需要按代碼內的說明,調用方法即可在html網頁裏面快速實現多級聯動,用戶選擇後會有事件回調。

3. 導入數據庫、導出SQL文件

導入前先下載好:

  1. 【轉換工具軟件】在數據在線預覽頁面內,點擊轉換工具軟件鏈接可以下載到開源庫提供的轉換工具,使用此工具,可以將省市區鎮四級行政區劃數據導入到MySQL、SQL Server數據庫,或者轉換成sql文件(導入到其他兼容數據庫);
  2. 【ok_data_level4.csv數據文件】在數據在線預覽頁面內,點擊顯示的數據下載鏈接,下載解壓得到ok_data_level4.csv數據文件。

準備好後,打開轉換工具,開始將數據導入數據庫(這裏導入的MySQL,導入SQL Server一樣操作):

  1. 點擊工具內的“高級>>”按鈕,打開自定義腳本界面;
  2. 在腳本界面點擊頂上的選擇文件,選擇下載解壓的ok_data_level4.csv數據文件;
  3. 在內置腳本下拉框中選擇“省市區鎮導入數據庫”選項,然後點擊應用按鈕;
  4. 在左側界面的數據庫設置中,選擇類型爲MySQL,填寫好數據庫連接端口+數據庫名+賬號密碼;
  5. 自定義腳本界面中點擊“導入數據庫”按鈕,等待一會,4萬多條數據3分鐘不到就就導入數據庫了。

導入操作

MySQL客戶端查看數據:

MySQL導入的數據

以上操作同樣適用於SQL Server,一樣的步驟,另外內置腳本中還支持“省市區鎮轉SQL”功能,可以直接導出SQL文件,可以導入到其他兼容的數據庫。

4. 行政區劃數據的一些要注意的地方

開源庫會盡量和民政部的更新頻率保持一致,但由於最爲主要的兩個數據源國家統計局騰訊地圖行政區劃更新頻度並沒有民政部高;因此省市區三級準確度和民政部準確度是一量級,並且要更完整些;第四級鎮級主要由騰訊地圖行政區劃提供,騰訊數據源並不經常更新,因此會導致小部分新增、調整的城市第四級沒有數據(會用上級數據補齊),使用前應該考慮此缺陷。

數據通過使用上級數據補齊的形式(具體細節請參考庫文檔後面的數據規則),使得任何一個數據都能滿足省市區鎮4級結構,沒有孤立的(ID全局唯一),因此不管從哪級進行下級選擇,都能進行有效操作。可以通過ID結構來識別這種補齊填充的數據,只要ID爲上級的ID+多個0,就代表此數據爲補齊填充數據,比如:東莞(4419)-東莞(441900),很容易鑑別出441900爲補齊用的填充數據。

會發生補齊行爲的數據很少,約50來個,主要爲:直筒子市(東莞、儋州等)、省直轄縣級市(濟源、潛江等),他們的下一級僅有補齊的這條數據。另外直轄市(北京、天津等)下級也僅有一條數據,ID結尾爲01(不包括重慶,重慶下級分成了市、縣兩個)。

數據中不包含大部分行政管理區(請自行查閱和行政區劃的差別),比如:雄安新區、天府新區、蘇州工業園區等。

二、省市區縣座標邊界數據提取

省市區三級在線預覽和下載:https://xiangyuecn.gitee.io/areacity-jsspider-statsgov/assets/geo-echarts.html ,提供了ECharts + 高德地圖四級下鑽代碼。

  • 數據大小:13MB+壓縮包 解壓後130M+
  • 數據來源:高德開放平臺
  • 文件格式:csv通用純文本格式 (可轉換成shp、geojson、sql、導入數據庫)
  • 文件名:ok_geo.csv.7z
  • 座標系:默認GCJ-02 (可轉換成WGS-84、CGCS2000、BD-09等座標系)
  • 更新頻度:開源庫一月一更(直接從高德同步,忙的時候沒時間會久一點)

下載到的數據是最新的csv純文本格式,可以自行轉換成需要的格式;也可下載一下開源庫提供的格式轉換工具,工具支持將csv數據轉換成:shp、geojson、sql、導入數據庫、座標系轉換,功能比較豐富。

1. 轉成GeoJSON文件

geojson是通用格式,可以在網頁中使用:地圖、ECharts 都能直接支持,也可以在GIS軟件中打開和編輯邊界。

  1. 打開下載的格式轉換工具,選擇下載並解壓出來的ok_geo.csv文件;
  2. 點擊轉成geojson文件按鈕,耐心等待一會,數據就導出完成了;
  3. 導出的json文件和csv文件在同一個目錄內,默認是所有數據在一個json文件內,點開高級使用裏面geojson拆分工具可以按省、市、區拆分成單獨的小文件。

開源庫另外配套有Java座標邊界查詢工具:AreaCity-Query-Geometry,使用jts庫geojson邊界數據文件中查找出和任意點、線、面有相交的矢量邊界,內存佔用低,性能優良,1秒可查1萬個以上座標對應的城市信息;此工具自帶了一個HTTP API服務,可以在在線預覽頁面的自定義數據源中進行調用測試,頁面會立即繪製查詢出來的邊界圖形。

2. 轉成SHP文件

shp文件一般是在GIS軟件中使用和編輯,比如:ArcGIS、QGIS軟件;使用格式轉換工具可以導出shp格式文件,導出操作和上面geojson文件一樣,點擊轉成shp文件按鈕即可導出。

3. 導入數據庫、導出SQL文件

使用格式轉換工具可以將省市區邊界數據導入到數據庫,使用數據庫提供的空間查詢可以輕鬆做到查詢任意座標點對應的省市區名稱;也可通過後端程序查詢出省市區多級邊界數據WKT格式,供前端使用。

  1. 打開下載的格式轉換工具,選擇下載並解壓出來的ok_geo.csv文件;
  2. 數據庫設置中選擇要導入的數據庫類型,支持:MySQLSQL Server,再填寫數據庫連接,包括:端口、數據庫名稱、賬號密碼;
  3. 點擊導入數據庫按鈕,等待一會,大約3分鐘左右,所有數據就都導入到了數據庫按今天日期新建的表裏面。
對空間字段的查詢,需要用`ST_AsText()`方法才能查詢出字符串文本(WKT: Well Known Text),否則查詢出來的是二進制數據
-- MySQL版:
SELECT id, name, ST_AsText(geo) AS geo, ST_AsText(polygon) AS polygon FROM 表名
-- SQL Server版:
SELECT id, name, geo.STAsText() AS geo, polygon.STAsText() AS polygon FROM 表名


省市區邊界導入到了數據庫後,我們就可以在在 `Java`、`Python`、`PHP`、`C#` 等程序中對數據庫進行查詢,通過SQL的空間計算函數`ST_Intersects`來查詢一個座標在哪些邊界範圍內,就能得到對應的省市區信息了
比如要查詢座標`lng:113.929976 lat:22.529497`是在哪個城市:
-- MySQL版:
SELECT id,deep,name FROM 表名 WHERE ST_Intersects(polygon, ST_GeomFromText('POINT(113.929976 22.529497)',0))=1
-- SQL Server版:
SELECT id,deep,name FROM 表名 WHERE polygon.STIntersects(geometry::STGeomFromText('POINT(113.929976 22.529497)',0))=1

注:csv文件內的邊界數據默認是高德地圖GCJ-02火星座標系,如果需要其他座標系,比如百度的BD-09或GPS的WGS-84,可以通過高級腳本中的座標系轉換插件進行轉換,選擇好對應的插件後,點擊應用就可以了,在導入數據庫時會自動進行座標系轉換。

三、鄉鎮級座標邊界數據獲取

鄉鎮級的座標邊界數據未開源,但和省市區三級一樣的可以在線預覽,大約半年重新整合一次,數據參考文檔和下載地址:https://xiangyuecn.gitee.io/areacity-jsspider-statsgov/assets/geo-level4.html

  • 數據大小:109MB+壓縮包 導出後300M+
  • 數據來源:多個數據源整合
  • 文件名:ok_geo4_*.csv.7z
  • 座標系:默認GCJ-02 (可轉換成WGS-84、CGCS2000、BD-09等座標系)

鄉鎮級座標邊界數據的使用方法和省市區三級一樣,使用配套的轉換工具可轉換成shp、geojson、sql、導入數據庫,請參考上面省市區三級的操作步驟。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章