在多边形内定位点的 PHP 实现
问题:
给定一个数组经纬度坐标代表一个多边形和一个坐标相似的点,如何判断该点是否在多边形内?
解决方案:
; <br>$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424); // 多边形顶点的 x 坐标<br>$vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819); // 多边形顶点的 y 坐标<br>$points_polygon = count($vertices_x) - 1; // 多边形顶点数<br>$longitude_x = $_GET["longitude"]; // 测试点的x坐标<br>$latitude_y = $_GET["latitude"]; // 测试点的y坐标<p>if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){<br> echo "点在多边形内!";<br> }<br>else echo "点不在多边形内";</p><p>function is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)<br>{<br> $i = $j = $c = 0;<br> for ($i = 0, $j = $points_polygon ; $i </p><pre class="brush:php;toolbar:false">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;
}
返回$c;
}
在此 PHP 代码中,is_in_polygon 函数迭代多边形的每条边,检查该点是否位于多边形的“一侧”其中一个顶点的 y 坐标大于测试点的 y 坐标,而另一个顶点的 y 坐标小于测试点的 y 坐标。如果这两个条件都为真,则该函数将检查测试点的 x 坐标是否小于两个顶点之间的线段。如果是,则表示跨越了多边形边界,并在计数器中加或减 1。最后,如果该计数器非零,则表明测试点位于多边形内。
其他资源:
如需进一步支持,请考虑使用 Polygon.php类,它提供了一个附加函数 isInside,用于确定点是否在多边形内。
以上是我们如何使用 PHP 确定一个点是否位于多边形内?的详细内容。更多信息请关注PHP中文网其他相关文章!