6 Stimmen

Überprüfen der Größe des mit Leaflet l.draw.polyline gezeichneten Polygons.

Ich habe eine Website mit Leaflet erstellt, um Polygone auf einer OSM-Karte zu zeichnen.

Jetzt möchte ich die Größe des Polygons überprüfen, da das Polygon eine definierte Größe von zum Beispiel 5 Quadratkilometern nicht überschreiten darf.

Hat jemand eine gute Idee, um die Größe des gezeichneten Polygons zu überprüfen?

9voto

Rami Punkte 91

Ich habe leaflet.draw verwendet (https://github.com/Leaflet/Leaflet.draw), um ein Polygon zu zeichnen.

Und es hat die geodesicArea Funktion. Beispiel in 'draw:created'.

map.on('draw:created', function (e) {
    var type = e.layerType,
        layer = e.layer;
        if (type === 'polygon') 
        {
            var area = L.GeometryUtil.geodesicArea(layer.getLatLngs())
            ...

1voto

Patrick D Punkte 6469

Ich kenne keine Leaflet-Plugins, die das für Sie erreichen können. Der Algorithmus, um dies zu tun, ist jedoch nicht besonders komplex. Überprüfen Sie diese Website: http://www.mathopenref.com/coordpolygonarea2.html, die den Algorithmus enthält und viele visuelle Beispiele, wie der Algorithmus tatsächlich funktioniert.

function polygonArea(X, Y, numPoints) 
{ 
  area = 0;         // Akkumuliert Fläche in der Schleife
  j = numPoints-1;  // Der letzte Vertex ist der 'vorherige' zum ersten

  for (i=0; i

``

Um diesen Algorithmus mit Leaflet-Polygonen zu verwenden, sollten Sie über das Polygon polygon.getLatLngs() iterieren, um alle Breiten-/Längengrade zu erhalten. Legen Sie sie in zwei separate Arrays - eines für X-Koordinaten und eines für Y-Koordinaten. Verwenden Sie diese als Parameter für die obige Funktion, und für numPoints geben Sie polygon.getLatLngs().length.

Wie auf der Webseite steht, spielt es keine Rolle, wo auf dem Polygonpfad dies beginnt. Wenn Sie jedoch in einer gegen den Uhrzeigersinn geordneten Reihenfolge beginnen, wird Ihr Ergebnis negativ sein. Sie können alle Fälle behandeln, indem Sie einfach den Betrag von dem erhalten, was diese Funktion zurückgibt.

``

1voto

Ben Ayoub Punkte 31

Sie können GeometryUtil.geodesicArea() verwenden, um den Flächeninhalt wie folgt zu erhalten:

let area = L.GeometryUtil.geodesicArea(layer.getLatLngs()[0]);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X