私はもう長い間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()
使用するのに適切な方法だと思いますか?私が取得したい距離は、ポイントとライン間の最短距離であり、ポイントとラインストリングのポイントの1つとの間の距離ではないため、間違っていると思います。
図: