2017-06-10 90 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错误,但无论点是什么,它总是返回在数据库中的第一条记录,并给它的距离。

我也试过这个查询

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

我得到了50000分的结果,第一个是我想要的。我怎么才能得到第一个?

+0

我认为你需要采取[这]一看(https://stackoverflow.com/questions/2234204/latitude-longitude-find-nearest-latitude-longitude-complex-sql-or-complex-calc)希望帮助 –

+0

我认为你需要看看[this](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。 –