Spatialite SQL查询以查找给定lat / lon的最近节点

时间:2017-06-10 20:34:56

标签: sql postgresql sqlite spatialite

我想找到给定坐标的最近节点。我查了https://gis.stackexchange.com/questions/186783/how-to-get-the-long-lat-information-from-a-nodeid-and-vice-versa 但是,他的回答不起作用。

我的查询:

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个结果,第一个是我想要的。我怎么才能得到第一个?

1 个答案:

答案 0 :(得分: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;