ST_ClosestPoint (đường, điểm) không giao nhau với đường


11

Trong cơ sở dữ liệu PostGIS của tôi (PostGIS 1.5 trên Postgres 8.4.1), tôi có hai bảng: đường (bao gồm các đường nối) và các sự cố (bao gồm các điểm). Tôi đã cố gắng tương quan mỗi vụ tai nạn với một con đường, nhưng tôi gặp vấn đề khi làm việc sau đây:

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;

Hàng đợi này sẽ trả về điểm gần nhất với sự cố với gid 360 trên mỗi đường, nhưng hàm ST_Intersects trả về sai cho kết quả đầu tiên (điểm gần nhất thực sự trên tất cả các đường). Tôi có làm điều gì sai? Có cách nào khác để liên kết vụ tai nạn với con đường gần nhất không?

Câu trả lời:


9

Đây là một vấn đề đến từ ST_Intersects không có dung sai. Ngay cả khi tọa độ chính xác kép giữ rất nhiều số thập phân, chúng tạo thành một lưới trong đó các vị trí duy nhất cho các điểm nằm trong giao điểm. Thường thì đường thẳng không giao nhau với bất kỳ đường chéo nào và không có điểm nào có thể cắt đường chính xác. Cách giải quyết là sử dụng st_dwithin thay vì dung sai nhỏ.

/ Nicklas

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.