ฉันใช้ PostGIS มานานแล้ว แต่ไม่เคยใช้LINESTRING
เรขาคณิต ... ! :)
นี่คือสิ่งที่ฉันต้องการจะทำ: ฉันมีตารางของ linestrings (หมายถึงถนนของเมืองที่ระบุ SRID 3395) และฉันต้องการค้นหา linestrings ที่ใกล้ที่สุดไปยังจุดที่กำหนด (ตำแหน่ง GPS, SRID 4326)
วิธีการแก้ปัญหาที่ฉันพบคือการเลือก linestrings ทั้งหมดภายในจุดของฉันโดยใช้expand()
วิธีการและกำหนดระยะห่างระหว่างแต่ละ linestring และจุดของฉันโดยใช้ST_Distance()
วิธีการ
นี่คือ SQL:
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()
จะได้รับความเกี่ยวข้องทั้งหมดหรือไม่?
2) คุณคิดว่าST_Distance()
วิธีการใช้นั้นถูกต้องหรือไม่? ฉันเดาว่าฉันทำผิดเพราะระยะทางที่ฉันต้องการคือระยะทางที่เล็กที่สุดระหว่างจุดกับเส้นของฉันและไม่ใช่ระยะห่างระหว่างจุดนั้นกับจุดใดจุดหนึ่งของจุดหลอมเหลว
ภาพประกอบ: