1 背景
最近写了个爬取网络地图矢量数据的爬虫(土地分类),程序比较给力能够把数据爬取下来,且效率还是比较高的。
直接上图:
由于是请求矢量切片爬取的数据,就存在瓦片边界的问题,比如一个完整的多边形可能因为存在于多个切边上这个多边形就被切成多个部分。怎么把这个分开来的多边形合并起来,这就需要解决。本质上这个问题就是处理图斑的问题。当然可以用arcgis、qgis的类似软件进行人工处理。但是写代码的,怎么能用这种耗时耗力的方法呢。
2 思路
第一个想到的是监测边界,然后程序合并(程序写起来难度太大了)。
第二个方法是建立网格,一个一个格子去处理(复杂度依然存在)。
第三观察图形,发现能合并的数据距离都极近,那如果把多边形进行聚簇,然后对簇进行合并,问题就解决了。
postgis里面有ST_ClusterWithin函数,可以进行聚簇。
Synopsis
geometry[] ST_ClusterWithin(geometry set g, float8 distance);
Description
ST_ClusterWithin is an aggregate function that returns an array of GeometryCollections, where each GeometryCollection represents a set of geometries separated by no more than the specified distance. (Distances are Cartesian distances in the units of the SRID.)