MySQL 计算给定2个点,纬度和经度的距离
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8599200/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Calculate distance given 2 points, latitude and longitude
提问by Grigor
Possible Duplicate:
MySQL latitude and Longitude table setup
可能的重复:
MySQL 纬度和经度表设置
I know this question has probably been asked many times, I've researched a lot and I need help with specific thing.
我知道这个问题可能已经被问过很多次了,我研究了很多,我需要具体的帮助。
Lets say I have a form and user enters longitude and latitude, and I have a database which has table containing longitudes and latitudes, how would I search for a point or points in that table that are within 15 miles of radius?
假设我有一个表单,用户输入经度和纬度,并且我有一个包含经度和纬度的表的数据库,我将如何在该表中搜索半径 15 英里内的一个或多个点?
回答by claire
You can use the formula that calculates distances between two points. For example:
您可以使用计算两点之间距离的公式。例如:
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));
}
You can also do something like:
您还可以执行以下操作:
$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.";
回答by Oliver
If you have the Lat/Lon of two points, you can get delta Lat and delta Lon and convert this to a distance along latitude and a distance along longitude, and use Pythagorean theorem.
如果你有两个点的纬度/经度,你可以得到 delta Lat 和 delta Lon 并将其转换为沿纬度的距离和沿经度的距离,并使用勾股定理。
Have you looked at pages like http://www.movable-type.co.uk/scripts/latlong.html? This has several ways of computing distance. So as you go through your list of points, you use the formula to calculate the distance from each point to the point of interest and keep only those that satisfy R<15 miles.
你看过像http://www.movable-type.co.uk/scripts/latlong.html这样的页面吗?这有几种计算距离的方法。因此,当您浏览点列表时,您可以使用公式计算从每个点到兴趣点的距离,并仅保留满足 R<15 英里的那些点。