Menu

Geometrie transformieren

Gismo
Attachments
difference.png (1347 bytes)
difference_sym.png (1685 bytes)
geom_boundary.png (28045 bytes)
geom_convex_hull.png (34285 bytes)
geom_envelope.png (6355 bytes)
geom_exterior_ring.png (33705 bytes)
geom_norm.png (36511 bytes)

Geometrie transformieren

Umriss

Java |
---------- |
.getGeometry().getBoundary()

Rahmen

Java |
---------- |
.getGeometry().getEnvelope()

Konvexe Hülle

Java |
---------- |
.getGeometry().norm()

Norm

Java |
---------- |
.getGeometry().getBoundary()

Eingeschlossene Flächen eines Polygons füllen

Wenn wir uns für eine (oder mehrere) Flächen/Polygone interessieren, die keine „Ausstanzungen“ enthalten, können wir eine bestimmte Funktion eines Polygons benutzen. Dazu müssen wir die Geometry zuerst zum Polygon casten und dann diese Funktion ausführen:

Java |
---------- |
.getGeometry().getExteriorRing()

Daraus erhalten wir eine geschlossene Linie, die wir mit Hilfe des Polygonizers ausfüllen können.
(Siehe Beispiel unten.)

Alternativ zur OpenJump-Funktion ‚getExteriorRing() ‘ kann der Linestring bereits von der Datenbank erhalten werden, indem 'SELECT geom' einfach um die PostgreSQL-Funktion ergänzt wird:

SQL |
---------- |
--SELECT geom, ...
SELECT ST_ExteriorRing(geom), …

SQL, Beispiel |
---------- |
BasicFeature currentBasicFeature = iter.next();
Set<geometry> currentBasicFeatureList = new HashSet<geometry>();
currentBasicFeatureList.add(((Polygon)currentBasicFeature.getGeometry()).
getExteriorRing());
Polygonizer polygonizer = new Polygonizer();
polygonizer.add(currentBasicFeatureList);
Collection<polygon> results = new java.util.ArrayList();
results = polygonizer.getPolygons();
BasicFeature newBasicFeature = (BasicFeature)
currentBasicFeature.clone(true);
if (results.size() > 0) {
Polygon newPolygon = null;
for (Polygon result : results) {
if (newPolygon == null) {
newPolygon = (Polygon) result;
} else {
newPolygon = (Polygon) newPolygon.union(result);
}
newBasicFeature.setGeometry(newPolygon);
}
}
newCollection.add(newBasicFeature);</polygon></geometry></geometry>

  • Der Polygonizer kann nur mit Listen arbeiten, deshalb das Hinzufügen zu einer Liste.
  • Wir müssen zu Polygon casten, um die Linie um die äußeren Grenzen zu erhalten.
  • Das Ergebnis des neuen gefüllten Polygons kann ebenfalls eine Liste mit mehreren Polygonen sein.
  • Wir wollen das Ergebnis in einem neuen BasicFeature mit veränderter Geometrie speichern.
  • Wir müssen eine Fallunterscheidung vornehmen, da manche Geometrien mit ‚getExteriorRing‘ keine geschlossenen Linien zum Ausfüllen zurückliefern. (ein Bug?) In diesem Fall übernehmen wir die alte Geometrie.
  • Da das Ergebnis au mehreren Geometrien bestehen kann, vereinigen wir diese, bevor wir die neue Geometrie hinzufügen.

Beim „Biodiversitäts-Calc-Tool“ wird auf die FeatureCollection zusätzlich die Methode ‚eliminateEachOtherContainingParts()‘ ausgeführt, die dafür sorgt, dass die „Ausstanzungen“ wieder vorgenommen werden, die für andere Nutzflächen gemacht wurden. Denn wir wollen nur die Aussatanzungen rückgängig machen, die durch Landschaftselemente entstanden sind, nicht durch andere Nutzflächen. (Ja, es werden dabei „Löcher“ in den Nutzflächen wie „Löcher“ von Landschaftselementen behandelt, da davon ausgegangen wird, dass diese nicht vorkommen.)

Punkt zu Kreis und Linie zu Fläche

Wollen wir einem Element, das nur als Punkt gespeichert ist, als Fläche auffassen, so benötigen wir nur den Durchmesser und puffern den Punkt mit dem halben Durchmesser. Das ist z.B. bei Bäumen günstig.

Wollen wir einer Linie eine Breite hinzufügen und kennen die durchschnittliche Breite, so können wir dies ebenfalls durch Puffern umsetzen. Dies kann z.B. für Flüsse genutzt werden.

Differenz

Java |
---------- |
geomResult = geom1.difference(geom2);

Symmetrische Differenz

Symmetrische Differenz |
---------- |
geomResult = geom1.symDifference(geom2);


Related

Wiki: Inhalt

Auth0 Logo