MULTILINESTRING 附近的 rgeo 点

rgeo point near MULTILINESTRING

有一个几何列 wkb_geometry,srid 4326 是 MULTILINESTRING 我想确定这些记录中的哪些在几何对象的预定距离(比如 5000 米)内 POINT

而以下方法可以确定多边形是否包含点

def self.containing_latlon(lat,lon, polygon)
  ewkb = EWKB.generate(RGeo::Geographic.simple_mercator_factory.point(lon, lat).projection)
  where("ST_Intersects(polygon, ST_GeomFromEWKB(E'\\x#{ewkb}'))")
end

ST_Intersects 显然不是一个选项,因为它适用于“space 然后它们相交的任何部分”。
我没有找到文档来确定一条线是否在一个点的 X 距离内。但可能问题是相反的?如果问题不是由 MULTILINESTRING 和缓冲区定义的多边形内的点。

需要如何修改上述方法才能执行此操作?

改用ST_DWithin

对于使用米的距离,将参数转换为 geography,例如5公里:

SELECT * FROM t
WHERE ST_DWithin('POINT(7.00 51.82)'::geography,geom::geography,5000);

如果您对 SRS 的测量单位满意,请坚持使用“几何”

SELECT * FROM t
WHERE ST_DWithin('POINT(7.00 51.82)'::geometry,geom,42);

WKT 文字后的 :: 是用于转换数据类型的 postgres 语法。但是按照 postgres 的习惯,有很多方法可以做同样的事情。以下示例使用不同的技术将 WKT 文字转换为 geometry

SELECT 
  CAST('SRID=4326;POINT(1 2)' AS geometry),
  'SRID=4326;POINT(1 2)'::geometry,
  ST_GeomFromText('SRID=4326;POINT(1 2)'),
  ST_SetSRID(ST_MakePoint(1,2),4326);

-[ RECORD 1 ]---+---------------------------------------------------
geometry        | 0101000020E6100000000000000000F03F0000000000000040
geometry        | 0101000020E6100000000000000000F03F0000000000000040
st_geomfromtext | 0101000020E6100000000000000000F03F0000000000000040
st_setsrid      | 0101000020E6100000000000000000F03F0000000000000040

进一步阅读: