【问题标题】:Spatialite SQL query to find the nearest node for the given lat/lonSpatialite SQL 查询以查找给定纬度/经度的最近节点
【发布时间】:2017-06-10 20:34:55
【问题描述】:

我想找到离给定坐标最近的节点。我检查了这个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 

没有语法错误,但不管是什么点,它总是返回数据库中的第一条记录以及到它的距离。

我也试过这个查询

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

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

【问题讨论】:

  • 我觉得你需要看看this希望有所帮助
  • 我觉得你需要看看this希望有所帮助
  • @MarioNassef 这与 SpatiaLite 无关。
  • 您是否尝试过使用LIMIT
  • 请发minimal reproducible example,例如通过从适当定制的玩具数据库的 SQLite 命令行工具发布 .dump 的结果。

标签: sql postgresql sqlite spatialite


【解决方案1】:

您的第一个查询看起来是正确的。 (与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;

【讨论】:

  • 我的版本是3.01。不支持 knn .. 还有其他方法吗?我不知道为什么,第一个查询不起作用。
  • 然后使用 LIMIT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多