Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Temukan Titik dalam poligon PHP

Ini adalah fungsi yang saya konversi dari bahasa lain ke 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)) &&
     ($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;
}

Tambahan: Untuk fungsi lainnya saya menyarankan Anda untuk menggunakan kelas polygon.php tersedia di sini .Buat Kelas menggunakan simpul Anda dan panggil fungsi isInside dengan titik tes Anda sebagai masukan untuk memiliki fungsi lain yang memecahkan masalah Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL mengatur zona waktu dalam kode PHP

  2. Bagaimana cara mengubah string menjadi tanggal di MySQL?

  3. Bagaimana cara memilih catatan dengan duplikat hanya satu bidang dan semua nilai bidang lainnya?

  4. Pencarian teks lengkap MySQL dengan kata-kata parsial

  5. Kueri/tanggal MYSQL lebih lama dari 1 minggu yang lalu (semua waktu dalam UTC)