Punkte innerhalb eines Polygons mit PHP finden
Problem:
Gegeben sei ein Polygon definiert durch Bestimmen Sie anhand eines Arrays von Breiten- und Längengradkoordinaten und eines Punkts (Scheitelpunkt) mit bekannten Koordinaten, ob der Scheitelpunkt innerhalb des Polygons liegt.
Lösung:
Um dieses Problem zu lösen , verwenden wir eine angepasste Version eines Polygonschnittalgorithmus:
<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)) && ($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>
Diese Funktion iteriert durch die Eckpunkte des Polygons und berechnet den Schnittpunkt von Linien, die durch den Eckpunkt und nachfolgende Eckpunkte gebildet werden, mit einer horizontalen Linie, die durch das Polygon verläuft Punkt, der getestet werden soll. Liegt der Schnittpunkt aller Linien links vom Scheitelpunkt, liegt der Punkt außerhalb des Polygons; andernfalls befindet es sich im Inneren.
Beispiel:
<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>
Zusätzliche Hinweise:
Für komplexere Operationen mit Polygonen Erwägen Sie die Verwendung der online verfügbaren Klasse polygon.php.
Das obige ist der detaillierte Inhalt vonWie kann man mit PHP feststellen, ob ein Punkt innerhalb eines Polygons liegt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!