ST_ClosestPoint (çizgi, nokta) çizgiyle kesişmiyor


11

PostGIS veritabanımda (PostgIS 8.4.1 üzerinde PostGIS 1.5) iki tablo var: yollar (linestringlerden oluşuyor) ve çökmeler (noktalardan oluşuyor). Her kazayı bir yolla ilişkilendirmeye çalışıyorum, ancak aşağıdakileri işe almakta sorun yaşıyorum:

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;

Bu queury her yolda gid 360 ile kazaya en yakın noktayı döndürmelidir, ancak ST_Intersects işlevi ilk sonuç için false değerini döndürür (tüm yollar üzerindeki en yakın nokta). Yanlış bir şey mi yapıyorum? Kazayı en yakın yola bağlamanın başka bir yolu var mı?

Yanıtlar:


9

Bu, ST_Intersects'in hoşgörü olmadığından kaynaklanan bir sorundur. Çift kesinlikli koordinatlar çok fazla ondalık hane tutsalar bile, noktalar için tek yerlerin kesiştiği yerde bir ızgara oluştururlar. Çizgi genellikle bu haçların hiçbiriyle kesişmez ve herhangi bir noktanın çizgiyle tam olarak kesişmesinin bir yolu yoktur. Çözüm, küçük bir toleransla st_dwithin kullanmaktır.

/ Nicklas

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.