微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试查看点是否在线串的 50 英尺内

如何解决尝试查看点是否在线串的 50 英尺内

我有一个包含一堆 Linestring 的数据库,我想查看某个点是否在该线的 50 英尺之内。

因为它是一个 Linestring,所以希望 ST_CONTAINS 对于一个离 Linestring 甚至 1 英尺远的点返回 true 似乎不太可能但是如果有一种方法可以添加一个很酷的可接受的误差幅度。

这是我所做的查询

SELECT *
FROM railroads
WHERE ST_CONTAINS(SHAPE,ST_GeomFromText('POINT(-10874300.116373 3537642.0497826)',3857));

不出所料,它没有返回任何结果。

有什么想法吗?我正在运行 MysqL 8.0.22。

解决方法

您需要一个条件,例如 ST_Distance(shape,geo_constant) < distance

另一种模式是 ST_Intersect(shape,ST_Buffer(geo_constant,distance))。 缓冲区很昂贵,因此请确保缓冲单个常量,而不是表列。

但是这里还有一个问题,您使用的是投影 3857,因此距离以投影单位表示,而不是英尺或米。如果您关心精度,请将 Geometry 转换为 Geography 类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。