最近作一个项目须要使用到区域,而且要判断当前的经纬度是否在区域内,已便对应业务需求变化。废话很少说直接上代码;php
/** * 验证区域范围 * @param array $coordArray 区域 * @param array $point 验证点 * @return bool */ function isPointInPolygon( $coordArray, $point) { if(!is_array($coordArray)||!is_array($point)) return false; $maxY = $maxX = 0; $minY = $minX = 9999; foreach ($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']; $vertx[] = $item['lng']; $verty[] = $item['lat']; } if ($point['lng'] < $minX || $point['lng'] > $maxX || $point['lat'] < $minY || $point['lat'] > $maxY) { return false; } $c = false; $nvert=count($coordArray); $testx=$point['lng']; $testy=$point['lat']; for ($i = 0, $j = $nvert-1; $i < $nvert; $j = $i++) { if ( ( ($verty[$i]>$testy) != ($verty[$j]>$testy) ) && ($testx < ($vertx[$j]-$vertx[$i]) * ($testy-$verty[$i]) / ($verty[$j]-$verty[$i]) + $vertx[$i]) ) $c = !$c; } return $c; }
ps:首先须要先把多边形覆盖物(百度地图)转化为数组,而后使用数学上的射线法。数组