Heim > Datenbank > MySQL-Tutorial > Hauptteil

## Wie stellt man mit PHP fest, ob ein Punkt innerhalb eines Polygons liegt?

Susan Sarandon
Freigeben: 2024-10-25 03:53:02
Original
353 Leute haben es durchsucht

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

Bestimmen, ob ein Punkt innerhalb eines Polygons liegt

Im Bereich der räumlichen Analyse stößt man häufig auf das Problem, festzustellen, ob ein bestimmter Punkt vorliegt liegt innerhalb der Grenzen eines Polygons. Dies kann besonders schwierig sein, wenn es um komplexe geometrische Formen geht, die durch mehrere Eckpunkte definiert sind. Der Geometry-Datentyp von MySQL enthält einen Polygontyp zur Darstellung solcher Formen.

Stellen Sie sich das Szenario vor, in dem wir ein Array von Breiten- und Längengraden haben, die die Eckpunkte eines Polygons darstellen, wie unten gezeigt:

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

Zusätzlich haben wir einen Punkt mit eigenen Breiten- und Längenkoordinaten:

$location = new vertex($_GET["longitude"], $_GET["latitude"]);
Nach dem Login kopieren

Die Aufgabe besteht darin, festzustellen, ob dieser Punkt innerhalb des angegebenen Polygons liegt. Um dies in PHP zu erreichen, können wir die folgende Funktion verwenden:

<?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;
}
?>
Nach dem Login kopieren

Diese Funktion iteriert über die Eckpunkte des Polygons und verwendet geometrische Berechnungen, um zu bestimmen, ob der Punkt innerhalb seiner Grenzen liegt. Basierend auf dem Ergebnis wird ein Flag zurückgegeben, das angibt, ob der Punkt innerhalb oder außerhalb des Polygons liegt.

Für eine umfassendere Funktionalität sollten Sie die Verwendung der Klasse polygon.php in Betracht ziehen. Indem Sie eine Instanz dieser Klasse mit den Eckpunkten Ihres Polygons erstellen und die Methode isInside() mit Ihrem Punkt als Eingabe aufrufen, können Sie einen alternativen Ansatz zur Lösung dieses Problems nutzen.

Das obige ist der detaillierte Inhalt von## Wie stellt man mit PHP fest, ob ein Punkt innerhalb eines Polygons liegt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!