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

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 01:45:02547parcourir

How to Determine if a Point Lies Within a Polygon Using PHP?

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)) &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;
  }
  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!

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