最新全國省市區縣鄉鎮街道行政區劃資料和座標邊界資料更新提取(2023年)

xiangyuecn發表於2023-02-08

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、匯入資料庫,請參考上面省市區三級的操作步驟。

【完】

相關文章