我已经使用PostGIS很长时间了,但是从未使用过LINESTRING
几何...!:)
这是我想做的:我有一个线串表(代表给定城市的街道,SRID 3395),我想找到最接近给定点的线串(GPS位置,SRID 4326)。
我发现的解决方案是使用expand()
方法选择我的点内的所有线串,并使用方法确定每个线串与我的点之间的距离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()
正确的使用方法是吗?我想我做错了,因为我想得到的距离是点与线之间的最小距离,而不是点与线串中的点之一之间的距离。
插图: