试图查看某个点是否在线串的 50 英尺范围内
trying to see if a point is within 50ft of a linestring
我有一个包含一堆 LineString 的数据库,我想看看某个点是否在该线的 50 英尺范围内。
因为它是一个 LineString,对于距离 LineString 甚至 1 英尺的点,期望 ST_CONTAINS
到 return true 似乎不太可能但是如果有一种方法可以添加可接受的误差范围酷一点。
这是我做的查询:
SELECT *
FROM railroads
WHERE ST_CONTAINS(SHAPE, ST_GeomFromText('POINT(-10874300.116373 3537642.0497826)', 3857));
不出所料,return没有结果。
有什么想法吗?我是 运行 MySQL 8.0.22.
你需要像这样的条件
ST_Distance(shape, geo_constant) < distance
.
另一种模式是
ST_Intersect(shape, ST_Buffer(geo_constant, distance))
。
缓冲区很昂贵,因此请确保缓冲单个常量,而不是 table 列。
但这里还有一个问题,您使用的是 3857 投影,所以距离是投影单位,而不是英尺或米。如果您关心精度,请将 Geometry 转换为 Geography 类型。
我有一个包含一堆 LineString 的数据库,我想看看某个点是否在该线的 50 英尺范围内。
因为它是一个 LineString,对于距离 LineString 甚至 1 英尺的点,期望 ST_CONTAINS
到 return true 似乎不太可能但是如果有一种方法可以添加可接受的误差范围酷一点。
这是我做的查询:
SELECT *
FROM railroads
WHERE ST_CONTAINS(SHAPE, ST_GeomFromText('POINT(-10874300.116373 3537642.0497826)', 3857));
不出所料,return没有结果。
有什么想法吗?我是 运行 MySQL 8.0.22.
你需要像这样的条件
ST_Distance(shape, geo_constant) < distance
.
另一种模式是
ST_Intersect(shape, ST_Buffer(geo_constant, distance))
。
缓冲区很昂贵,因此请确保缓冲单个常量,而不是 table 列。
但这里还有一个问题,您使用的是 3857 投影,所以距离是投影单位,而不是英尺或米。如果您关心精度,请将 Geometry 转换为 Geography 类型。