Vorteile von WFS gegenüber GeoJSON / KML?

8

Ich plane, eine Online-Karte mit Openlayern (2 oder 3) oder einer Broschüre zu erstellen. Ich muss einige Punkte / Markierungen (~ 30.000), Polygone (~ 500) und Linien auf einer OSM-Karte in mehreren Ebenen anzeigen. Diese Punkte und Polygone sollten Metadaten (mindestens eine ID) enthalten, um dem Benutzer zusätzliche Informationen zum Überfahren, Klicken oder Berühren von Ereignissen anzuzeigen. Jetzt suche ich nach dem besten Weg, diese Daten an den Client zu senden. Der gesamte Bereich, in dem diese Funktionen platziert sind, ist in mehrere Abschnitte unterteilt. In den meisten Fällen arbeitet ein Benutzer in einem Abschnitt (Lesen von Informationen - Schreiben ist ein sehr seltener Fall, der derzeit nicht implementiert wird). Diese Abschnitte sind jedoch nebeneinander angeordnet und meistens sind mindestens 3 Abschnitte sichtbar. Die Punkte können auch in einer höheren Zoomstufe gruppiert oder ausgeblendet werden.

Ich habe von WFS gehört, kann aber die Vorteile gegenüber GeoJSON oder KML nicht erkennen. Wäre es möglich, die Features innerhalb des Begrenzungsrahmens der aktuellen Ansicht mit WFS abzurufen? Wir haben eine MSSQL-Datenbank und einen Webservice zwischen der Datenbank und der Webanwendung. Wenn dies keine wirklichen Vorteile bietet, möchten wir keinen GeoServer und keine Postgres-Datenbank einrichten. Es wäre auch kein Problem, dem Webservice mitzuteilen: Geben Sie mir alle Funktionen der Schicht L zwischen X1, Y1 und X2, Y2 (als GeoJSON, KML oder was auch immer). Was sind die Vorteile von WFS? Wie würden Sie vorgehen oder welche weiteren Informationen sind für diese Entscheidung relevant?

stofl
quelle
3
Sie haben ein Problem beim Anzeigen der 30.000 Funktionen auf der Karte. Ich bekomme Leistungsprobleme um 1k. Sie müssen eine Clusterstrategie oder etwas anderes verwenden.
CaptDragon
Ja. Und natürlich sind 30.000 Funktionen auch für den Benutzer nutzlos.
Stofl
What are the advantages of WFS?Es ist eine Standardschnittstelle (Service), die Sie erhalten können all features of layer L between X1,Y1 and X2,Y2 (as GeoJSON, KML or whatever).
nmtoken

Antworten:

8

Beachten Sie, dass WFS bereits ein Dienst ist, der sein Datenformat zurückgibt (Mischung aus OGC-Standards). GeoJSON und KML sind nur ein Datenformat. Sie müssen den Dienst erstellen, um die Daten zurückzugeben.

In WFS sind daher bereits erweiterte Filterfunktionen wie zeitliche Filter, räumliche Filter (Schnittpunkte, Berührungen, Überlappungen ...) sowie logische und Vergleichsoperatoren ... enthalten. Ja, Sie können festlegen, dass die Ergebnisse für eine BBox neu geladen werden sollen, und der Benutzer navigiert durch die Karte. Dies ist alles out of the box . Dann ist es natürlich ein weit verbreiteter Standard, den viele Server, Clients und Anwendungen lesen können, indem sie diese Daten wie gesagt automatisch abfragen können.

Die Frage, die Sie sich stellen sollten, ist, ob Sie diese Daten anderen Clients, Anwendungen und Servern zugänglich machen möchten. Wird Ihr Dienst "Gib mir alle Funktionen der Schicht L zwischen X1, Y1 und X2, Y2" ausreichen? Ist das alles was du brauchst? Wenn es alles ist, was Sie brauchen, dann gibt es keinen Grund, sich für WFS zu entscheiden. Die GeoJSON- oder KML-Option wird wahrscheinlich ohne den gesamten Overhead schneller sein. Wenn Sie jedoch im zukünftigen SOA-Stil eine erweiterte Filterung durchführen möchten, ist WFS der richtige Weg.

CaptDragon
quelle
Vielen Dank. Es wird keine Clients, Apps und Server mehr geben. Und das "Gib mir alles ..." reicht aus, solange ich über JavaScript auf die Daten zugreifen kann, um sie ändern zu können (ändern Sie das Symbol, wenn sich der Status eines Features ändert, markieren Sie ausgewählte Features, ... )
stofl
5

Zunächst empfehle ich Ihnen, die Spezifikation zu lesen . Der größte Vorteil von WFS ist, dass es eine offizielle und standardisierte Möglichkeit ist, auf Vektordaten zuzugreifen. Das heißt, wenn Sie WFS verwenden, müssen Sie das Rad nicht neu erfinden (z. B. was sollte passieren, wenn zwei Personen gleichzeitig dieselbe Funktion bearbeiten?). Es ist auch viel einfacher, Daten über WFS gemeinsam zu nutzen, als GeoJSON oder KML zu verwenden (auch hier müssen Sie keine Funktion schreiben, die den angeforderten Datenbenutzer zurückgibt, da dieser bereits Teil der WFS-Spezifikation ist).

Wenn Sie Ebenen für den schreibgeschützten Zugriff bereitstellen möchten, warum entscheiden Sie sich nicht für WMS? Es sollte für Ihre Zwecke völlig in Ordnung sein.

Wenn Sie weitere Fragen haben, können Sie diese gerne stellen. Ich bin gerade dabei, dieses Dilemma selbst zu entscheiden, und es ist immer angenehm, die Meinung anderer zu lesen.

Michal Zimmermann
quelle
Wir haben bereits einen Windows-Client mit einer Karte und viele Vorgänge sind bereits in gespeicherten Prozeduren in der Datenbank implementiert. "WMS": Ich müsste später mit JavaScript auf die Funktionen zugreifen (Symbole je nach Status ändern, Hervorheben). Würde das mit einer WMS-Vektorebene funktionieren?
Stofl
2
Denken Sie daran, WMS ist KEINE Vektorebene. Es werden statische Rasterbilder vom Server gespeichert, die nach dem Laden nicht geändert werden können. Sie können Bilder beim Klicken auf eine Schaltfläche oder beim Ändern des Kontrollkästchens erneut anfordern und sie mit einem anderen Stil laden.
Michal Zimmermann
WMS kann SVG-Bilder zurückgeben. Das wäre eine Vektorschicht in meinen Augen. Und diese SVG-Bilder sind natürlich zugänglich und bearbeitbar - aber ich vermute nur auf einer sehr niedrigen Ebene ...
stofl
4

WFS bietet Ihrem Client (OpenLayers) die Möglichkeit, seine Anrufe mit verschiedenen Strategien für die WFS-Anrufe auszuführen :

BBOX: reads new features when the viewport invalidates some bounds.
Cluster: for vector feature clustering.
Filter: for limiting features that get added to a layer by evaluating a filter.  The strategy maintains a cache of all features until removeFeatures is called on the layer
Fixed: requests features once and never requests new data
Paging: vector feature paging
Refresh: refreshes the layer.  By default the strategy waits for a call to refresh before refreshing.  By configuring the strategy with the interval option, refreshing can take place automatically
Save: commits newly created or modified features.  By default the strategy waits for a call to save before persisting changes.  By configuring the strategy with the auto option, changes can be saved automatically

Die BBOX-Strategie wird häufig verwendet. Die Vektorebene fordert nur Features von WFS an, die sich im Ansichtsfenster befinden. Wenn das Ansichtsfenster geändert wird, werden zusätzliche Features automatisch transparent geladen.

Wie CaptDragon und ich in Ihrer vorherigen Frage erwähnt haben, wird die Anzahl der Funktionen OpenLayers höchstwahrscheinlich töten oder die Benutzererfahrung unhaltbar machen.

Sie können Ihre Daten in eine MSSQL-Datenbank einfügen und dann eine serverseitige Routine schreiben, um Daten über Ajax-Aufrufe zurückzugeben und die Ebenen selbst zu aktualisieren. Ihr Client stellt die Viewport-Grenzen im Ajax-Aufruf bereit. Die Datenbank muss räumlich bekannt sein, damit dies funktioniert.

WMS würde Kacheln aus derselben Datenquelle generieren. Der Vorteil ist eine sehr schnelle Implementierung, ein serverseitiges Design und kein Herunterladen von Daten zur Anzeige auf den Client, mit Ausnahme der Kacheln. Sie können WFS auch mit WMS verwenden, um Funktionsinformationen abzurufen, wenn Benutzer auf einen Punkt klicken.

In all diesen Szenarien wäre es auch möglich, die Daten aus einer Formdatei anstelle einer Datenbank bereitzustellen.

Mark Cupitt
quelle
Können Sie mir kurz erklären, wie das Wort "WFS mit WMS verwenden" lauten würde? Würden die von WMS zurückgegebenen Kacheln die Punkte kennen oder was wäre der Vorteil der Verwendung von WMS hier?
Stofl
Sie müssen sich wirklich hinsetzen und alle OpenLayers-Beispiele durchgehen, damit Sie verstehen, was es kann. Insbesondere WFS-Demo hier!
Mark Cupitt
Ich habe dieses Beispiel gesehen und habe es mir jetzt genauer angesehen. Das einzige, was das OpenLayers WFS-Steuerelement in dieser Demo verwendet, ist, die URL von der WMS-Ebene abzurufen. Daher kann ich den Nutzen von WMS hier immer noch nicht erkennen.
Stofl