이전에 제가 접한 요구사항은 회사의 서비스를 지도에 표시하고, 사용자의 일일 액세스 좌표를 계산하여 도달 가능한 서비스 반경 내에 몇 명의 사용자가 있는지 확인하는 것이었습니다.
다음은 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));
지도에서의 애플리케이션:
이 글의 내용은 모두의 학습에 도움이 되기를 바랍니다.
좌표가 특정 좌표 영역 내에 있는지 확인하는 것과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!