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

Susan Sarandon
Lepaskan: 2024-10-25 03:53:02
asal
353 orang telah melayarinya

## 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}]
Salin selepas log masuk

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

$location = new vertex($_GET["longitude"], $_GET["latitude"]);
Salin selepas log masuk

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;
}
?>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!