问题描述
我有一个包含一堆 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 类型。