如何在多边形内找到多个点

时间:2014-06-04 19:11:56

标签: php google-maps loops polygon

我使用以下代码来测试一个点是否在多边形中,但是我想让它适用于多个点,但是当我通过循环运行它时它无法正常运行。

Polygon array = (52.62806176021313, 1.0546875),(52.435920583590125, 0.82672119140625),(52.26479561297205, 0.78277587890625),(52.24966453484505, 1.0986328125),(52.37224556866933, 1.34857177734375),(52.63973017532399, 1.46392822265625),(52.73795463681313, 1.25518798828125)

我先把它拆开了。

没有循环

$Latx  = 52.5;  //Y Point to test if inside
$LonX   = 1.1;  //X Point to test if inside 
$VTX    = $LON; //X array of polygon
$VTY    = $LAT; //Y array of polygon
$POINTS = count($VTX) - 1; //number of polygon sides
//=====================================================
if (is_in_polygon($POINTS, $VTX, $VTY, $LonX, $LatY)){
  echo "Is in polygon  ($LatY,$LonX)";
  echo "<br>";
} 
else {
  echo "Is not in polygon ($LatY,$LonX)";
}
echo "<br>" 

function is_in_polygon($POINTS, $VTX, $VTY, $LonX, $LatY)
{
  $i = $j = $c = 0;
  for ($i = 0, $j = $POINTS ; $i < $POINTS; $j = $i++) {
    if ((($VTY[$i]  >  $LatY != ($VTY[$j] > $LatY)) &&
        ($LonX < ($VTX[$j] - $VTX[$i]) * ($LatY - $VTY[$i]) /
        ($VTY[$j] - $VTY[$i]) + $VTX[$i]) ) )
      $c = !$c;
    }
    return $c;
}

尝试使用循环

for ($x=0; $x<=1000; $x++) {
  $QU="SELECT lat,lon FROM DBTable LIMIT $x,1";
  $RT=mysql_query($QU,$db);
  if (!$RT) {
    die("Invalid query: " . mysql_error());
  }
  while ($row = mysql_fetch_assoc($RT)){
    $LonX[$x]=$row["lat"];
    $LatY[$x]=$row["lon"];

    if (is_in_polygon($POINTS, $VTX, $VTY, $LonX[$x], $LatY{$x])){
      echo "Is in polygon  ($LatY[$x],$LonX[$x])";
      echo "<br>";
    }
    else echo "Is not in polygon ($LatY[$x],$LonX[$x])";
    echo "<br>" 
  }
}

0 个答案:

没有答案