【发布时间】:2011-12-22 03:42:20
【问题描述】:
我知道这个问题可能已经被问过很多次了,我研究了很多,我需要一些具体的帮助。
假设我有一个表单并且用户输入经度和纬度,并且我有一个包含经度和纬度的表的数据库,我将如何搜索该表中半径 15 英里内的一个或多个点?
【问题讨论】:
-
查看右侧“相关”部分的前 10 个链接 ->
标签: mysql maps latitude-longitude
我知道这个问题可能已经被问过很多次了,我研究了很多,我需要一些具体的帮助。
假设我有一个表单并且用户输入经度和纬度,并且我有一个包含经度和纬度的表的数据库,我将如何搜索该表中半径 15 英里内的一个或多个点?
【问题讨论】:
标签: mysql maps latitude-longitude
您可以使用计算两点之间距离的公式。 例如:
function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') {
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) +
(cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) *
cos(deg2rad($theta)));
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
switch($unit) {
case 'Mi':
break;
case 'Km' :
$distance = $distance * 1.609344;
}
return (round($distance,2));
}
你也可以这样做:
$query = "SELECT *,(((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
) as distance
FROM `MyTable`
HAVING distance >= ".$distance.";
【讨论】:
如果你有两点的纬度/经度,你可以得到 delta Lat 和 delta Lon 并将其转换为沿纬度的距离和沿经度的距离,并使用勾股定理。
你看过像http://www.movable-type.co.uk/scripts/latlong.html这样的页面吗?这有几种计算距离的方法。因此,当您浏览点列表时,您可以使用公式计算每个点到兴趣点的距离,并仅保留满足 R
【讨论】: