sql >> Database teknologi >  >> RDS >> Mysql

Find punkt i polygon PHP

Dette er en funktion, jeg konverterede fra et andet sprog til 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;
}

Yderligere: For flere funktioner råder jeg dig til at bruge polygon.php-klassen tilgængelig her .Opret klassen ved hjælp af dine hjørner og kald funktionen isInside med dit testpunkt som input for at få en anden funktion til at løse dit problem.



  1. Hvordan kan jeg liste alle fremmednøgler, der refererer til en given tabel i SQL Server?

  2. VÆLG / GRUPPER EFTER - tidssegmenter (10 sekunder, 30 sekunder osv.)

  3. Tilføj og link mysql-biblioteker i en cmakelist.txt

  4. MYSQL OPDATERING SÆT på samme kolonne, men med flere WHERE-klausuler