gpt4 book ai didi

java - 使用 Java 从 (geo)json 数组中删除对象

转载 作者:行者123 更新时间:2023-12-02 05:07:11 25 4
gpt4 key购买 nike

我有一个 geojson(一种用于地理引用数据的 json),带有一个“特征”数组,包含许多多边形。我想循环遍历“features”数组中的元素并删除其中一些元素(其多边形面积小于 70.0)。这是我的 geojson 的结构:

{
"type": "FeatureCollection",

"features": [
{ "type": "Feature", "properties": { "DN": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5117.0, 0.0 ], [ 5117.0, 1.0 ], [ 5124.0, 1.0 ], [ 5117.0, 0.0 ] ] ] } },
{ "type": "Feature", "properties": { "DN": 2 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.0, 149.0 ], [ 0.0, 150.0 ], [ 61.0, 150.0 ], [ 0.0, 149.0 ] ] ] } }
]
}

在这里,我尝试循环“features”数组的元素,计算每个多边形的面积,如果其面积小于 70.0,则将其删除:

public static void smallPolygonRemover() throws IOException, ParseException{
// read geojson
FileReader reader = new FileReader("source.geojson");
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
JSONArray features = (JSONArray) jsonObject.get("features");

for (int j = 0; j < features.size(); j++) {
JSONObject firstFeature = (JSONObject) features.get(j);
JSONObject geometry = (JSONObject) firstFeature.get("geometry");
JSONArray coordinates = (JSONArray) geometry.get("coordinates");
// area(coordinate) calculates the area of the polygon with given coordinates
if(area(coordinates)<70.0){
features.remove(firstFeature);
}
}
// write the edited geojson to a file
FileWriter writer = new FileWriter("Removed.geojson");
writer.write(jsonObject.toJSONString());
writer.close();
}

问题是:应该删除的多边形仍然存在,但其他多边形已经消失了。我使用 features.remove(firstFeature); 是否错误?我也尝试过features.remove(features);但没有用..另一种可能性是区域函数是错误的(我使用this一个)或者可能是 double 有问题。

最佳答案

您错过了循环和 remove() 之间的交互:如果删除数组中的一个条目,则所有其他元素的索引都会更改。这意味着如果您删除项目#2,那么项目#3 就会变成#2。然后,您的循环将索引设置为 3,这意味着您永远不会检查项目#3,而是继续使用旧的#4。

从循环中删除 j++ 并使用以下代码:

 if(area(coordinate)<70.0){
features.remove(firstFeature);
// removing the polygon moves j+1 to j, so we need to leave j alone
} else {
j++; // this polygon is OK, move to the next one
}

或使用 features.size()-1 开始迭代并倒计时。

关于java - 使用 Java 从 (geo)json 数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com