GIS中常见的是有很多面彼此互相压盖,有时需要对压盖面的权重进行统计分析,如下图:
本文主要介绍这种情况如何通过PostGIS快速完成数据分析功能。
二 解决方案
言简意赅,假设有个面状图形表为Circles,需要快速实现彼此压盖区域的权重统计,这样的分析只需3步:
一 ST_ExteriorRing函数提取面的边界,另存到临时表boundaries:
面拆线
二 ST_Polygonize函数自动构造面,首尾不闭合的线无法构面会舍弃,结果就是重叠区域面,另存到临时表polys:
线重组重叠区域面
三 更新面的权重
使用ST_PointOnSurface函数生成重叠区域面内一点,该点肯定位于面内,通过改点判断与其重叠的面Circles数量。面简化点判断关系是非常典型的一个空间抽象思维。
deletefrom POYS where cunt=0;
权重更新,分级设色
三 总结
PostGIS极其灵活,熟练使用在快速进行空间数据统计分析时非常有效,本示例核心思想是,灵活获取重叠区域面,并用重叠区域面转点的抽象思维,判定这些点与原来的面的重叠数量n,即重叠区域面是n个circles中的面的交集,示例用到的函数说明如下:
ST_ExteriorRing:提取面的外环边界线。
ST_Polygonize:首尾闭合的线能自动构造面,否则,构造失败。
ST_PointOnSurface:生成面内一点,该点一定位于面内。
THE END