Entfernen überlappender Puffer mit Google Earth Engine
Ich habe eine Linie in Liniensegmente aufgeteilt, wobei jedes Segment einen Puffer hat. Ich versuche zu entfernen, wo sie sich überlappen (im Grunde genommen, wo sich die dunkleren Kreise innerhalb des Zeilenpuffers selbst befinden), damit beim späteren Maskieren durch Puffer keine doppelten Ergebnisse erzielt werden.
Weiß jemand, wie man diese Überlappungen entfernt (und das Land, das sie bedeckt haben, idealerweise noch in EINEM gepufferten Bereich hält)?
var lines = ee.FeatureCollection(
linetosplit.cutLines(ee.List.sequence(0, linetosplit.length(), 9000))
.geometries()
.map(function (geometry) { return ee.Feature(ee.Geometry(geometry));
}));
var buffered = lines.map(function (feature) {
return feature.buffer(2000);
});
Map.addLayer(buffered);
print(buffered)
Link zum Code: https://code.earthengine.google.com/b6b989b9d0bed22a8882f95bd68d0d4d
Antworten
Sie können zunächst die einzelnen Features aus der Feature-Sammlung extrahieren und die Schnittpunkte zwischen ihnen mithilfe von:
//extract individual features
var f0 = buffered.filter(ee.Filter.eq("system:index", '0'));
var f1 = buffered.filter(ee.Filter.eq("system:index", '1'));
var f2 = buffered.filter(ee.Filter.eq("system:index", '2'));
var f3 = buffered.filter(ee.Filter.eq("system:index", '3'));
var f4 = buffered.filter(ee.Filter.eq("system:index", '4'));
var f5 = buffered.filter(ee.Filter.eq("system:index", '5'));
//compute spatial intersections between features
var int1 = f0.geometry().intersection(f1.geometry());
var int2 = f1.geometry().intersection(f2.geometry());
var int3 = f2.geometry().intersection(f3.geometry());
var int4 = f3.geometry().intersection(f4.geometry());
var int5 = f4.geometry().intersection(f5.geometry());
Anschließend kombinieren Sie die Schnittpunkte zu einem Multipolygon und berechnen den räumlichen Unterschied mit:
//combine intersections and plot
var intersections = ee.Geometry.MultiPolygon([int1, int2, int3, int4, int5]);
Map.addLayer(intersections, {color: 'FFFF00'}, 'intersections');
//compute difference and plot
var difference = buffered.geometry().difference(intersections)
Map.addLayer(difference, {color: '#24f8ff'}, 'difference');