ST_PointOnSurface如何计算?


21

PostGIS文档指出ST_PointOnSurface返回“保证表面上有POINT”。尽管我确定PostGIS提供了一个非平凡的实现,但似乎可以轻松实现此功能以提供满足文档要求的结果,但几乎没有实际用途。

此介绍的PostGIS提供了一个很好的比较和对比ST_CentroidST_PointOnSurface并说“[ST_PointOnSurface]实质上大于重心操作更计算上昂贵”。

是否有关于如何ST_PointOnSurface计算的更详尽的解释?我一直在使用ST_Centroid,但是在我的数据中遇到了一些边缘情况,其中质心在几何图形之外。我相信这ST_PointOnSurface是正确的替代方法,但是函数名称和文档为不确定性留有余地。

此外,ST_PointOnSurface即使质心确实已经位于几何体之内,也会产生计算上的费用吗?


正是因为非凸多边形的形心并不总是包含在其中,所以它存在。如果这是名称中令人困惑的部分,则与高度和DEM无关。最好在代码中检查实现细节,但我相信您会在GIS.se上得到更好的答案。
lynxlynxlynx

关于GIS.se的要点。有没有办法将这个问题迁移到那里?我了解为什么两个功能都存在。我发现这个名称令人困惑,因为我正在使用的多边形几何图形的表面上有无数个点。但是,这些要点中只有一小部分符合我的目的。我想知道我对我的用法很有道理。

Answers:


24

根据一些实验,ST_PointOnSurface()如果几何是多边形,我认为工作原理大致是这样的:

  1. 追踪东西方向的射线,该射线位于多边形的南北范围之间。
  2. 查找与多边形相交的最长射线段。
  3. 返回沿所述线段一半的点。

这可能没有任何意义,因此这是一个多边形的草图,其中有一条射线将其分为北部和南部部分:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

因此,ST_PointOnSurface()ST_Centroid()通常是不同的点,即使在凸多边形。

我认为名称中“表面”的唯一原因是,如果几何图形具有3D线,则结果将仅仅是顶点之一。

我同意更多的解释(更好的命名)将是有用的,并希望GEOS程序员对此有更多的了解。


3
查看libgeos代码,我相信您是对的。找到水平平分线,然后使用最宽交点的中点。
mjobrien
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.