千家信息网

如何使用php验证坐标在某坐标区域内

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要为大家展示了"如何使用php验证坐标在某坐标区域内",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用php验证坐标在某坐标区域内"这篇文章
千家信息网最后更新 2025年11月06日如何使用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['lng'], $coordArray['lat']); } /**  * 比较区域坐标  * @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['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];//进行验证的区域validationMap::setCoordArray($map);var_dump(validationMap::isCityCenter($array));

在地图中的运用:

以上是"如何使用php验证坐标在某坐标区域内"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0