欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

驗(yàn)證坐標(biāo)在某坐標(biāo)區(qū)域內(nèi)php代碼

 更新時(shí)間:2016年10月08日 09:58:23   作者:x_liang  
這篇文章主要為大家詳細(xì)介紹了驗(yàn)證坐標(biāo)在某片坐標(biāo)區(qū)域內(nèi)php代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

之前碰到的這樣一個(gè)需求,要將公司的服務(wù)在地圖中顯示出來,并將用戶每天的訪問坐標(biāo)進(jìn)行統(tǒng)計(jì)看有多少用戶是在所能達(dá)到的服務(wù)范圍半徑內(nèi)。

以下是PHP代碼的實(shí)現(xiàn) (僅驗(yàn)證坐標(biāo)在某片坐標(biāo)區(qū)域內(nèi))

<?php
/**
 * 驗(yàn)證坐標(biāo)點(diǎn)是否在某區(qū)域內(nèi)
 * @author xiaoliang <1058436713@qq.com>
 * Class validationMap
 */
class validationMap{
 private static $coordArray;
 private static $vertx = [];
 private static $verty = [];
 /**
  * 設(shè)置坐標(biāo)區(qū)域
  * @param mixed $coordArray
  */
 public static function setCoordArray(array $coordArray)
 {
  self::$coordArray = $coordArray;
 }
 /**
  * 驗(yàn)證區(qū)域范圍
  * @param array $coordArray
  * @return bool
  */
 public static function isCityCenter(array $coordArray){
  if(!self::vaildatePoint($coordArray)){
   return false;
  }
  return self::pnpoly(count(self::$coordArray), $coordArray['lng'], $coordArray['lat']);
 }
 /**
  * 比較區(qū)域坐標(biāo)
  * @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;
 }
 /**
  * 驗(yàn)證坐標(biāo)
  * @param array $pointArray
  * @return bool
  */
 private static function vaildatePoint(array $pointArray){
  $maxY = $maxX = 0;
  $minY = $minX = 9999;
  foreach (self::$coordArray as $item){
   if($item['lng']>$maxX) $maxX = $item['lng'];
   if($item['lng'] < $minX) $minX = $item['lng'];
   if($item['lat']>$maxY) $maxY = $item['lat'];
   if($item['lat'] < $minY) $minY = $item['lat'];
   self::$vertx[] = $item['lng'];
   self::$verty[] = $item['lat'];
  }
  if ($pointArray['lng'] < $minX || $pointArray['lng'] > $maxX || $pointArray['lat'] < $minY || $pointArray['lat'] > $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];//進(jìn)行驗(yàn)證的區(qū)域
validationMap::setCoordArray($map);
var_dump(validationMap::isCityCenter($array));

在地圖中的運(yùn)用:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論