Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdź punkt w wieloboku PHP

To jest funkcja, którą przekonwertowałem z innego języka na 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;
}

Dodatkowe: Aby uzyskać więcej funkcji, radzę użyć klasy polygon.php dostępnej tutaj .Stwórz klasę używając swoich wierzchołków i wywołaj funkcję isInside z punktem testowym jako danymi wejściowymi, aby mieć inną funkcję, która rozwiąże Twój problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Railsy weryfikują unikalność niepowodzeń na współbieżnych wejściach

  2. Sparametryzowane zapytania PHP/MySQL

  3. Znajdź rekordy z polem daty z ostatnich 24 godzin

  4. Dodaj prefiks do automatycznego przyrostu w mysql db

  5. Jak działa operator SOUNDS LIKE w MySQL