2017-06-10 27 views
1

私は与えられた座標に最も近いノードを見つけたいと思っています。私はこれをチェックしたhttps://gis.stackexchange.com/questions/186783/how-to-get-the-long-lat-information-from-a-nodeid-and-vice-versa しかし、彼の答えは機能しません。与えられた緯度/経度の最も近いノードを見つけるためのSpatialite SQLクエリ

マイクエリ:

SELECT PID, 
    min (DISTANCE(Startpoint(geometry), MakePoint(-79.417589, 43.266571))) 
    FROM test1f 

そこにはSYNAXエラーはありませんが、どんなにポイントが何であるか、それは常にデータベースの最初のレコードと、それまでの距離を返します。

私もこのクエリは、私は50000の結果を得た

SELECT PID, 
     DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571)) 
    FROM test1f ORDER BY DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571)) 

を試してみましたが、最初のものは、私が欲しいものです。どのようにして最初のものだけを得ることができますか?

+0

私はあなたが[この]で見てくださいする必要があると思う(https://stackoverflow.com/questions/2234204/latitude-longitude-find-nearest-latitude-longitude-complex-sql-or-complex-calc)ヘルプ –

+0

私はあなたが[これ]を見てみる必要があると思うと思う(https://stackoverflow.com/質問/ 2234204/latitude-longitude-find-nearest-latitude-longitude-complex-sql-or-complex-calc)ヘルプ –

+0

@MarioNassefこれはSpatiaLiteとは関係ありません。 –

答えて

0

最初のクエリが正しいように見えます。 (基本的にfirst example hereと同じです)

とにかく、最初の結果行だけを返すには、LIMIT 1をクエリに追加します。 SpatiaLite 4.4.0以降

、あなたはより効率的に検索を実行するためにKNN virtual tableを使用することができます。

SELECT test1f.PID, 
     knn.distance 
FROM test1f 
JOIN knn ON test1f.PID = knn.fid -- assuming PID is the INTEGER PRIMARY KEY 
WHERE f_table_name = 'test1f' 
    AND ref_geometry = MakePoint(-79.417589, 43.266571) 
    AND max_items = 1; 
+0

私のバージョンは3.01です。 knnはサポートされていません。私はなぜ最初のクエリが機能しないのかわかりません。 – chen

+0

次に、LIMITを使用します。 –

関連する問題