首頁  >  文章  >  後端開發  >  PHP如何驗證座標是否在某一座標區域內

PHP如何驗證座標是否在某一座標區域內

*文
*文原創
2018-01-02 13:58:002736瀏覽

PHP如何驗證座標是否在某個座標區域內?本文主要為大家詳細介紹了驗證座標在某片座標區域內php程式碼,具有一定的參考價值,有興趣的小夥伴們可以參考一下。希望對大家有幫助。

之前碰到的這樣一個需求,要將公司的服務在地圖中顯示出來,並將用戶每天的訪問坐標進行統計看有多少用戶是在所能達到的服務範圍半徑內。

以下是PHP程式碼的實作(僅驗證座標在某片座標區域內)

<?php
/**
 * 验证坐标点是否在某区域内
 * Class validationMap
 */
class validationMap{
 private static $coordArray;
 private static $vertx = [];
 private static $verty = [];
 /**
  * 设置坐标区域
  * @param mixed $coordArray
  */
 public static function setCoordArray(array $coordArray)
 {
  self::$coordArray = $coordArray;
 }
 /**
  * 验证区域范围
  * @param array $coordArray
  * @return bool
  */
 public static function isCityCenter(array $coordArray){
  if(!self::vaildatePoint($coordArray)){
   return false;
  }
  return self::pnpoly(count(self::$coordArray), $coordArray[&#39;lng&#39;], $coordArray[&#39;lat&#39;]);
 }
 /**
  * 比较区域坐标
  * @param $nvert
  * @param $testx
  * @param $testy
  * @return bool
  */
 private static function pnpoly($nvert,$testx, $testy)
 {
  $c = false;
  for ($i = 0, $j = $nvert-1; $i < $nvert; $j = $i++) {
   if ( ( (self::$verty[$i]>$testy) != (self::$verty[$j]>$testy) ) && ($testx < (self::$vertx[$j]-self::$vertx[$i]) * ($testy-self::$verty[$i]) / (self::$verty[$j]-self::$verty[$i]) + self::$vertx[$i]) )
    $c = !$c;
  }
  return $c;
 }
 /**
  * 验证坐标
  * @param array $pointArray
  * @return bool
  */
 private static function vaildatePoint(array $pointArray){
  $maxY = $maxX = 0;
  $minY = $minX = 9999;
  foreach (self::$coordArray as $item){
   if($item[&#39;lng&#39;]>$maxX) $maxX = $item[&#39;lng&#39;];
   if($item[&#39;lng&#39;] < $minX) $minX = $item[&#39;lng&#39;];
   if($item[&#39;lat&#39;]>$maxY) $maxY = $item[&#39;lat&#39;];
   if($item[&#39;lat&#39;] < $minY) $minY = $item[&#39;lat&#39;];
   self::$vertx[] = $item[&#39;lng&#39;];
   self::$verty[] = $item[&#39;lat&#39;];
  }
  if ($pointArray[&#39;lng&#39;] < $minX || $pointArray[&#39;lng&#39;] > $maxX || $pointArray[&#39;lat&#39;] < $minY || $pointArray[&#39;lat&#39;] > $maxY) {
   return false;
  }
  return true;
 }
}
/**************************** test *************************************/
$map = [ //上海
 ["lng" => 121.488286, "lat" => 31.420147],
 ["lng" => 121.702154, "lat" => 31.294828],
 ["lng" => 121.780918, "lat" => 31.141157],
 ["lng" => 121.782068, "lat" => 30.941157],
 ["lng" => 121.492885, "lat" => 30.909931],
 ["lng" => 121.22325, "lat" => 30.890099],
 ["lng" => 121.161482, "lat" => 31.015526],
 ["lng" => 121.076395, "lat" => 31.226239],
 ["lng" => 121.189873, "lat" => 31.339688],
 ["lng" => 121.459509, "lat" => 31.41368],
];
$array = ["lat"=>31.218681,"lng"=>121.08604];//进行验证的区域
validationMap::setCoordArray($map);
var_dump(validationMap::isCityCenter($array));

在地圖中的運用:

相關推薦:

php如何實作進程鎖與多進程

PHP如何處理MySQL死連線

php如何計算IP位址掩碼

#

以上是PHP如何驗證座標是否在某一座標區域內的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn