2

我最近表示正在研究 gps 地图。我有一个包含纬度和经度列表的数据库。当用户访问我的网络应用程序时,我想显示距离用户点 1 公里或指定半径范围内的地点。我尝试使用 mysql 查询

SELECT * FROM Locations
WHERE(MINLATITUDE 和 MAXLATITUDE 之间的纬度)
和(MINLONGITUDE 和 MAXLONGITUDE 之间的经度)

但它显示最小和最大之间的纬度和经度,有人可以告诉我如何显示距离用户点仅在 1 公里半径内的纬度和经度。
谢谢。

4

1 回答 1

2

对于 1 公里左右的距离,Haversine 太过分了。使用更简单的 equirectangular 投影来熟悉 x 和 y。请记住,lat 和 lon 下面的公式是以弧度表示的。距离 d 以 km 为单位,因为地球的半径 (R) 以 km 为单位。纬度/经度以弧度表示(是的,我再说一遍)。与 Haversine 相比,这消除了几个触发函数,这将使您的查询更快。

var R = 6371; // radius of the earth in km
var x = (lon2-lon1) * Math.cos((lat1+lat2)/2);
var y = (lat2-lat1);
var d = Math.sqrt(x*x + y*y) * R;  // distance in km

现在,这是一个网络应用程序,所以我将假设圣诞老人(北极)和南极洲站的人们不会使用您的应用程序。有了这个假设,您可以在数据库中按经度组织纬度/经度点。因此,如果某人的 lon 为 -76.1,您就知道数据库中小于 -78 度的经度超过 1 公里。您还知道大于 -74 度的经度也很远。这将减少您需要在数据库中检查的点数。

于 2013-01-15T10:41:41.103 回答