如何从mysql中选择特定位置周围的经度,纬度?

时间:2016-04-27 06:51:12

标签: php mysql google-maps

我正试图获取特定位置周围的经度和纬度。实际上我在mysql表中有一些记录(longitude and latitude)。现在我想从桌子上取出那些应该有大约500米特定经度的经度和纬度。请查看代码,希望您能理解我的问题。

Mysql位置表

-------------------------------------
id  |     longitude    |    latitude
-------------------------------------
1  |   25.058036      |    55.133467
-------------------------------------
2  |   25.056986      |    55.135755
-------------------------------------
3  |   25.059163       |   55.135616
-------------------------------------
4  |   25.056860       |  55.132515
-------------------------------------
5  |   25.055683       |   55.134792

我想得到那些经度,纬度应该在500米左右的特定距离(25.057550, 55.134729)。

$user_long= $_REQUEST['user_long']; // 25.057550
$user_lat= $_REQUEST['user_lat']; // 55.134729

Select * from location where .... (fetch record around 500 meters)

我搜索过它并找到了一些很好的haversine formula answerGoogle Map With Php/Mysql,但我没有得到如何开发这种功能。我知道这个问题对某些人来说可能是愚蠢的,因为我没有添加我的代码,但相信我,我不知道我该怎么做以及我应该从哪里开始功能。如果有人就此功能指导我,我将不胜感激。

谢谢

4 个答案:

答案 0 :(得分:1)

使用此查询

$query = "SELECT *,ROUND(1.609344*(((acos(sin((" . $latitude .    "*pi()/180)) * 
        sin((`Latitude`*pi()/180))+cos((" . $latitude . "*pi()/180)) * 
        cos((`Latitude`*pi()/180)) * cos(((" . $longitude . "- `Longitude`)* 
        pi()/180))))*180/pi())*60*1.1515
    ),2) as distance 
    FROM `table`  HAVING distance<=" . MAX_DISTANCE . " ";

其中$ latitude是用户纬度,$经度是用户经度,MAX_DISTANCE是你希望以km为单位得到的最大距离。

答案 1 :(得分:1)

SELECT *,3956*2*ASIN(SQRT(POWER(SIN((19.286558 - latitude)*pi()/180/2),2)+COS(19.286558 * pi()/180)
*COS(latitude * pi()/180)*POWER(SIN((-99.612494 -longitude)* pi()/180/2),2)))
as distance FROM table  having distance < 10 ORDER BY distance;

这将为您提供10公里范围内的记录。 在having子句中修改500米的查询。

答案 2 :(得分:0)

试试这个

SELECT *,
(6371*acos(cos(radians(" . $user_lat ."))*cos(radians(`latitude`))*cos(radians(`longitude`)-radians(" . $user_long . "))+sin(radians(" . $user_lat . "))*sin(radians(`latitude`)))) AS distance
FROM `location` WHERE `distance` < '0.5' ORDER BY `distance` ASC

其中0.5以km为单位

答案 3 :(得分:0)

如果自定义实现的hasrsine公式的性能对你来说太慢了,而你不介意使用MySQL 5.7.6+,那么你可以利用内置的ST_Distance_Sphere函数,它可以是比定制实施的计算半胱氨酸的程序快20倍。您可以在此blogpost中查看基准和例程。此外,如果您不介意将位置存储为Point几何对象,则还可以利用空间索引。您也可以先根据边界框({​​{3}}末尾的示例)预先过滤位置,这也可以加快查询速度。