Trouver des points dans un polygone à l'aide de PHP
Problème :
Étant donné un polygone défini par un tableau de coordonnées de latitude et de longitude et un point (sommet) avec des coordonnées connues, déterminez si le sommet se trouve dans le polygone.
Solution :
Pour résoudre ce problème , nous utilisons une version adaptée d'un algorithme d'intersection de polygones :
<code class="php">function is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y) { $i = $j = $c = 0; for ($i = 0, $j = $points_polygon ; $i < $points_polygon; $j = $i++) { if ( (($vertices_y[$i] > $latitude_y != ($vertices_y[$j] > $latitude_y)) && ($longitude_x < ($vertices_x[$j] - $vertices_x[$i]) * ($latitude_y - $vertices_y[$i]) / ($vertices_y[$j] - $vertices_y[$i]) + $vertices_x[$i]) ) ) $c = !$c; } return $c; }</code>
Cette fonction parcourt les sommets du polygone, calculant l'intersection des lignes formées par le sommet et les sommets suivants avec une ligne horizontale passant par le point à tester. Si le point d'intersection se trouve à gauche du sommet de toutes les lignes, le point est à l'extérieur du polygone ; sinon, il est à l'intérieur.
Exemple :
<code class="php">$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424); $vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819); $points_polygon = count($vertices_x) - 1; $longitude_x = $_GET["longitude"]; $latitude_y = $_GET["latitude"]; if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){ echo "Is in polygon!"; } else echo "Is not in polygon";</code>
Notes supplémentaires :
Pour des opérations plus complexes impliquant des polygones , pensez à utiliser la classe polygon.php disponible en ligne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!