Wählen Sie OpenLayers oder Leaflet? [geschlossen]

93

Ich habe mit einem meiner Kollegen über OpenLayers v / s Leaflet diskutiert. Ich habe darauf hingewiesen, dass OpenLayers eine viel bessere API ist, wenn wir ein Projekt erstellen möchten, bei dem Sie eine direkte Verbindung zum Geoserver und PostGIS benötigen.

Dann fand ich Open Data Kit , das ziemlich neu aussieht, aber die Konnektivitätsmerkmale mit dem Geoserver und PostGIS aufweist.

Meine Projektdetails lauten also wie folgt:

  1. Verwenden Sie die Kartenschnittstelle, um Feature-Informationen abzurufen
  2. Erstellen Sie ein benutzerdefiniertes Tool, das dem Benutzer mitteilt, wo er auf die Karte klickt, und dann die Klimadaten aus dem Raster abruft (das von einem Py-Skript auf dem Server verarbeitet wird).
  3. Ermöglicht dem Benutzer das Hochladen von Excel, das an das Py-Skript gesendet wird, das ein GeoJSON zurückgibt, das Vektor-Features auf der Karte erstellt
  4. Ermöglichen Sie dem Benutzer das Erstellen von Vektorpolygonen, mit denen die Features, mit denen er sich überschneidet, aus der WFS-Ebene abgerufen werden.
  5. Ruft die Ebene aus dem PostGIS-Datenspeicher auf GeoServer ab und zeigt die Ebenen auf der Karte an.

Jetzt bin ich verwirrt, was besser ist und warum die Verwendung von OpenLayers über Leaflet sinnvoller ist oder nicht.

Sam007
quelle
1
Kommt auf das Projekt an.
CaptDragon
1
ein. Verbessern Sie Ihre Frage, indem Sie weitere Details zum Projekt angeben. b. Sie sprechen von einer direkten Verbindung zur Datenbank (Postgis) für die Benutzer, sind Sie sicher?
Pablo
Entschuldigung, aktualisierte meine Projektdetails
Sam007
Im Allgemeinen bevorzuge ich Leaflet, da dies zu kürzeren und besser lesbaren .js-Dateien führt. Aber OL kann Dinge tun, die Leaflet nicht kann, weil Sie tieferen und detaillierteren Zugriff haben - also stimme ich zu. Es kommt auf das Projekt an, aber 1 Stimme für Leaflet von mir.
MartinHvidberg

Antworten:

87

Ich habe sowohl OpenLayers als auch Leaflet in meinen Apps verwendet. In diesem Forum und auf planet-internet wurde so viel über dieses Thema diskutiert. Sie fallen normalerweise in zwei Lager - Funktionen und Flexibilität von OpenLayers im Vergleich zur Einfachheit von Leaflet. Es würde mich nicht wundern, wenn jemand eine "OpenLeaf" -Initiative ins Leben rufen würde, die bald das Beste aus beiden Welten heiratet!

Ich fand, dass Leaflet sehr einfach zu verwenden ist, eine kleine Größe von 64K im Vergleich zu über 700K Openlayern, und dass Sie in wenigen Schritten Apps erstellen können, die die Frische und die Aufmerksamkeit der heutigen Web- und mobilen GIS-Apps haben. Ihr Stack - GeoServer, PostGIS usw. - ist ein Standardstack, sodass OpenLayers oder Leaflet problemlos integriert werden können.

Trotzdem würde ich aus den folgenden Gründen immer noch mit OpenLayers arbeiten

  1. Es gibt nur eine TONNE Material um OpenLayers. Es ist viel reifer als Leaflet.
  2. Schauen Sie sich den Vergleich zu Commits und Benutzern an .
  3. OpenLayers, GeoServer, PostGIS Stack hat sich in der FOSS-Welt so bewährt, dass Sie einen soliden Weg beschreiten.
  4. OpenLayers hat ein bisschen mehr Funktionen in Map Controls .
  5. Während es ein bisschen mehr Arbeit ist, Übergänge und visuelle Effekte zu erstellen, kann es in OpenLayers gemacht werden.
Ramesh Elaiyavalli
quelle
1
Was ist auch mit Mobilgeräten? Welches ist besser geeignet?
Sam007,
1
Ja. Ich baue derzeit mobile Apps mit OpenLayers und SenchaTouch. Auf Openlayers werden zahlreiche mobile Karten-Apps ausgeführt. Hier einige Beispiele: openlayers.org/dev/examples/?q=mobile .
Ramesh Elaiyavalli
28

Faltblatt den ganzen Weg. Ich denke, Leaflet ist der nächste Schritt in der Entwicklung der auf Open Source Kacheln basierenden Browser-Clients. Ka-Map -> OpenLayers -> Leaflet.

Die Gebrauchsanweisung ist einfach zu bedienen und hält genau das, was auf der Dose steht. OpenLayers ist aufgebläht, weil es versucht, für alle Menschen alles zu sein. Leaflet erledigt die 20% der Dinge, die in 80% der Fälle benötigt werden.

ChrisInCambo
quelle
14
Es ist also nicht nur "Leaflet all-way", sondern "Leaflet, wenn Sie keine der Funktionen benötigen, die darin fehlen". Ich bin damit einverstanden, dass die Verwendung von Leaflet viel einfacher ist, aber wenn Sie etwas tun müssen, das nicht so häufig vorkommt, müssen Sie sich für OL entscheiden.
Juan,
1
In der Broschüre fehlen viele Funktionen. Leaflet eignet sich nur für sehr einfache Karten, aber wie bereits von Ramesh Elaiyavalli Ol-3 erklärt, ist es am besten, die Größe zu reduzieren, indem Sie Features mit benutzerdefinierten Funktionen auswählen.
Abhijit Gujar
18

Obwohl ich Leaflet in meiner webGIS-Anwendung verwendet habe, hat OpenLayers viel mehr Vorteile gegenüber Leaflet. Wenn Sie beispielsweise Ihre Anwendung auf mobilen Geräten verwenden möchten, ist OpenLayers vorerst ein Muss.

Es gibt viele Ressourcen, die mit OpenLayers zu tun haben. Ich denke jedoch, dass das Entwickeln von Anwendungen mit Leaflet einfacher ist als mit OpenLayers (es ist einfacher, einen Code zu lesen und die Struktur zu verstehen). Wenn Sie zeitlich begrenzt sind und ein wenig Erfahrung mit Javascript haben, ist die Verwendung von Leaflet möglicherweise die bessere Lösung, um dies schneller zu erledigen. Oder wenn Sie eine sehr einfache Anwendung entwickeln möchten, lässt sich Leaflet zunächst viel einfacher anpassen.

Aber nachdem ich eine Anwendung mit Leaflet entwickelt habe, sage ich jetzt, ich wünschte, ich hätte OpenLayers am Anfang verwendet. Denn wenn Ihre Anwendung komplex wird (wie das Aufrufen komplexer Ebenen aus einer Datenbank, die Entwicklung einer robusten mobilen Anwendung usw.), schränkt Leaflet Ihre Fähigkeiten ein. Daher denke ich, dass es sich irgendwann lohnen wird, ein wenig mehr Zeit zu investieren, um die Struktur von OpenLayers in der Lernphase zu verstehen und zu lernen.

Da die Projektdetails berücksichtigt werden;

Verwenden Sie die Kartenschnittstelle, um Feature-Informationen abzurufen:

Sowohl Leaflet als auch OpenLayers können das perfekt. Hier geht es darum, die Koordinaten des Klickereignisses abzurufen und eine Anfrage an den Server zu senden. Der Anforderungslink ist für beide Anwendungen gleich.

Erstellen Sie ein benutzerdefiniertes Tool, das dem Benutzer mitteilt, wo er auf die Karte klickt, und dann die Klimadaten aus dem Raster abruft (das von einem Py-Skript auf dem Server verarbeitet wird):

Das habe ich selbst im Leaflet erreicht (ich habe übrigens auch die Klimadaten genannt). Ich habe die Rasterdaten nicht von einem Server abgerufen, aber hier geht es darum, einen Anforderungslink zu erstellen, der für beide Anwendungen einfach ist. Wenn Sie jedoch zu diesem Zeitpunkt ein Polygon auswählen möchten, ist es etwas schwierig, dieses zu erreichen.

Ermöglicht dem Benutzer das Hochladen von Excel, das an das Py-Skript gesendet wird, das ein GeoJSON zurückgibt, das Vektor-Features auf der Karte erstellt:

Etwa das gleiche Arbeitsgebiet für Leaflet und OpenLayers. Ich kann nicht sagen, welches besser ist.

Ermöglichen Sie dem Benutzer das Erstellen von Vektorpolygonen, mit denen die Features, die sie überschneiden, aus der WFS-Ebene abgerufen werden:

Ich habe keine Ahnung, was OpenLayers-Bearbeitungsmöglichkeiten angeht, aber Leaflet hat ein Plugin namens Leaflet Draw, das einfach zu verwenden ist und die Zeichnungen (auf der Javascript-Seite) bearbeitet, nachdem das Zeichnen abgeschlossen ist. Außerdem bietet Leaflet eine WFS-T-Unterstützung, wenn Sie die räumlichen Daten auf dem WFS-Server bearbeiten möchten. OpenLayers könnte besser sein, ich weiß es nicht.

Ruft die Ebene aus dem PostGIS-Datenspeicher auf GeoServer ab und zeigt die Ebenen auf der Karte an:

OpenLayers ist definitiv besser für diesen Job, da es einfacher ist, einen PostGIS-Server zu verbinden.

Übrigens gibt es eine Anwendungssuite namens OpenGeo Suite , die OpenLayers, GeoServer und PostGIS enthält. Damit werden alle Probleme gelöst, die ein webbasierter GIS-Anwendungsentwickler hat.

mkturkeri
quelle
Schöne ausführliche Antwort!
Devdatta Tengshe
Wie stehen Sie drei Jahre später zu Leaflet & Mobilgeräten? Irgendeine Verbesserung?
Mawg
10

Es gibt einen guten Vergleich zwischen den beiden Frameworks in dieser Präsentation :

Flugblatt gegen OpenLayers

Und ein anderer Artikel hat auch eine tolle Zusammenfassung:

Kunden fragen uns häufig: „Welche ist die beste clientseitige JavaScript-Zuordnungsbibliothek, die zum Erstellen einer modernen Web-App mit der Map Suite WebAPI Edition verwendet werden kann?“ Wie bei vielen Aufgaben in der Softwareentwicklung ist die Antwort nicht immer klar. Die Antwort hängt von Ihren Anforderungen und Entwicklungspräferenzen ab. Da beide Frameworks gut dokumentiert sind und auf Mobilgeräten einwandfrei funktionieren, stellen wir in der Regel die folgenden Fragen, um unseren Kunden bei der richtigen Entscheidung zu helfen.

Wie einfach ist die Zuordnung eines Teils der App, die Sie erstellen?

Je einfacher die Zuordnungsanforderungen sind, desto mehr tendieren wir dazu, Leaflet zu verwenden. Leaflet erledigt die häufigsten Kartierungsaufgaben wie das Aufwenden von Grundkartenkacheln, Schwenken und Zoomen auf fantastische Weise. Die API ist einfach zu verstehen und zu verwenden. Sobald Sie jedoch über die üblichen Aufgaben hinausgehen, müssen Sie Leaflet Plugins verwenden, um die Dinge zu komplizieren. Möglicherweise gibt es Funktionen, die Sie suchen und die leider nicht vorhanden sind.

Wenn Sie eine funktionsreiche Anwendung mit vielen Funktionen haben, bevorzugen wir OpenLayers 3. OpenLayers 3 verfügt über eine größere und komplexere API, mit der Sie alle gängigen Zuordnungsfunktionen ausführen können, die Leaflet bietet, und vieles mehr. Wenn Ihre Anwendung beispielsweise Anforderungen für die Kartenprojektion enthält, können Sie diese mit OpenLayers 3 einfacher erfüllen als mit Leaflet. Natürlich bringt eine robustere API eine steilere Lernkurve mit sich. Denken Sie also daran, wenn Sie Schätzungen an Ihre Projektbeteiligten senden.

Wie viel JavaScript-Code möchten Sie schreiben?

Da Leaflet eine höhere API-Ebene als OpenLayers 3 ist, ist normalerweise weniger JavaScript-Code erforderlich, um es zum Laufen zu bringen. Wenn Sie jedoch von der Standardfunktionalität in Leaflet abweichen möchten, werden Sie wahrscheinlich viel Code schreiben, es sei denn, es gibt ein Plug-In, das genau Ihren Anforderungen entspricht. Andererseits ist OpenLayers 3 eine niedrigere API-Ebene, für die mehr JavaScript-Code zum Initialisieren und Einrichten der Karte erforderlich ist. Dies kann praktisch sein, wenn Sie individuelle und komplexe Anforderungen haben, da die API eine bessere Kontrolle über die Karte und Ihre Daten ermöglicht.

Zusammenfassung

Zum Schluss gibt es Zeiten, in denen es am besten ist, Leaflet zu verwenden, und Zeiten, in denen OpenLayers 3 gewinnt. Wenn Ihre Zuordnungsanforderungen einfach sind, sollten Sie zuerst die Broschüre lesen. Wenn Sie jedoch eine anpassbarere Zuordnungsbibliothek suchen und sich mit der JavaScript-Entwicklung nicht beschweren möchten, greifen Sie zu OpenLayers 3.

Da beide Bibliotheken ihre Stärken haben, haben wir Codebeispiele für Leaflet und OpenLayers 3 in die Map Suite WebAPI Edition aufgenommen, die über das Product Center heruntergeladen oder im ThinkGeo Wiki angezeigt werden können. Diese Beispiele sind nützliche Ressourcen für die Entscheidung, welche clientseitige Javascript-Zuordnungsbibliothek für Ihre App verwendet werden soll, da Sie die unterschiedlichen Benutzererfahrungen und Codierungsanforderungen zwischen den beiden Bibliotheken aus erster Hand sehen können.

Von http://blog.thinkgeo.com/2015/09/08/leaflet-vs-openlayers-3-which-is-the-better-client-side-javascript-mapping-library/

Simon East
quelle
5

Ich habe gerade diese Entscheidung für mein neues mobiles Projekt getroffen und der klare Gewinner ist OpenLayers. Zum jetzigen Zeitpunkt war das Flugblatt auf Mobilgeräten eher träge. Die Übergänge für das Schwenken / Zoomen fühlten sich nicht glatt an und waren zeitweise desorientiert. Kurz bevor ich einheimisch wurde, habe ich OpenLayers ausprobiert und die Erfahrung ist viel besser. Immer noch nicht so gut wie einheimisch, aber definitiv brauchbar und eine echte Option.

Christian Fritz
quelle
1
Interessant. Ich hätte erwartet, dass Leaflet auf einem mobilen Gerät leichter und flüssiger ist. Vielen Dank für das Teilen dieser Erfahrung.
LarsH
@Christian Fritz - war deine Erfahrung mit OL3 oder OL2?
sfletche
2
@sfletche der Vergleich war zwischen OL3 und Merkblatt 0.7.3
Christian Fritz
Wie stehen Sie drei Jahre später zu Leaflet & Mobilgeräten? Irgendeine Verbesserung?
Mawg
ja definitiv. Wir verwenden Flugblätter in der Produktion und sehen keine Probleme auf dem Handy.
Christian Fritz
3

Ich würde sagen, überprüfen Sie die API-Dokumentation für beide. Mir scheint, dass es OpenLayerseine Vielzahl von Funktionen bietet, die Entwicklungs- / Debugging-Zeit ist jedoch länger.

Leafletist sexy und viel unkomplizierter als die OL, aber wenn du viel mit deiner Map machen willst, brauchst du vielleicht eines Tages eine Funktion, die noch nicht implementiert ist Leaflet!

Ich empfehle dringend, sich APIs anzuschauen! OpenLayers & Faltblatt

Auch müssen Sie möglicherweise, dass die aktuelle stabile Version zu prüfen , für Leaflet ist , 0.5.1aber es ist 2.12für Openlayers.

PS Wenn ich eine mobile Anwendung entwickeln möchte, denke ich, dass ich mich entscheiden könnte Leaflet.

Mahdi
quelle
3

Es gibt ein grundlegendes Tutorial, das die APIs von OpenLayers 3 und Leaflet vergleicht, indem Sie in beiden das Gleiche erstellen. Es wurde von Astun Technology geschrieben und die Aufgaben des Tutorials lauten:

  • Grundkarte mit OSM-Kacheln
  • OS-GB-Karte mit Ordnance Survey-Kacheln
  • GeoJSON-Ebene mit Markern
    • Info für GeoJSON Layer
  • WMS-Schicht
    • Info für WMS-Layer

Hier ist der Link: https://astuntechnology.github.io/osgis-ol3-leaflet/index.html

Crantok
quelle
Scrollen mit der Leertaste ist übrigens kaputt
bugmenot123
3

Es hängt davon ab, was Sie versuchen zu tun. Leaflet ist für 80% der Webkartenprojekte einfacher und schneller.

So wie Sie kein Raumschiff benötigen, um durch Ihre Nachbarschaft zu fahren, fand ich OpenLayers die meiste Zeit viel zu komplex, um wirklich einfache Dinge zu tun, insbesondere ab Version 3.

Zum Beispiel benötigt das Erstellen einer Ebenenauswahl in Leaflet möglicherweise 5-6 Codezeilen, während Sie sie in OpenLayers 4 von Grund auf neu erstellen müssen. Sie haben tolle Werkzeuge, um dies zu tun, aber die meiste Zeit möchten Sie keinen benutzerdefinierten Ebenen-Selektor, nur einen, der gut funktioniert.

Ein weiterer wichtiger Punkt ist, dass sich die meisten Informationen, Tutorials und Debatten im Internet auf OpenLayers 2 beziehen. Sie sind veraltet, da Version 3 nicht mit Version 2 kompatibel ist. Und wir sind jetzt bei Version 4. Version 2 hatte eine Menge einfacher Dinge wie Ebenenauswahl, Popups usw. zusammen mit komplexeren Funktionen; aber aus irgendeinem Grund haben sie einfach solche Dinge gelöscht, um sich zu einem komplexen und sehr mächtigen System zu entwickeln. Darüber hinaus gibt es jetzt viel mehr Informationen zu Leaflet als 2012 und es ist eine ausgereiftere Technologie.

Fragen Sie sich abschließend, ob Sie ein Auto oder ein Raumschiff benötigen. Sie werden nicht mit einem Auto fliegen, aber das Fahren eines Raumschiffs zum Einkaufen kann sehr kompliziert sein.

Carlos Sarille
quelle