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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 03:53:02354parcourir

## How do you determine if a point lies within a polygon using PHP?

Déterminer si un point se trouve dans un polygone

Dans le domaine de l'analyse spatiale, on rencontre souvent le problème de déterminer si un point donné se situe à l’intérieur des limites d’un polygone. Cela peut être particulièrement difficile lorsqu'il s'agit de formes géométriques complexes définies par plusieurs sommets. Le type de données géométriques de MySQL inclut un type de polygone pour représenter de telles formes.

Considérez le scénario dans lequel nous avons un tableau de latitudes et de longitudes représentant les sommets d'un polygone, comme indiqué ci-dessous :

[{"x":37.628134,  "y":-77.458334},
{"x":37.629867,   "y":-77.449021},
{"x":37.62324,    "y":-77.445416},
{"x":37.622424,   "y":-77.457819}]

De plus, nous avons un point avec ses propres coordonnées de latitude et de longitude :

$location = new vertex($_GET["longitude"], $_GET["latitude"]);

La tâche consiste à déterminer si ce point se situe dans le polygone spécifié. Pour accomplir cela en PHP, nous pouvons utiliser la fonction suivante :

<?php
$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424);    // x-coordinates of the vertices of the polygon
$vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819); // y-coordinates of the vertices of the polygon
$points_polygon = count($vertices_x) - 1;  // number vertices - zero-based array
$longitude_x = $_GET["longitude"];  // x-coordinate of the point to test
$latitude_y = $_GET["latitude"];    // y-coordinate of the point to test

if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){
  echo "Is in polygon!";
}
else echo "Is not in polygon";

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;
}
?>

Cette fonction parcourt les sommets du polygone et utilise des calculs géométriques pour déterminer si le point se trouve dans ses limites. En fonction du résultat, il renvoie un drapeau indiquant si le point est à l'intérieur ou à l'extérieur du polygone.

Pour des fonctionnalités plus complètes, pensez à utiliser la classe polygon.php. En créant une instance de cette classe avec les sommets de votre polygone et en appelant la méthode isInside() avec votre point en entrée, vous pouvez exploiter une approche alternative pour résoudre ce problème.

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