有没有办法使用sqlgeometry / sqlGeography找到“视觉”中心,或者找到可以适应形状和使用该中心的最大圈子?我试过various methods使用STPointOnSurface(),但似乎STPointOnSurface()总是选择一个点在边缘像这样DCREHA(底部深绿色区域的标签总是在边缘:
解决方法
>使用STCentroid找到质心
>如果这是在多边形内(STWithin),则不需要进一步处理;除此以外:
>确定多边形边界框的质心(例如,使用STEnvelope获取多边形的包络并将其作为参数传递给STCentroid)
>如果这个质心在多边形内(STWithin),它可能足够好(需要测试);除此以外:
>扩展连接多边形的质心和信封的质心的线,使其在每个方向上延伸到多边形的信封之外(可能更容易在C#代码中,或者参见here的PostGIS解决方案)
>确定延伸线和多边形之间的交点(STIntersection)
>从步骤1中查找到多边形的质心点的最近交叉点(参见here).这一点是linked answer中详细描述的“第一切点”的近似值.
>在步骤7中找到上面交叉点的最近交叉点.这一点是linked answer中详细说明的“第二个切割点”的近似值.
>连接两个交叉点的线的中点将在多边形内,并且应该是多边形“视觉中心”的合理近似.
例如,给定上述DCREHA示例的多边形,以下GIF会动画化上述步骤(由眼睛判断 – 实际结果会有所不同):
原文地址:https://www.jb51.cc/mssql/80898.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。