首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Postgis中实际位于多边形内部的多边形中获取最近点

如何从Postgis中实际位于多边形内部的多边形中获取最近点
EN

Stack Overflow用户
提问于 2019-06-21 21:45:34
回答 2查看 451关注 0票数 3

我正在尝试清理PostGIS数据库中的一些地理空间数据。由于地理编码过程中的一些不精确,一些必须落在某个区域的边界内的点被映射为非常接近,但在所述区域的分界多边形之外。

我的第一种方法是在PostGIS中使用ST_ClosestPoint函数,但没有成功。问题是,此函数将几何图形A上最近的点返回到几何图形B (https://postgis.net/docs/ST_ClosestPoint.html)。然而,ON并不意味着IN,因为如果我运行下面的查询,它会询问A(多边形)上与B(点)最近的点是否包含在A中:

代码语言:javascript
运行
复制
SELECT  ST_Contains(
            ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
                ST_ClosestPoint(
                    ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
                    ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
                    )
                ) As ptwkt;

它返回false,这意味着最近的点根本不包含在A中。我想要的是多边形(包含在该多边形中)中离另一个点最近的点。我想要这样,因为我的其余代码检查这些点是否在它们各自的区域内。如果可以用PostGIS查询来解决这个问题,那就太好了。

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-24 18:49:51

我找到的解决方案是通过使用具有负半径的ST_Buffer来“收缩”初始多边形,然后获得我的初始点与缩小的多边形之间的最近点。与缩小的多边形最近的点位于初始多边形内。

代码语言:javascript
运行
复制
SELECT  ST_Contains(
            ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
                ST_ClosestPoint(
                    ST_Buffer(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), -5),
                    ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
                    )
                ) As ptwkt;

现在它返回true。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56704687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档