首頁  >  文章  >  資料庫  >  如何使用 PHP 決定點是否位於多邊形內?

如何使用 PHP 決定點是否位於多邊形內?

Barbara Streisand
Barbara Streisand原創
2024-10-26 01:45:02547瀏覽

How to Determine if a Point Lies Within a Polygon Using PHP?

用PHP 找出多邊形內的點

問題:

問題:

給定一個由下式定義的多邊形一個經緯度座標數組和一個已知座標的點(頂點),判斷該頂點是否位於多邊形內。

解:
<code class="php">function is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)
{
  $i = $j = $c = 0;
  for ($i = 0, $j = $points_polygon ; $i < $points_polygon; $j = $i++) {
    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;
  }
  return $c;
}</code>

解決此問題,我們利用多邊形相交演算法的改編版本:

該函數迭代多邊形的頂點,計算由該頂點和後續頂點形成的線與穿過多邊形的水平線的交點點進行測試。如果所有線的交點都位於頂點的左側,則該點位於多邊形外部;

<code class="php">$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424);
$vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819);
$points_polygon = count($vertices_x) - 1;
$longitude_x = $_GET["longitude"];
$latitude_y = $_GET["latitude"];

if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){
  echo "Is in polygon!";
}
else echo "Is not in polygon";</code>

示例:

附加說明:涉及多邊形的更複雜操作,考慮使用線上提供的Polygon.php 類別。

以上是如何使用 PHP 決定點是否位於多邊形內?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn