我的代码中存在一些逻辑错误,我不确定我在这里做错了什么。
首先进行设置,我正在读取一个.json文件,它位于以下布局中:
因此,多边形元素位于每1、3、5 ..处,而学校名称是之前的那个。
现在,我有另一个.csv文件,在该文件中,我将采用不同的经度和纬度值。基本上,我必须查看CSV文件中的经纬度是否在json文件中所述的所有这些多边形中。
这是我吸收json文件和csv文件的PHP代码的一部分。我的逻辑是,我从CSV中获取一个经度和纬度值,然后想要遍历json文件中的每个多边形。
如果遵循以下代码,则输入值,当我满足其位于多边形外部的条件时,它会跳出第二个while循环,并使用另一组经纬度。
$string = file_get_contents("Schools.json", 0, null, null);
$json_a = json_decode($string, true);
$start_row = 4;
$rowID = 1;
$polygonIndex = 1;
$insideCheck = 0;
$file = fopen("ActiveProperty.csv", "r");
while (($row = fgetcsv($file)) !== FALSE){
if($rowID >= $start_row){
$points = array($row[52] . ' ' . $row[49]);
$polygonIndex = 1;
while ($polygonIndex < 454){
$polygon = $json_a[$polygonIndex]['Polygons'];
foreach($points as $key => $point) {
if ($pointLocation->pointInPolygon($point, $polygon) == "outside"){
echo "point " . ($key+1) . " ($point): " . $pointLocation->pointInPolygon($point, $polygon);
echo "<br>";
$polygonIndex = $polygonIndex + 2;
echo $polygonIndex;
$insideCheck = 0;
break;
}
else {
echo $json_a[$polygonIndex - 1];
echo "<br>";
echo "point " . ($key+1) . " ($point): " . $pointLocation->pointInPolygon($point, $polygon);
echo "<br>";
$insideCheck = 1;
break;
}
}
if ($insideCheck = 0) {
echo "out of foreach 0";
continue;
}
else {
echo "out of foreach";
$insideCheck = 0;
break;
}
}
}
$rowID++;
}
这是我的示例输出:
此图像中的纬度和经度来自csv文件。
预期的输出应该是在纬度和经度上都长,它应该越过json中的多边形,如果在其内部,则返回第一个元素即学校。在这里,$ polygonIndex仅停留3,我猜这是问题。
如果仍然不清楚我要做什么,请告诉我。谢谢。