首页  >  文章  >  数据库  >  我们如何使用 PHP 确定一个点是否位于多边形内?

我们如何使用 PHP 确定一个点是否位于多边形内?

DDD
DDD原创
2024-10-25 03:38:02696浏览

How can we determine if a point lies within a polygon using PHP?

在多边形内定位点的 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)) &amp;&amp;
 ($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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn