这里是 PHP 的计算公式之间的距离 两点 :
function getDistanceBetweenPointsNew($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)); }
然后添加查询以获取所有距离小于或等于上述记录的记录:
$qry = "SELECt * FROM (SELECt *, (((acos(sin((".$latitude."*pi()/180)) * sin((`geo_latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`geo_latitude`*pi()/180)) * cos(((".$longitude."- `geo_longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM `ci_geo`)myTable WHERe distance <= ".$distance." LIMIT 15";
您可以在这里查看类似的计算。
你可以在这里阅读更多
更新:
您必须记住,要计算 经度2 和 经度2, 您需要知道:
每个 纬度 相距 约 69英里(111公里)。
范围从赤道的68.703英里(110.567公里)变化到两极的69.407(111.699公里)(由于地球略呈椭圆形)。这很方便,因为每分钟(1/60度)约为一英里。
的程度 经度 是在最宽的在赤道 69.172英里(111.321)
和在两极逐渐缩小到零。在南北40度之间,经度之间的距离为53英里(85公里)。
因此,
$longitude2 $latitude2根据50公里进行计算,则 大约为:
$longitude2 = $longitude1 + 0.449; //0.449 = 50km/111.321km$latitude2 = $latitude1 + 0.450; // 0.450 = 50km/111km
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)