sql >> Databasteknik >  >> RDS >> Mysql

Hitta punkt i polygon PHP

Detta är en funktion som jag konverterade från ett annat språk till 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;
}

Ytterligare: För fler funktioner rekommenderar jag att du använder polygon.php-klassen tillgänglig här .Skapa klassen med dina hörn och anrop funktionen isInside med din testpunkt som indata för att få en annan funktion som löser ditt problem.



  1. Vad betyder det när jag säger att det förberedda uttalandet är förkompilerat?

  2. SWITCHOFFSET() Exempel i SQL Server

  3. PHP/MySQL - algoritm för topprankade

  4. Kontrollera om MySQL-tabellen finns utan att använda välj från syntax?