ホームページ >データベース >mysql チュートリアル >PHP を使用して点がポリゴン内にあるかどうかを判断するにはどうすればよいでしょうか?

PHP を使用して点がポリゴン内にあるかどうかを判断するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-10-25 03:38:02780ブラウズ

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>
<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;

}
return $c;
}

この PHP コードでは、is_in_polygon 関数が多角形の各エッジを反復処理して、点が多角形の「側面」上にあるかどうかを確認します。ここで、1 つの頂点の y 座標はテスト ポイントの y 座標より大きく、もう 1 つの頂点の y 座標はテスト ポイントの y 座標より小さいです。これらの条件が両方とも true の場合、関数はテスト ポイントの x 座標が 2 つの頂点間の線分より小さいかどうかをチェックします。そうである場合、それはポリゴン境界の交差を意味し、カウンタに 1 を加算または減算します。最後に、そのカウンターがゼロ以外の場合、テスト ポイントがポリゴン内にあることを示します。

追加リソース:

さらにサポートするには、polygon.php の使用を検討してください。このクラスは、点がポリゴン内にあるかどうかを判断するための追加関数 isInside を提供します。

以上がPHP を使用して点がポリゴン内にあるかどうかを判断するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。