加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

验证坐标在某坐标区域内php代码

发布时间:2020-12-12 21:45:39 所属栏目:PHP教程 来源:网络整理
导读:之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内。 以下是PHP代码的实现 (仅验证坐标在某片坐标区域内) * Class validationMap */class validationMap{ private static $

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内。

以下是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));

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读