sql >> Database >  >> RDS >> Mysql

Vind punt in polygoon PHP

Dit is een functie die ik van een andere taal naar PHP heb omgezet:

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

Aanvullend: Voor meer functies raad ik je aan om de polygon.php class hier beschikbaar te gebruiken .Creëer de klasse met behulp van uw hoekpunten en roep de functie isInside aan met uw testpunt als invoer om een ​​andere functie uw probleem te laten oplossen.



  1. Hoe de REGEXP_INSTR()-functie werkt in MySQL

  2. MySQL:time-out voor vergrendelingswachttijd overschreden

  3. XML ontleden in SQL Server

  4. Het niet-vastgelegde isolatieniveau lezen