我在SQLite数据库中有高度的长/纬坐标。
一些示例数据:
latitude longitude altitude
------------------------------
48.003333 11.0 652
48.036667 11.000833 651
48.280833 11.000833 533
现在我想要一些SQL查询,它会给出最接近给定纬度/经度坐标的高度,例如
鉴于纬度/经度将 48.023445 / 11.000733 ,因此最接近海拔651 ,纬度/经度 48.036667 / 11.000833 。试图搜索很多论坛,但没有任何用处。无处不在是一个变量或非常慢的查询的例子。我非常快速地需要这个查询,并且看到了一些基于UNIONS的解决方案。我需要它很快,因为我将在这张桌子上进行大约1,5百万的查询。我正在使用交易和索引。
答案 0 :(得分:4)
出于您的目的(靠近搜索坐标的点),您最好尽量减少使用飞机上距离的公式。
(lat-latitude)*(lat-latitude) + (long-longitude)*(long-longitude)
答案 1 :(得分:3)
使用经度和纬度坐标计算球体上两点之间距离的公式远非简单,is described here。如页面中所指定的,如果点数相当接近,您可以使用简单的平面三角法,并使用点之间的欧几里德距离:
答案 2 :(得分:1)
我会使用以下类似的查询:
select * from pos order by ((lat-48.00333)*(lat-48.00333)+(long-11.0)*(long-11.0)+(alt-652)*(alt-652));
SQLite不支持SQRT,但由于SQRT是单调的,您可以在距离公式中跳过它。