我对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
以测试点作为输入调用该函数,以使另一个函数解决您的问题。
我有一个数据库,其中一个表(ca_licenses)是商业地址,另一个表是市议会区多边形的公共模式(ca_la_la_council)。 我运行此查询是为了将议会表中的地区号码放在企业地址表中: 我的问题是我总是得不到任何结果。两个几何列都是几何类型,SRID是4326。 示例ca_licenses数据:https://raw . githubusercontent . com/pour safe
我有一个带有lat和lon的商店位置csv文件。我还有一个geojson文件,其中包含美国人口普查区的多边形特征。我想使用Python查看每个位置存在哪些多边形。 我使用Shapely Python库的包含()来循环通过存储位置的csv文件,获取lat和lon坐标,然后检查这些坐标是否存在于Geojson文件中的一个多边形中。 如果我先遍历每个位置/坐标,然后遍历每个多边形,使用contains(
我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不
我有一个形状优美的多边形,代表洛杉矶市的边界。我在geopandas GeoDataFrame中还有一组约100万lat长的点,所有这些点都位于多边形的最小边界框内。其中一些点位于多边形本身内,但其他点不在多边形内。我只想保留洛杉矶边界内的那些点,由于洛杉矶的不规则形状,在其最小边界框内只有大约1/3的点在多边形本身内。 使用Python,如果点和多边形具有相同的最小边界框,识别这些点中哪些点位于
返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多
我有一组约36000个多边形,它们代表国家的一个分区(~县)。我的python脚本接收很多点:pointId、经度、纬度。 对于每一个点,我想发回pointId,polygonId。对于每个点,循环到所有多边形并使用myPoint。在(myPolygon)中,效率非常低。 我认为shapely库提供了一种更好的方法来准备多边形,以便为一个点查找多边形成为一个树路径(国家、地区、子地区……) 以下是