Heim  >  Artikel  >  Backend-Entwicklung  >  So fragen Sie Personen in der Nähe und deren Entfernung in PHP ab

So fragen Sie Personen in der Nähe und deren Entfernung in PHP ab

PHPz
PHPzOriginal
2016-05-16 08:59:497478Durchsuche

Das Beispiel in diesem Artikel beschreibt die Implementierungsmethode zur Abfrage von Personen in der Nähe und ihrer Entfernung in PHP. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

<?php
//获取该点周围的4个点
$distance = 1;//范围(单位千米)
$lat = 113.873643;
$lng = 22.573969;
define(&#39;EARTH_RADIUS&#39;, 6371);//地球半径,平均半径为6371km
$dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/EARTH_RADIUS;
$dlat = rad2deg($dlat);
$squares = array(&#39;left-top&#39;=>array(&#39;lat&#39;=>$lat + $dlat,&#39;lng&#39;=>$lng-$dlng),
        &#39;right-top&#39;=>array(&#39;lat&#39;=>$lat + $dlat, &#39;lng&#39;=>$lng + $dlng),
        &#39;left-bottom&#39;=>array(&#39;lat&#39;=>$lat - $dlat, &#39;lng&#39;=>$lng - $dlng),
        &#39;right-bottom&#39;=>array(&#39;lat&#39;=>$lat - $dlat, &#39;lng&#39;=>$lng + $dlng)
        );
print_r($squares[&#39;left-top&#39;][&#39;lat&#39;]);
//从数库查询匹配的记录
$info_sql = "select * from `A` where lat<>0 and lat>{$squares[&#39;right-bottom&#39;][&#39;lat&#39;]} and lat<{$squares[&#39;left-top&#39;][&#39;lat&#39;]} and lng>{$squares[&#39;left-top&#39;][&#39;lng&#39;]} and lng<{$squares[&#39;right-bottom&#39;][&#39;lng&#39;]} ";
//获取两点之间的距离
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
  $theta = $longitude1 - $longitude2;
  $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
  $miles = acos($miles);
  $miles = rad2deg($miles);
  $miles = $miles * 60 * 1.1515;
  $feet = $miles * 5280;
  $yards = $feet / 3;
  $kilometers = $miles * 1.609344;
  $meters = $kilometers * 1000;
  return compact(&#39;miles&#39;,&#39;feet&#39;,&#39;yards&#39;,&#39;kilometers&#39;,&#39;meters&#39;); 
}
$point1 = array(&#39;lat&#39; => 40.770623, &#39;long&#39; => -73.964367);
$point2 = array(&#39;lat&#39; => 40.758224, &#39;long&#39; => -73.917404);
$distance = getDistanceBetweenPointsNew($point1[&#39;lat&#39;], $point1[&#39;long&#39;], $point2[&#39;lat&#39;], $point2[&#39;long&#39;]);
foreach ($distance as $unit => $value) {
  echo $unit.&#39;: &#39;.number_format($value,4).&#39;<br />&#39;;
}
?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn