У меня есть geojson (json для данных с привязкой) с одним «свойством» -array, содержащим много полигонов. Я хочу прокрутить элементы в «feature» -array и удалить некоторые из них (у которых область полигона меньше 70.0). Это структура моего GeoJSON:Удаление объекта из массива в (geo) json с использованием Java
{
"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 ] ] ] } }
]
}
Здесь я пытаюсь Переберите элементы «особенности» -array вычислите области каждого полигона и удалить его, если ее площадь меньше, чем 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) или, возможно, есть проблемы с удвоениями.
Проверьте свой код. Вы помещаете точки в переменную 'координат' (с' s'), а затем вызываете 'area()' с 'coord'. Это опечатка в вопросе или неправильный код? –
Это была опечатка, но мой исходный код использовал координаты. Так что опечатка была только здесь. Спасибо. – Selphiron