ホームページ  >  記事  >  バックエンド開発  >  PHP は、指定された経度および緯度の点に基づいて近くの位置クエリを実行します

PHP は、指定された経度および緯度の点に基づいて近くの位置クエリを実行します

WBOY
WBOYオリジナル
2016-07-25 08:45:481270ブラウズ
実装の原則は、まずその点の周りの長方形の 4 つの点を計算し、次に経度と緯度を使用してデータベース内のレコードを直接照合することです。
  1. //周囲の座標を取得
  2. public function returnSquarePoint($lng, $lat,$ distance = 0.5){
  3. $earthRadius = 6378138;
  4. $dlng = 2 * asin(sin($ distance / (2 * $earthRadius )) / cos(deg2rad($lat)));
  5. $dlng = rad2deg($dlng);
  6. $dlat = $ distance/$earthRadius;
  7. $dlat = rad2deg($dlat);
  8. return array(
  9. 'left -top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
  10. 'right-top'=>array('lat'=> $lat + $dlat, 'lng'=>$lng + $dlng),
  11. 'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
  12. 'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
  13. );
  14. }
  15. // 2 つを計算します座標の直線距離
  16. public function getDistance($lat1, $lng1, $lat2, $lng2){
  17. $earthRadius = 6378138; // 地球のおおよその半径 (メートル)
  18. // ラジアンに変換
  19. $lat1 = ( $lat1 * pi()) / 180;
  20. $lng1 = ($lng1 * pi()) / 180;
  21. $lat2 = ($lat2 * pi()) / 180;
  22. $lng2 = ($lng2 * pi( )) / 180;
  23. // 定規とコンパスで計算するには半正弦の公式を使用します
  24. $calcLongitude = $lng2 - $lng1;
  25. $calcLatitude = $lat2 - $lat1;
  26. $stepOne = pow(sin($calcLatitude / 2), 2 ) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2)
  27. $stepTwo = 2 * asin(min(1, sqrt($stepOne))); ;
  28. $calculatedDistance = $earthRadius * $stepTwo;
  29. returnround($calculatedDistance);
  30. }
コードをコピー

PHP


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。