मैं लंबे समय से PostGIS का उपयोग कर रहा हूं, लेकिन कभी भी LINESTRING
ज्यामिति का उपयोग नहीं करना पड़ा ...! :)
यहां मैं क्या करना चाहूंगा: मेरे पास एक लाइनस्ट्रेस की तालिका है (किसी दिए गए शहर की सड़कों का प्रतिनिधित्व करना, SRID 3395) और मैं किसी दिए गए बिंदु (जीपीएस स्थिति, एसआरआईडी 4326) के लिए निकटतम लाइनस्ट्रेस ढूंढना चाहूंगा।
मैंने जो हल खोजा है वह expand()
विधि का उपयोग करके मेरे बिंदु के भीतर के सभी अलंकारों का चयन करना है और विधि का उपयोग करते हुए प्रत्येक लिनेस्ट्रिंग और मेरे बिंदु के बीच की दूरी को निर्धारित करना है ST_Distance()
।
यहाँ एसक्यूएल है:
SELECT myLineId, myLineName, ST_Distance(ST_Transform(GeomFromText('POINT(LON LAT)',4326),3395),myLineGeom) AS myLineDistance
FROM myLines
WHERE myLineGeom && expand(ST_Transform(GeomFromText('POINT(LON LAT)',4326),3395), 100)
ORDER BY myLineDistance;
परिणाम मुझे ठीक लग रहे हैं, लेकिन मुझे लगता है कि मेरे कार्यान्वयन में कुछ गलत है।
1) क्या आप लोगों को लगता है कि expand()
सभी संबंधित linestrings मिल सकते हैं?
2) क्या आप लोग सोचते हैं कि ST_Distance()
उपयोग करने की सही विधि है? मुझे लगता है कि मैं यह गलत कर रहा हूं क्योंकि मैं जिस दूरी को प्राप्त करना चाहता हूं वह बिंदु और मेरी रेखा के बीच की सबसे छोटी दूरी है न कि बिंदु के बीच की दूरी और रेखा के एक बिंदु के बीच की दूरी।
उदाहरण: