【源GitHub仓库】 | 【Gitee镜像库】本文档中默认使用github.io部署的链接,如果无法访问,你可替换链接开头部分成gitee.io部署的链接访问更快。
省市区数据采集并标注拼音、坐标和边界范围 数据下载当前最新版本:2023.231212.240303版,更新于2024-03-03,整合了 统计局2023-09-11、民政部2023-04-23、腾讯地图行政区划2023-12-12、高德地图行政区划采集当天 数据。
文件名 大小 描述 下载地址如果上面线路一和线路二都无法下载:可以到 Gitee Releases 下载,或到 GitHub Releases 下载最新发布数据文件。
csv纯文本文件可以非常方便解析成其他格式;如果在使用csv文件过程中出现乱码、错乱等情况,需自行调对utf-8(带BOM)编码,文本限定符为"。
通过本库提供的 AreaCity-Geo格式转换工具 可快速方便的将行政区划、坐标、边界范围csv文件导入数据库,并且提供格式转换功能(shp、geojson、sql),欢迎下载使用。边界导出成geojson后可通过 AreaCity-Query-Geometry Java开源程序进行高性能的坐标数据、边界数据查询。
如需数据、功能定制,网站、App、小程序、前端后端开发等需求;矢量专题地图绘制、修改,前端地图、大屏、ECharts数据展示开发,后端数据处理、接口开发;请加本文档下面的QQ群,联系群主(即作者),谢谢~
Git仓库和存档由于仓库内的历史记录数据可能会很大,可以加上--depth 1提取最新版的数据即可。
//Gitee镜像仓库: 速度快 git clone --depth 1 https://gitee.com/xiangyuecn/AreaCity-JsSpider-StatsGov.git //源GitHub仓库: 可能比较慢或无法访问 git clone --depth 1 https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov.git
每当仓库增长到一定大小后,本仓库将会进行存档处理,同时将历史记录中的大文件进行清理,这将导致一些文件之前的历史丢失,请到存档仓库查阅更早的历史记录; 2023年05月28日前历史存档:GitHub | Gitee 。
【QQ群】交流与支持欢迎加QQ群:①群 484560085、②群 626141661、③群 346847528,纯小写口令:areacity
数据源 【字段】ok_data_level*.csv - 行政区划数据表此表为省市区镇三级、四级行政区划数据表,可在线测试预览(支持转成json、生成多级联动js代码),可使用 AreaCity-Geo格式转换工具软件 直接导入数据库。
字段 类型 描述此表为坐标和行政区域边界范围数据表,可在线测试预览;此表含省市区三级不含第四级,如需乡镇级坐标边界数据请到此下载;因为数据文件过大(130M+),所以分开存储。
由于边界数据的解析比较复杂,请参考src/map_geo_格式化.js内的SQL Server的解析语句,或者使用 AreaCity-Geo格式转换工具软件 直接导入数据库,或者转换成shp、geojson、sql格式。
如果需要查询坐标对应的城市、查询城市或下级的边界数据,可下载 AreaCity-Query-Geometry Java开源程序进行高性能的查询,内存占用低(1秒可查1万个以上坐标对应的城市信息)。
字段 类型 描述
数据有效性和完整性本库会尽量和民政部的更新频率保持一致,但由于最为主要的两个数据源国家统计局、腾讯地图行政区划更新频度并没有民政部高;因此省市区三级准确度和民政部准确度是一量级,并且要更完整些;第四级乡镇级主要由腾讯地图行政区划提供,腾讯数据源并不经常更新,因此会导致小部分新增、调整的城市第四级没有数据(会用上级数据补齐),使用前应该考虑此缺陷。
数据通过使用上级数据补齐的形式(具体细节请参考后面的数据规则),使得任何一个数据都能满足省市区镇4级结构,没有孤立的(ID全局唯一),因此不管从哪级进行下级选择,都能进行有效操作。可以通过ID结构来识别这种补齐填充的数据,只要ID为上级的ID+多个0,就代表此数据为补齐填充数据,比如:东莞(4419)-东莞(441900),很容易鉴别出441900为补齐用的填充数据。
会发生补齐行为的数据很少,约50来个(不含台湾),主要为:直筒子市(东莞、儋州等)、省直辖县级市(济源、潜江等),他们的下一级仅有补齐的这条数据。另外直辖市(北京、天津等)下级也仅有一条数据,ID结尾为01(不包括重庆,重庆下级分成了市、县两个)。
直筒子等这种为什么不直接把下级往上提一级来做区级,采用补齐填充的方式来对齐数据的原因,请参考issue#9。
数据中不包含大部分行政管理区,比如:雄安新区、天府新区、苏州工业园区等,请自行查阅和行政区划的区别。
数据更新日志
在线测试工具在线测试工具地址:https://xiangyuecn.github.io/AreaCity-JsSpider-StatsGov/ / Gitee镜像地址
此工具主要用于将ok_data_level*.csv四级行政区划数据文件转换成别的格式,另外提供省市区多级联动测试,并且可生成js源码(含数据)下载,3级联动生成的文件紧凑版68kb,4级联动紧凑版1mb大小。
工具支持:省市区镇四级行政区划数据预览和测试。
将csv数据导出成压缩后的紧凑版js格式纯数据文件,省市区3级数据65kb大小。
将csv数据导出成JSON对象、JSON数组纯数据文件,省市区3级数据120kb+。
网页版省市区镇多级联动测试。
网页版省市区镇多级联动js代码生成(含数据)。
相关截图行政区划数据在线转换+多级联动:
ECharts + 高德地图四级下钻:
格式转换工具-PC版软件AreaCity-Geo格式转换工具软件(gitee镜像)用于将采集到的 ok_geo.csv 省市区乡镇坐标和边界范围文件转成其他格式,也支持将 ok_data_level*.csv 省市区镇行政区划数据导入数据库。
此软件可免费使用,但有些功能会受到限制,比如省市区边界数据:每次转换操作最多导出全国所有省级、或一个城市和它的下一级数据,可付费升级为完整版。
工具支持:将 ok_geo.csv坐标边界 转成 ESRI Shapefile (.shp) 文件。
将 ok_geo.csv坐标边界 转成 GeoJSON (.json) 文件,支持按层级拆分成多级json文件。
将 ok_geo.csv坐标边界 转成 SQL (.sql) 文件,支持多种数据库格式。
将 ok_geo.csv坐标边界 导入 MySQL 5.0+、SQL Server 2008+、PostgreSQL 数据库。
将 ok_data_level*.csv省市区镇行政区划 转成 SQL 文件、导入 数据库;可同时将坐标、边界范围附加到同一表中。
支持坐标系转换,ok_geo默认为GCJ-02火星坐标系,支持转换成:BD-09、WGS-84 GPS、CGCS2000。
可执行自定义 JavaScript 脚本,可扩展出丰富功能。
转换精度高,速度快,内存占用小,3-5分钟左右可转换完所有数据。
支持Win10、Win8、Win7,32位、64位系统使用(其他系统装虚拟机可用)。
相关截图工具软件界面:
导入MySQL查询效果:
导入SQL Server查询效果:
省市区三级边界(ArcMap Asia_Lambert_Conformal_Conic投影):
乡镇边界-湖北省(QGIS Asia_Lambert_Conformal_Conic投影):
坐标边界查询工具 - AreaCity-Query-GeometryAreaCity-Query-Geometry (Gitee镜像库)是一个高性能的坐标数据、边界数据查询工具,Java开源程序、带http查询接口,内存占用低(1秒可查1万个以上坐标对应的城市信息);先用上面的格式转换工具将ok_geo.csv转成geojson格式,然后运行此工具即可测试使用。
工具支持:查询一个坐标点对应的城市信息;
查询一条路径经过的所有城市;
查询一个矢量范围覆盖的所有城市;
查询一个城市或下一级所有边界数据(WKT格式);
支持通过HTTP API服务进行查询调用;
支持通过Java代码进行查询调用;
源码简单,包括测试bat脚本共5个文件,无需IDE即可修改和运行,copy即用。
测试截图
数据规则和相关问题
id编号和国家统计局的编号基本一致,方便以后更新,有很多网站接口数据中城市编号是和这个基本是一致的,包括民政部、腾讯地图和高德地图的城市数据这套编号都是大部分通用的。
东莞、中山、儋州等不设区的直筒子市没有第三级区级,自动添加同名的一级作为区级,以保证整个数据结构的一致性,添加的城区编号以上级的ID结尾加两个0作为新ID,此结构ID兼容性还不错,比如:东莞(4419)下级只有一个区 东莞(441900),但结尾加00后会导致精简过的ID如果要恢复成指定的位数时需要将这些添加的区域进行特殊处理,否则4419扩充到6位后会变成441900和下级产生冲突。
省直辖县级市(河南济源、湖北潜江、海南五指山、新疆昆玉等)根据编号来看本来只能放到区级,但为了便于用户选择,所有直辖市自动添加一个同名的市级,比如:湖北-直辖市-仙桃-*镇 调整后为 湖北-仙桃-仙桃-*镇,新添加数据的编号规则和第二条规则相同。
如果市、区没有下级,自动添加同名的一个城镇作为下级,编号规则和上一条规则相同,以保证数据层次的一致性(任何一个数据都能满足省市区镇4级结构,没有孤立的);比如:福建-泉州-金门没有镇,调整后为福建-泉州-金门-金门;另外从民政部等数据源中补全的新增城市也会缺失下级,照此规则自动补齐。
台湾数据只有省市区三级没有乡镇级,因此乡镇级通过前面几条规则自动补齐;香港、澳门数据源有两级,当做直筒子市来处理,比如把香港当做东莞,从面积和人口来看还算合理,因此港澳数据中省市区三级是完全相同的,第四级乡镇级才有城市数据,如:香港-香港-香港-湾仔区。
地区名字是直接去掉常见的后缀进行精简的,如直接清除结尾的市|区|县|街道办事处|XX族自治X,数量较少并且移除会导致部分名字产生歧义的后缀并未精简。
省市区前三级数据的合并:统计局采集过来的数据会先和民政部的数据交叉对比后进行合并;由于统计局的数据明显的滞后,民政部内新添加的市、区将不会有乡镇级(自动补齐同名乡镇级);如果民政部数据存在明文撤销的市、区,那么合并的时候会删除统计局对应的数据;如果统计局中的数据在民政部数据内不存在,将原样保留。高德地图行政区域会和腾讯地图行政区划数据进行交叉对比,然后择优选取需要的数据。最后(统计局+民政部)和(高德+腾讯的数据)的前三级数据进行交叉融合,得到的【省市区】 ≈ 【统计局的数据】 - 【160来个开发区、经济区、高新区、国家级新区】 - 【撤销城市】 + 【新设城市】 + 【港澳台】。
第四级乡镇级主要采用腾讯地图行政区划数据,综合高德和统计局的数据,和统计局的数据差异在3000个左右,占比7.5%(3000/40000),得到的【乡镇级】 ≈ 【腾讯地图行政区划数据】。
省市区三级的坐标和行政区域边界范围数据从高德采集,省市区总计3300+条数据,少部分城市未采集到数据(仅台湾的城市、国外)。关于未获取到坐标或边界的城市,本采集方案采取不处理策略,空着就空着,覆盖主要城市和主要人群,未覆盖区域实际使用过程中应该进行降级等处理。比如:尽最大可能的根据用户坐标来确定用户所在城市,因为存在没有边界信息的区域,未匹配到的应使用ip等城市识别方法。得到的【坐标和边界】 = 【高德地图数据】。
数据中不包含大部分行政管理区,比如:雄安新区、天府新区、苏州工业园区等。
参考链接:行政区划,统计用区划代码和城乡划分代码编制规则,民政部发布的行政区划代码。
为什么不直接用统计局的数据存在滞后,更新没有民政部和其他数据源频繁,新采集却是老数据,并且明知道存在新数据,强迫症又要犯了。
统计局的数据比较齐全但是比较杂,靠一个人来分开整理几乎不可能;比如:统计局数据包含了160多个经济区、开发区,这种区划应该算专门的区域(行政管理区),一般由多个城市的区域组成,在区级内算是重复的区域,因此需要剔除,但剔除后这些区域下面的乡镇级需要划分到实际的归属城市下面,这就很困难了,因为量太大了,一个个去查归属地几乎不可能。
统计局的数据也存在缺失数据,如:港澳台、昆玉市、双河市。
其他平台的数据在感官上显得都不够完美,综合一下舒畅多了。
拼音标注和排序 拼音源省市区这三级采用在线拼音工具转换,据说依据《新华字典》、《现代汉语词典》等规范性辞书校对,多音字地名大部分能正确拼音,重庆:chong qing,朝阳:chao yang,郫都:pi du,闵行:min hang,康巴什:kang ba shi、六安市:lu an shi;转换完成后会和腾讯地图行政区划存在的拼音进行对比校正。
乡镇级以下地名采用本地拼音库(assets/pinyin-python-server)转换,准确度没有省市区的高。
拼音前缀目前采用的是截取第一个字拼音的首字母,和港澳台、国外特殊指定前缀。
排序方案:方案一(2016版废弃):取每个字的拼音首字母排序,比如:河北:hb 湖北:hb 黑龙江:hlj 河南:hn 湖南:hn
方案二(2018版废弃):取的是第一个字前两个字母和后两个字首字母排序:河北:heb 黑龙江:helj 河南:hen 湖北:hub 湖南:hun
方案三(返璞归真):取第拼音前缀首字母进行排序,如果两个字母相同,再使用(首字母前缀或自定义前缀)+(名称)进行排序:河北:h.河北 河南:h.河南 黑龙江:h.黑龙江 湖北:h.湖北 湖南:h.湖南 香港:~1.香港 澳门:~2.澳门
排序方案三看起来好些;为什么不直接用名称文本进行排序,我怕不同环境下对多音字不友好,最差情况下也不会比方案一差,并且排序可透过前缀实施自定义控制。
修正数据
使用js自行采集在低版本chrome控制台内运行1、2、3打头的文件即可完成采集,这些文件按文件名顺序执行。环境配置好的情况下完成一次采集大概30分钟内。
最新采集代码内对拼音转换的接口变化蛮大,由于优秀的那个公网接口采取了IP限制措施,就算使用了全自动的切换代理,全量转换还是极为缓慢,因此采用了本地转换接口和公网转换接口结合的办法,省市区三级采用公网接口,其他的采用本地接口。公网接口转换的正确度极高,本地的略差那么一点。
统计局官网也会对请求进行限制,超过一定量的请求后会要求输入验证码。只要没有禁用浏览器缓存,一个统计局url请求过一次就不再次发起网络请求(会走缓存),最多会产生4000个有效网络请求,发现要输入验证码时,重新开始采集即可,有缓存的非常快速。
采集环境参考chrome 控制台,当前数据采集使用的chrome版本:Chrome 97 + Chrome 80,chrome越来越难用(简单制作chrome便携版实现多版本共存)。
2022年以前统计局数据乱码的根本原因在于统计局服务器响应的内容编码为gb2312(2022已采用utf-8编码无此问题),但服务器响应头只给了Content-Type: text/html,因此可用Fiddler篡改Content-Type响应头为Content-Type: text/html; charset=gb2312也可解决新版Chrome乱码问题。
行政区划数据采集按顺序用文本编辑器打开1-3打头的js文件,阅读源码开头的注释,用浏览器打开注释内相应的目标页面。
在浏览器页面内打开控制台,控制台中导入需要的数据。
复制js文件内的源码到控制台内执行。
数据采集或转换完成会自动弹出下载,保存好文件,然后处理下一个1-3打头的js文件。
坐标和行政区域边界采集使用坐标和边界目录内的map_geo.js、map_geo_格式化.js在,根据文件内的说明即可完成采集。
其他资源
捐赠如果这个库有帮助到您,请 Star 一下。
您也可以使用支付宝或微信打赏作者:
MIT License Copyright (c) 2019 xiangyuecn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.