PostGIS'i uzun zamandır kullanıyorum ancak LINESTRING
geometriyi kullanmak zorunda kaldım ...! :)
İşte yapmak istediğim şey: Bir bağlantı hattım var (belirli bir şehrin sokaklarını temsil eden, SRID 3395) ve belirli bir noktaya en yakın bağlantı hattını bulmak istiyorum (GPS pozisyonu, SRID 4326).
Bulduğum çözüm, expand()
yöntemi kullanarak benim noktamdaki tüm çizgileri seçmek ve yöntemi kullanarak her çizgiyle noktam arasındaki mesafeyi belirlemek ST_Distance()
.
İşte 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;
Elde ettiğim sonuçlar iyi görünüyor ancak uygulamamda bir sorun olduğunu hissediyorum.
1) Sizce expand()
tüm ilgili çizgileri bulabilir misiniz?
2) Kullanmanın ST_Distance()
doğru yöntem olduğunu düşünüyor musunuz ? Sanırım yanlış yapıyorum çünkü almak istediğim mesafe nokta ile çizginin arasındaki en küçük mesafe değil, nokta ile çizginin noktalarından biri arasındaki mesafe değil.
İllüstrasyon: