我对mysql,多边形的Geometric数据类型有一个典型的问题。
我有经度和纬度数组形式的面数据,例如:
[["x":37.628134, "y":-77.458334], ["x":37.629867, "y":-77.449021], ["x":37.62324, "y":-77.445416], ["x":37.622424, "y":-77.457819]]
我有一个经度和纬度坐标的点(顶点),例如:
$location = new vertex($_GET["longitude"], $_GET["latitude"]);
现在,我想查找此顶点(点)是否在多边形内。我如何在php中做到这一点?
这是我从另一种语言转换为PHP的功能:
$vertices_x = array(37.628134, 37.629867, 37.62324, 37.622424); // x-coordinates of the vertices of the polygon $vertices_y = array(-77.458334,-77.449021,-77.445416,-77.457819); // y-coordinates of the vertices of the polygon $points_polygon = count($vertices_x) - 1; // number vertices - zero-based array $longitude_x = $_GET["longitude"]; // x-coordinate of the point to test $latitude_y = $_GET["latitude"]; // y-coordinate of the point to test if (is_in_polygon($points_polygon, $vertices_x, $vertices_y, $longitude_x, $latitude_y)){ echo "Is in polygon!"; } else echo "Is not in polygon"; 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)) && ($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; }
附加: 有关更多功能,我建议您使用此处提供的polygon.php类。使用顶点创建类,并isInside以测试点作为输入调用该函数,以使另一个函数解决您的问题。
isInside