检查地理位置是否在边界内

时间:2014-04-25 18:59:08

标签: php geolocation geo

我现在尝试在某个区域的边界内生成一些地理定位我试图在这些边界内生成地理位置

$bounds = array(
    array(55.4024447, 13.1656691),
    array(56.1575776, 15.8350261),
    array(68.0410163, 17.4600359),
    array(58.9380148, 11.3501468),
    array(67.6820048, 16.1964251)
);

现在我的检查如下

if (
    ($bounds[0][0] < $lat && $bounds[0][1] < $lng) &&
    ($bounds[1][0] < $lat && $bounds[1][1] > $lng) &&
    ($bounds[2][0] > $lat && $bounds[2][1] > $lng) &&
    ($bounds[3][0] > $lat && $bounds[3][1] < $lng) &&
    ($bounds[4][0] > $lat && $bounds[4][1] > $lng)
) {

但是这只能获得中间正方形内的位置而不是整个区域内的位置 您是否知道如何在整个区域内进行检查?

1 个答案:

答案 0 :(得分:5)

以下PHP代码使用point in polygon算法。

在图1中,点是多边形,并且由此绘制的线与多边形的周长交叉奇数次(3)。在图2中,线穿过周长偶数次(4)并且该点在外面。 enter image description here

<?php

function pointInPolygon($polySides,$polyX,$polyY,$x,$y) {
  $j = $polySides-1 ;
  $oddNodes = 0;
  for ($i=0; $i<$polySides; $i++) {
    if ($polyY[$i]<$y && $polyY[$j]>=$y  ||  $polyY[$j]<$y && $polyY[$i]>=$y) {
        if ($polyX[$i]+($y-$polyY[$i])/($polyY[$j]-$polyY[$i])*($polyX[$j]-$polyX[$i])<$x)  {
            $oddNodes=!$oddNodes; 
        }
    }
   $j=$i; }

  return $oddNodes;
}
$polySides = 3;
$x =60;
$y =15;
$polyX = array(55.4024447,56.1575776,68.0410163,67.6820048,58.9380148,55.4024447);// First point repeated to close polygon coordinates 
$polyY = array(13.1656691,15.8350261,17.4600359,16.1964251,11.3501468,13.1656691); 
if (pointInPolygon($polySides,$polyX,$polyY,$x,$y)){
    echo "Point In Polygon";
    }else{
    echo "Point Not In Polygon";
    }
?>