Wie kann ich in PHP überprüfen, ob Koordinaten innerhalb eines bestimmten Koordinatenbereichs liegen? In diesem Artikel wird hauptsächlich der PHP-Code zur detaillierten Überprüfung von Koordinaten innerhalb eines bestimmten Koordinatenbereichs vorgestellt. Interessierte Freunde können darauf verweisen. Ich hoffe, es hilft allen.
Eine Anforderung, auf die ich zuvor gestoßen bin, bestand darin, die Dienste des Unternehmens auf einer Karte anzuzeigen und die täglichen Zugriffskoordinaten der Benutzer zu zählen, um zu sehen, wie viele Benutzer sich im erreichbaren Serviceradius befinden.
Das Folgende ist die Implementierung des PHP-Codes (nur Überprüfung, ob die Koordinaten innerhalb eines bestimmten Koordinatenbereichs liegen)
<?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));
Anwendung in der Karte:
Verwandte Empfehlungen:
Wie So implementieren Sie die Prozesssperre in PHP mit Multiprozess
Wie PHP mit MySQL-toten Verbindungen umgeht
Wie PHP die IP-Adressmaske berechnet
Das obige ist der detaillierte Inhalt vonSo überprüfen Sie, ob Koordinaten in PHP innerhalb eines bestimmten Koordinatenbereichs liegen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!