【问题标题】:trying to see if a point is within 50ft of a linestring试图查看一个点是否在线串的 50 英尺范围内
【发布时间】:2021-05-06 05:53:42
【问题描述】:

我有一个包含一堆 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。

【问题讨论】:

    标签: mysql gis spatial mysql-8.0 spatial-query


    【解决方案1】:

    你需要一个条件 ST_Distance(shape, geo_constant) < distance.

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

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

    【讨论】:

    • SELECT * FROM railroads WHERE ST_Distance(shape, ST_GeomFromText('POINT(-10874300.116373 3537642.0497826)', 3857)) < 10 工作顺利 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多