4

我在 SQLite 数据库中有高度的长/纬度坐标。

一些示例数据:

latitude   longitude  altitude
------------------------------
48.003333  11.0       652    
48.036667  11.000833  651
48.280833  11.000833  533

现在我想要一些 SQL 查询,它会给我最接近给定纬度/经度坐标的高度,例如

给定 lat/long 将是48.023445/11.000733所以最接近的是海拔 651和 lat/long 48.036667/11.000833。试图搜索很多论坛,但没有任何用处。到处都是关于一个变量或非常慢查询的示例。我非常需要这个查询,并看到了一些基于 UNIONS 的解决方案。我需要它快,因为我将在这张表上进行大约 150 万次查询。我正在使用事务和索引。

4

3 回答 3

4

为了您的目的(靠近搜索坐标的点),您最好使用平面上的距离公式来最小化。

(lat-latitude)*(lat-latitude) + (long-longitude)*(long-longitude)
于 2012-12-31T08:46:30.003 回答
3

使用经度和纬度坐标计算球体上两点之间的距离的公式远非简单,此处描述。如页面中所述,如果这些点相当接近,您可以使用简单的平面三角法,而只需使用点之间的欧几里德距离:

于 2012-12-31T08:38:20.823 回答
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 很单调,您可以在距离公式中跳过它。

于 2012-12-31T09:13:30.593 回答