PHP判断点是否在一个任意多边形内部

开发GPS定位的时候,需要判断用户是在哪一个区域范围内,这就涉及到判断点是否在一个多边形内部。理想情况是任意多边形均可(点按顺时针或逆时针排列)。使用数学上的射线法可以用很短的代码实现。

具体算法思路参见:判断一个点是否在多边形内部 [2] 射线法实现

原文提供的是JavaScript代码,我在开发时使用的是PHP,进行转换后的代码如下:

[php]
function isPointInPolygon($polygon,$lnglat){
$count = count($polygon);
$px = $lnglat[‘lng’];
$py = $lnglat[‘lat’];

$flag = FALSE;

for ($i = 0, $j = $count – 1; $i = $py || $sy >= $py && $ty $px)
$flag = !$flag;
}
}
return $flag;
}
[/php]

其中传入的参数$polygon为一群点的数组,$lnglat为传入的点,此处用经纬度,例如:

[php]
$polygon = array(
array(
“lat” => 31.027666666667,
“lng” => 121.42277777778
),
array(
“lat” => 31.016361111111,
“lng” => 121.42797222222
),
array(
“lat” => 31.023666666667,
“lng” => 121.45088888889
),
array(
“lat” => 31.035027777778,
“lng” => 121.44575
)
);
$lnglat = array(
“lat” => 31.037666666667,
“lng” => 121.43277777778
);
[/php]



Comments are closed.