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
进一步阅读:
有一个几何列 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
进一步阅读: