验证坐标在某片坐标区域内 php 代码
Oct 08, 2016 pm 05:45 PM以下是PHP代码的实现 (仅验证坐标在某片坐标区域内)
<?php /** * 验证坐标点是否在某区域内 * @author xiaoliang <1058436713@qq.com> * 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));
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)