Maison  >  Article  >  base de données  >  Comment pouvons-nous déterminer si un point se trouve dans un polygone en utilisant PHP ?

Comment pouvons-nous déterminer si un point se trouve dans un polygone en utilisant PHP ?

DDD
DDDoriginal
2024-10-25 03:38:02696parcourir

How can we determine if a point lies within a polygon using PHP?

Implémentation PHP pour localiser des points dans un polygone

Question :

Étant donné un tableau de coordonnées de latitude et de longitude représentant un polygone et un point avec des coordonnées similaires, comment pouvons-nous déterminer si le point se trouve à l'intérieur du polygone ?

Solution :

 <br>$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424);    // Coordonnées x des sommets du polygone<br>$vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819); // coordonnées y des sommets du polygone<br>$points_polygon = count($vertices_x) - 1;  // nombre de sommets du polygone<br>$longitude_x = $_GET["longitude"];  // Coordonnée x du point de test<br>$latitude_y = $_GET["latitude"];    // coordonnée y du point de test</p>
<p>if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){<br> echo "Le point est dans le polygone !";<br> ><br>else echo "Le point n'est pas dans le polygone";</p>
<p>fonction is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)<br>{<br> $i = $j = $c = 0;<br> pour ($i = 0, $j = $points_polygon ; $i < $points_polygon; $j = $i ) {</p><pre class="brush:php;toolbar:false">if ( (($vertices_y[$i]  >  $latitude_y != ($vertices_y[$j] > $latitude_y)) &amp;&amp;
 ($longitude_x < ($vertices_x[$j] - $vertices_x[$i]) * ($latitude_y - $vertices_y[$i]) / ($vertices_y[$j] - $vertices_y[$i]) + $vertices_x[$i]) ) )
   $c = !$c;

}
retour $c;
}

Dans ce code PHP, la fonction is_in_polygon parcourt chaque bord du polygone, vérifiant si le point est du "côté" du polygone où la coordonnée y d'un sommet est supérieure à la coordonnée y du point de test et la coordonnée y de l'autre sommet est inférieure à la coordonnée y du point de test. Si ces deux conditions sont vraies, la fonction vérifie si la coordonnée x du point de test est inférieure au segment de ligne entre les deux sommets. Si tel est le cas, cela signifie un franchissement de la limite du polygone et ajoute ou soustrait 1 à un compteur. Enfin, si ce compteur est différent de zéro, cela indique que le point de test se trouve dans le polygone.

Ressources supplémentaires :

Pour une assistance supplémentaire, envisagez d'utiliser le polygon.php classe, qui fournit une fonction supplémentaire, isInside, pour déterminer si un point se trouve dans un polygone.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn