显示距用户纬度和经度半径1km的最近地方

时间:2013-01-15 01:23:58

标签: geolocation latitude-longitude

我最近说过在gps地图上工作。我有一个包含纬度和经度列表的数据库。当用户访问我的网络应用程序时,我想显示距离用户点1km或指定半径的位置。 我尝试使用mysql查询

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

但是它会显示最小值和最大值之间的纬度和经度,有人可以告诉我如何显示距离用户点仅1km半径的纬度和经度。
感谢。

1 个答案:

答案 0 :(得分:1)

对于1公里左右的距离,Haversine有点矫枉过正。使用更简单的equirectangular投影来获得熟悉的x和y。请记住,lat和lon下面的公式是IN RADIANS。距离d以km为单位,因为地球半径(R)以km为单位。并且lat / lon是弧度的(是的,我再说一遍)。与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

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