Rumah  >  Artikel  >  pangkalan data  >  ## Bagaimanakah anda menentukan sama ada titik terletak dalam poligon menggunakan PHP?

## Bagaimanakah anda menentukan sama ada titik terletak dalam poligon menggunakan PHP?

Susan Sarandon
Susan Sarandonasal
2024-10-25 03:53:02354semak imbas

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

Menentukan Sama ada Titik Terletak di Dalam Poligon

Dalam bidang analisis spatial, seseorang sering menghadapi masalah untuk menentukan sama ada titik tertentu terletak dalam sempadan poligon. Ini boleh menjadi sangat mencabar apabila berurusan dengan bentuk geometri kompleks yang ditakrifkan oleh berbilang bucu. Geometry Datatype MySQL termasuk jenis poligon untuk mewakili bentuk sedemikian.

Pertimbangkan senario di mana kita mempunyai tatasusunan latitud dan longitud yang mewakili bucu poligon, seperti ditunjukkan di bawah:

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

Selain itu, kita mempunyai titik dengan koordinat latitud dan longitudnya sendiri:

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

Tugasnya ialah untuk menentukan sama ada titik ini berada dalam poligon yang ditentukan. Untuk mencapai ini dalam PHP, kita boleh menggunakan fungsi berikut:

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

Fungsi ini melelang ke atas bucu poligon dan menggunakan pengiraan geometri untuk menentukan sama ada titik itu terletak dalam sempadannya. Berdasarkan keputusan, ia mengembalikan bendera yang menunjukkan sama ada titik itu berada di dalam atau di luar poligon.

Untuk kefungsian yang lebih menyeluruh, pertimbangkan untuk menggunakan kelas polygon.php. Dengan mencipta contoh kelas ini dengan bucu poligon anda dan memanggil kaedah isInside() dengan titik anda sebagai input, anda boleh memanfaatkan pendekatan alternatif untuk menyelesaikan masalah ini.

Atas ialah kandungan terperinci ## Bagaimanakah anda menentukan sama ada titik terletak dalam poligon menggunakan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn