ST_ClosestPoint(线,点)不与线相交


11

在我的PostGIS数据库(Postgres 8.4.1上的PostGIS 1.5)中,我有两个表:道路(由线串组成)和崩溃(由点组成)。我一直在尝试将每次撞车事故与道路相关联,但是在执行以下操作时遇到了问题:

SELECT ST_ClosestPoint(road.the_geom, crash.the_geom),
    ST_Intersects(ST_ClosestPoint(road.the_geom, crash.the_geom), road.the_geom)
    ST_Distance(ST_ClosestPoint(road.the_geom, crash.the_geom), crash.the_geom) AS distance
    FROM
        --Table crashes is already in SRID 4326
        (SELECT the_geom FROM crashes WHERE gid = 360) as crash,
        (SELECT ST_SetSrid(the_geom, 4326) as the_geom from roads) as road
    ORDER BY distance;

该查询应该在每条道路上使用gid 360返回最接近崩溃的点,但是ST_Intersects函数对于第一个结果将返回false(所有道路上的真实最近点)。难道我做错了什么?还有另一种方法可以将撞车事故与最近的道路联系起来吗?

Answers:


9

这是因为ST_Intersects没有容忍度而引起的问题。即使双精度坐标包含很多小数位,它们也会形成一个网格,其中点的唯一位置在交叉中。线通常不与任何这些交叉相交,并且任何点都不可能准确地与线相交。解决方法是改用st_dwithin,公差小。

/尼克拉斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.