行政区划代码是国家用于统计地域相关数据的重要参考,高德、百度的地图API也都有这个代码与GPS坐标之间的相互解析。如果我们的应用和地域相关,不妨直接用这套编码,既通用又方便。
然而很多人不知道这个代码怎么获取,虽然CSDN有好多下载资源,但有的数据太老,并且“价格”不菲。这里介绍一种方法,可以获得最新权威版本。
- 打开民政部网站 www.mca.gov.cn ,(这个域名后缀就决定了数据的权威性)
- 这个数据经常更新。找到最新的打开,CTRL-A复制全部,粘贴到notepad++
- 掐头去尾,只留下代码和区域名称
- 正则替换(为6位数字后面加上逗号): (\d{6})\s --> ($1),
- 正则替换(去掉所有空格和制表符):[ \t]+ --> 空
现在得到了一个csv,可以利用工具导入数据库了。
- 进一步得到json
- 正则替换(行首换为双引号"): ^ -> "
- 替换:, --> ,"
- 正则(行尾换成 "],):$ --> "],
- 最开始加上[, 最后去掉,换成] ,现在得到了一个json二维数组,每一个元素都是一个代码和一个区域名。
至此,一份最新的行政区划代码数据就是你的了。其特点是:省级(直辖市)后四位是0,市级后两位是0,县(区)级后两位有值。县级把后两位置为0,就是其所属的市级单位,市级后四位置零就是省级单位代码。
当然,会爬虫的同学处理这个页面更不在话下了。
- 更进一步:得到行政区划的边界数据
行政区划区域,可以看成是一个多边形。边界数据(或者叫围栏数据)就是这个多边形的坐标了。github上有人整理过这些数据:https://github.com/Vonng/adcode,但是已经是两三年前的内容了。
幸运的是,百度地图提供了这个API,可以利用上面得到的行政区划代码,自动地批量从百度地图获取边界数据。
API参考:http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a7b48
如果想自己重新获取边界数据,可以自己申请一个百度API的key,参考这个:https://download.csdn.net/download/nullpointer2008/11978464