Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据数据库数据查找具有lat和long的最近位置_Php - Fatal编程技术网

Php 根据数据库数据查找具有lat和long的最近位置

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和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.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