ST_ClosestPoint (पंक्ति, बिंदु) पंक्ति को काटती नहीं है


11

मेरे PostGIS डेटाबेस (PostGIS 1.5 पर Postgres 8.4.1) में, मेरे पास दो टेबल हैं: सड़कें (लाइनस्टर से बनी) और क्रैश (बिंदुओं से मिलकर)। मैं एक सड़क पर प्रत्येक दुर्घटना को सहसंबद्ध करने की कोशिश कर रहा हूं, लेकिन मुझे काम करने में निम्नलिखित समस्याएं हो रही हैं:

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 फ़ंक्शन पहले परिणाम (सभी सड़कों पर सही निकटतम बिंदु) के लिए गलत देता है। क्या मुझसे कुछ गलत हो रही है? क्या दुर्घटना को निकटतम सड़क से जोड़ने का एक और तरीका है?

जवाबों:


9

यह एक ऐसी समस्या है जो ST_Intersects की किसी भी तरह की सहनशीलता नहीं है। यहां तक ​​कि अगर डबल सटीक निर्देशांक बहुत अधिक दशमलव रखता है, तो वे एक ग्रिड बनाते हैं जहां बिंदुओं के लिए एकमात्र स्थान क्रॉसिंग में है। अक्सर लाइन उन क्रॉस में से किसी के साथ भी इंटरसेक्ट नहीं होती है और कोई भी तरीका बिल्कुल भी लाइन को इंटरसेक्ट नहीं करेगा। वर्कअराउंड एक छोटी सहिष्णुता के बजाय st_dwithin का उपयोग करना है।

/ Nicklas

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.