PHP判断一个点是否在多边形的内部,通常采用交点法来判断。以下为优化版的源码示例,仅供参考学习。
- function isPointInPolygon($point, $polygon) {
- $count = 0;
- $n = count($polygon);
- for ($i = 0; $i < $n; $i++) {
- $p1 = $polygon[$i];
- $p2 = $polygon[($i+1)%$n];
- if ($point[1] > min($p1[1], $p2[1]) && $point[1] <= max($p1[1], $p2[1]) && $point[0] <= max($p1[0], $p2[0]) && $p1[1] != $p2[1]) {
- $xinters = ($point[1]-$p1[1])*($p2[0]-$p1[0])/($p2[1]-$p1[1])+$p1[0];
- if ($p1[0] == $p2[0] || $point[0] <= $xinters) {
- $count++;
- }
- }
- }
- return $count%2 != 0;
- }
在上述代码中$point是要判断的坐标,$polygon是多边形顶点坐标,返回结果为 true的时候表示坐标在多边形内部,返回false表示坐标在多边形外部。