- A+
最近在开发的过程中,遇到了一个问题,如何将多段Polygon合并成一个,在网上找了好久,试了一堆方法,这里转载我找到的一个实际用起来最有用的方法
以下内容转载于:https://www.cnblogs.com/vmumu/p/13356419.html
一、行政区获取
公司需要做大屏数据展示,地图地区需要到街道级别。
查看了不少资料。
目前的解决方案是,省市级别的数据在阿里地图选择器下载( http://datav.aliyun.com/tools/atlas/),可以做到县级下钻,如果要下钻到街道级别,则需要网上找这部分数据(找了很多,不大靠谱。如果付费的话,BIGEMAP,3000多授权,能下载所有行政区数据)。我们公司小,需求不多,就湖南部分区县,所以网上找的方案,用的BIGEMAP的免费功能,导出边界,一个个的街道导出(BIGEMAP无mac版)
以醴陵市(湖南省-株洲市-醴陵)为例
1、导出所有街道级别KML文件,然后在 http://geojson.io/#new 转化为JSON数据,转化后数据格式大概如下。
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [] } } ] }
2、合并数据,将所有街道级别JSON,合并到一起,就是整个醴陵市区的行政区数据。上述代码JSON对象下features数据放到一个features对象下(数据太多可以用nodejs或者java写个方法,读取文件合并)
{ "type": "FeatureCollection", "features": [ { // 街道1下features }, { // 街道2下features }, { // 街道3下features }, // ... ] }
二、行政区数据合并
区级别的行政区及以上级别可能改变会比较小,街道级别数据变动比较多,以醴陵为例,BIGEMAP上数据应该是比较早以前数据,2015年后街道合并、改名的有很多,下图对照即可看出
(左边为BIGEMAP上的醴陵市行政区数据,右图是我们系统的,差不多也是最新的数据。)
注:本文以geojson、mapshaper这两个网站合并区域为例,其他博客也看到可以用js之类处理合并,可以去看看
1、合并数据,以【明月镇】为例,百度百科数据(2015年,贺家桥镇与大障镇成建制合并设立明月镇)。
在 http://geojson.io/#new 上传家桥镇与大障镇的kml文件(之前已下载) OPEN - FILE
获得如下行政区边界数据
将右侧数据复制出来,另存为json文件
2、修改该json文件,目前得到数据如下,features数组对象下,每个对象的properties增加alias属性,属性值为合并后名字。保存
3、打开https://mapshaper.org/,选择刚上传的json文件导入,得到如下数据
打开网站命令行工具,输入命令 dissolve 'alias' -o result.json,回车,然后下载json文件
4、校验,下载完的json数据拷贝出来,放入geojson右侧JSON框内,就可以看到合并后的行政区了。注意修改properties下的属性,合并后,属性名为 alias ,需改为 name,与之前保持一致
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。