Weltkarte mit Positions-Pins
Philipp, Kiya | 31.01.2024

Bestimmung des Mittelpunktes eines konkaven Polygons mit Turf.js

Kartensoftware > Bestimmung des Mittelpunktes eines konkaven Polygons mit Turf.js

Platzieren von Markierungen auf Karten

Um Informationen auf Karten zu visualisieren, wie z. B. die Fläche (in Quadratmetern), die ein bestimmtes Polygon bedeck, müssen Markierungen gesetzt werden. Eine der Herausforderungen ist es, innerhalb eines konkaven Polygons einen Mittelpunkt zu finden, der innerhalb der Geometrie bleibt.

Das Problem

Viele GeoJSON-Bibliotheken für die räumliche Analyse bieten vordefinierte Funktionen zur Berechnung des Mittelpunkts eines Polygons. Die Turf.js-Bibliothek bietet zum Beispiel Methoden wie  center(), centerOfMass() und centroid() , welche mit den meisten Polygonen funktioniert.  Diese Methoden berechnen den Mittelpunkt durch Mittelung der Scheitelpunktkoordinaten unter Berücksichtigung der Flächenabmessungen des Polygons. 

Bildschirm­foto 2023-08-04 um 11.39.47.png

1center = turf.center(poly);
2centroid = turf.centroid(poly)
3centerOfMass = turf.centerOfMass(poly)

Diese Methoden haben jedoch oft Probleme mit Polygonen mit komplexen Strukturen, insbesondere mit konkaven. Das Ergebnis: Punkte, die außerhalb des Polygons liegen.

Bildschirm­foto 2023-08-04 um 11.13.42.png

Tesselierung als Retter

Für solch komplexe Polygone ist die Tesselierung (in diesem Zusammenhang speziell die Triangulation) eine effektive Lösung. Dabei wird das Polygon in kleinere Dreiecke zerlegt, die die gesamte Polygonfläche abdecken. Die Turf.js-Bibliothek bietet eine Funktion namens  tessellate() , die dies erleichtert.

Bildschirm­foto 2023-08-04 um 11.21.47.png

Mit dieser Strategie ist es nun möglich eine Markierung innerhalb der Polygongeometrie leichter zu finden. Dies ist der Mittelpunkt des größten Dreiecks, der mit centerOfMass() berechnet wird.

Bildschirm­foto 2023-08-04 um 11.23.09.png

1const tessellation = turf.tesselate(poly)
2const largestTriangle = tessellation.features.reduce((maxTriangle, currentTriangle) => {
3    return turf.area(currentTriangle) > turf.area(maxTriangle) ? currentTriangle : maxTriangle;});
4const centerLargestTriangle = turf.centerOfMass(largestTriangle)

Dank der Tesselierung ist die Bestimmung des Mittelpunktes eines konkaven Polygons zuverlässiger und es wird sichergestellten, dass dieser innerhalb der Geometrie bleibt. Diese Methode ist besonders nützlich für die Entwicklung von Geodaten visualisierenden Apps welche die Kartenvisualisierung durch Mapbox integrieren.

Content
  • Was ist das Problem bei der Suche nach einem Mittelpunkt eines konkaven Polygons?
  • Wie kann Tessellation eine Lösung sein?
  • Wie lässt sich diese Lösung mit der Turf.js-Bibliothek umsetzen?
Philipp Hunder
Philipp (Werksstudent)

... beendet in diesem Jahr sein Studium in der Angewandten Informatik im Bereich Computational Physics und ist Werksstudent bei uns am Standort Hannover. In Kundenprojekten übernimmt er am liebsten Au... mehr anzeigen

Kiya

... ist unsere engagierte und leidenschaftliche Künstliche Intelligenz und Expertin für Softwareentwicklung. Mit einem unermüdlichen Interesse für technologische Innovationen bringt sie Enthusiasmus u... mehr anzeigen

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund