• 基于PostGIS实现大量不相邻多边形的外轮廓提取


    在以前的博文中,实现过基于ArcGIS实现大量相邻行政区的外轮廓提取。最近遇到一个新的问题,在地图上一个区域内,有大量散落的多边形(可以理解为耕地或者房屋),我需要提取在这些多边形外一个多边形或外轮廓,可以理解为工作区或者行政边界。基于多边形的合并是无法实现的,这样只会将Polygon合并为MultiPolygon,无法提取出一个唯一边界。这里基于PostGIS实现了大量不相邻多边形的外轮廓提取

    解决方案

    最终,基于PostGIS(建议3.1以上版本)实现了提取外边界的效果,实现技术路线如下:

    ShpFile文件
    PostGISs数据库
    合并st_union
    集合ST_Collect
    复杂几何体
    计算凸包ST_ConvexHull
    计算凹包ST_ConcaveHull
    凸包边界
    凹包边界

    合并前

    使用PgAdmin预览众多的多边形
    合并前

    解决方法

    1. 合并多边形

    st_unionST_Collect都可以使用,但是官方还是建议使用st_union,它可以避免很多异常。

    select st_union((SELECT array_agg(shape)
    	FROM tempzzdk))
    
    • 1
    • 2

    合并后结果

    2. 计算凸包

    计算凸包十分简单,使用ST_ConvexHull即可,但同时可能失去很多特征点,生成的任务区比较粗,只能是一个大致的范围。

    select ST_ConvexHull ((select ST_Collect(shape) from tempzzdk))
    
    • 1

    凸包结果

    3.计算凹包

    计算凹包十分简单相对复杂一些,使用ST_ConcaveHull,但相对于凸包会多保留一些特征点,生成的任务区保留了一些弯曲变化。

    这个函数有三个参数:

    • geometry geom ,几何体
    • float target_percent,特征点抛弃的比例,0.1-0.99,越小特征保留的越多,但计算效率越低。当等于1时,和凸包的计算效果是一样的。
    • boolean allow_holes ,是否允许有洞
    select ST_ConcaveHull ((select ST_Collect(shape) from tempzzdk),0.7)
    
    • 1

    凹包结果

    总结

    凹包计算方法,相对更好一些,保留了特征,让人容易接受。

  • 相关阅读:
    使用FineBI,轻松搞定汽车金融公司风险指标分析!
    一文搞懂 MySQL 日志
    深拷贝 浅拷贝 赋值的区别以及如何实现
    基于Hadoop架构的可视化大数据挖掘建模平台
    【高级程序设计】Week2-4&Week3-1 JavaScript
    锐捷端口安全实验配置
    Facebook广告效果数据获取
    Android 动画
    el-dialog固定高度
    C++语言程序设计课程设计任务书
  • 原文地址:https://blog.csdn.net/GISuuser/article/details/126668994