Spatialite SQL 查询以找到给定 lat/lon 最近的节点
Spatialite SQL query to find the nearest node for the given lat/lon
我想找到距离给定坐标最近的节点。我检查了这个 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错误,但不管点是什么,它总是returns数据库中的第一条记录和到它的距离。
我也试过这个查询
SELECT PID,
DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571))
FROM test1f ORDER BY DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571))
我得到了50000个结果,第一个就是我想要的。我怎么只能得到第一个?
您的第一个查询看起来是正确的。 (它与 first example here 基本相同。)
无论如何,要 return 只有第一个结果行,将 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;
我想找到距离给定坐标最近的节点。我检查了这个 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错误,但不管点是什么,它总是returns数据库中的第一条记录和到它的距离。
我也试过这个查询
SELECT PID,
DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571))
FROM test1f ORDER BY DISTANCE(Startpoint(geometry), MakePoint(-79.917589, 43.266571))
我得到了50000个结果,第一个就是我想要的。我怎么只能得到第一个?
您的第一个查询看起来是正确的。 (它与 first example here 基本相同。)
无论如何,要 return 只有第一个结果行,将 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;