Php 根据数据库数据查找具有lat和long的最近位置
我想根据数据库数据中请求的lat和lon查找最近的位置。 我对我的代码结果感到困惑,它的距离是对的还是错的Php 根据数据库数据查找具有lat和long的最近位置,php,Php,我想根据数据库数据中请求的lat和lon查找最近的位置。 我对我的代码结果感到困惑,它的距离是对的还是错的 $lat= mysql_real_escape_string($_REQUEST['lat']); $lng= mysql_real_escape_string($_REQUEST['lon']); $multiplier = 112.12; $distance = 20; $sql=" SELECT beach.id,county.title,municipality.tit
$lat= mysql_real_escape_string($_REQUEST['lat']);
$lng= mysql_real_escape_string($_REQUEST['lon']);
$multiplier = 112.12;
$distance = 20;
$sql=" SELECT beach.id,county.title,municipality.title,beach.beach_name,beach.description,beach.latitude,beach.longitude,beach.rainfall,beach.temperature,beach.status_id,beach.status_details,beach.notice, (SQRT(POW((beach.latitude - $lat), 2) + POW((beach.longitude - $lng), 2)) * $multiplier) AS distance
from beach as beach,county as county,municipality as municipality where beach.county_id=county.id and beach.municipality_id=municipality.id and POW((beach.latitude - $lat), 2) + POW((beach.longitude - $lng), 2) < POW(($distance / $multiplier), 2) ORDER BY distance ASC LIMIT 0 , 3";
$lat=mysql\u real\u escape\u字符串($\u REQUEST['lat']);
$lng=mysql_real_escape_字符串($_REQUEST['lon']);
美元乘数=112.12;
$distance=20;
$sql=“选择beach.id,county.title,Communication.title,beach.beach\u名称,beach.description,beach.lation,beach.经度,beach.ratitude,beach.status\u id,beach.notice,(SQRT(POW((beach.lation-$lat),2)+POW((beach.lation-$lng),2))*$multiplier)作为距离
从海滩为海滩,县为县,市为市,其中海滩。县id=县id和海滩。市id=市id和POW((海滩。纬度-$lat),2)+POW((海滩。经度-$lng),2)
两个任意点之间(大圆)距离的正确函数是一个比您使用的公式复杂得多的公式
假设“最近的海滩”是指
A) 不在北极或南极附近
B) 不远
C) 如果你有两个非常相似的距离,你不在乎你是否得到了“错误”的距离
然后你可以使用一个类似于你刚才使用的方程,但是需要一些修正
具体来说,您的公式需要两个因素。一个因素(您的乘数
将度转换为公里(或英里)。另一个因素说明了两个经度点之间的距离是纬度的函数。在下面的代码中,我将这两个因素称为$dmult
(用于距离)和$lmult
(用于纬度校正)
简单的例子:
<?php
$lat = 45;
$lon = 72;
$lat2 = 46;
$lon2 = 73;
$lmult = cos($lat * pi() / 180.0);
$dmult = 40000 / 360; // circumference of earth in km divided by 360 degrees
$dist = $dmult * sqrt(pow($lmult *($lon-$lon2),2) + pow($lat-$lat2,2));
echo "The distance between these points is approximately".$dist."\n";
?>
将结果(136公里)与“精确”在线计算器进行比较:
这给出了135.9
km的值-足够接近海滩作业
注意——随着距离变大,上述计算的结果将变得更加不准确,因为它没有充分考虑地球的曲率
如果您需要帮助将其放入查询中,请告诉我-这应该非常简单
编辑看起来您并没有将变量的值连接到查询字符串中-换句话说,您应该在“
112.12
”中有“$multiplier
”之类的内容。您希望在执行查询字符串之前检查其外观。将其分配给变量(当您这样做时),然后打印出来。如何定义变量$multiplier
?$multiplier=112.12;$distance=20;您想要以英里或公里为单位的距离?
$dmult = 24900 / 360; // circumference in miles divided by 360 degrees