Maison > base de données > tutoriel mysql > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-25 03:53:02
original
353 Les gens l'ont consulté

## 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}]
Copier après la connexion

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

$location = new vertex($_GET["longitude"], $_GET["latitude"]);
Copier après la connexion

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;
}
?>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!