在以前的博文中,实现过基于ArcGIS实现大量相邻行政区的外轮廓提取。最近遇到一个新的问题,在地图上一个区域内,有大量散落的多边形(可以理解为耕地或者房屋),我需要提取在这些多边形外一个多边形或外轮廓,可以理解为工作区或者行政边界。基于多边形的合并是无法实现的,这样只会将Polygon合并为MultiPolygon,无法提取出一个唯一边界。这里基于PostGIS实现了大量不相邻多边形的外轮廓提取。
最终,基于PostGIS(建议3.1以上版本)实现了提取外边界的效果,实现技术路线如下:
使用PgAdmin预览众多的多边形
st_union与ST_Collect都可以使用,但是官方还是建议使用st_union,它可以避免很多异常。
select st_union((SELECT array_agg(shape)
FROM tempzzdk))
计算凸包十分简单,使用ST_ConvexHull即可,但同时可能失去很多特征点,生成的任务区比较粗,只能是一个大致的范围。
select ST_ConvexHull ((select ST_Collect(shape) from tempzzdk))
计算凹包十分简单相对复杂一些,使用ST_ConcaveHull,但相对于凸包会多保留一些特征点,生成的任务区保留了一些弯曲变化。
这个函数有三个参数:
select ST_ConcaveHull ((select ST_Collect(shape) from tempzzdk),0.7)
凹包计算方法,相对更好一些,保留了特征,让人容易接受。