<\/HEAD>
Viele Organisationen veröffentlichen OGC WFS-Dienste als eine Option zur Datenbereitstellung, entweder für die Allgemeinheit oder für ein eingeschränktes Publikum. Oft sind diese Dienste jedoch für großflächige Kartierungen gedacht, beispielsweise innerhalb einer einzelnen Gemeinde, und ein Massendownload auf nationaler Ebene wird nicht unterstützt – entweder ist auf dem Server eine maximale Feature-Sammlung pro Anfrage festgelegt, oder die Antwort-Paginierung wird nicht unterstützt, sodass ein Standard-Client nicht den gesamten Datensatz liefern kann. Manchmal, obwohl diese Einschränkungen nicht vorhanden sind, übersteigt das Zusammenstellen und Liefern einer Anfrage für eine große Feature-Sammlung die Kapazität des Servers oder der Netzwerkeinstellungen (absichtlich), oder die Client-App unterstützt keine Paginierung (offen gesagt, WFS 2.0.0 Antwort-Paginierung wird in einer zukünftigen Version in den Kern von ArcGIS Pro integriert; die Data Interoperability-Erweiterung unterstützt bereits WFS 2.0.0 Paginierung, wenn der Server next\/previous URLs bereitstellt).<\/P>
<\/P>
Dieser Blog handelt davon, ArcGIS Data Interoperability<\/STRONG> zu verwenden, um diese Einschränkungen zu umgehen und wiederholbare Massendownloads von WFS-Daten<\/STRONG> in beliebigem Maßstab zu erreichen. Sie benötigen solide Data Interoperability- (oder FME-) Kenntnisse, um diesen Workflow umzusetzen, oder müssen bereit sein, aus dem Inhalt des Blog-Downloads zu lernen.<\/P><\/P>Jetzt muss ich Ihnen eine Karte zeigen, sonst machen Sie etwas anderes, also präsentiere ich Ihnen das heutige Thema – Norwegen!<\/P><\/P>
<\/P><\/P>Es ist notwendig, ein Beispiel aus der realen Welt zu verwenden, und die Leute bei GeoNorge haben ausgezeichnete öffentliche WFS-Dienste, die es mir erlauben, die Probleme zu zeigen, also ist es Norwegen. Beim Durchstöbern ihrer Seite habe ich mich für einen Straßennetz-Dienst entschieden. So gelangen Sie selbst dorthin und lernen dabei optional ein wenig Norwegisch. Hier ist GeoNorge<\/A>, (verwenden Sie nicht '/en', wenn Ihr Norwegisch gut genug ist) klicken Sie auf Zum Kartenkatalog gehen<\/A>, dann wählen Sie im Auswahlfenster links Typ = Service, Thema = Transport, Verteilungsform = WFS Service und klicken dann bei den verfügbaren Diensten auf ELF Road Transport Network<\/A>. Scrollen Sie nach unten und Sie sehen: Get Capabilities URL: <\/STRONG>https:\/\/wfs.geonorge.no\/skwms1\/wfs.inspire-tn-ro?request=GetCapabilities&service=WFS<\/A>.<\/P><\/DIV>
Wenn Sie OGC-Standards nicht kennen, seien Sie dankbar, das ist unser Job! Die obige URL folgt einem typischen Muster, das zurückgegebene XML-Dokument zeigt an, was der WFS-Dienst kann. Sie wissen doch, dass ich Sie dazu bringen werde, auf die obige URL zu klicken
und<\/STRONG> die Antwort zu inspizieren. Aber bevor wir uns dem aufregenden XML widmen, gehen wir hier abseits der Straße und beginnen das Problem etwas besser zu verstehen.<\/DIV><\/DIV>Hier ist eine Karte von 50 Lebensmittelbetrieben innerhalb von 500 m Fußweg vom Königspalast in Oslo. Ich erkenne ein Muster darin, dass man zum Mittagessen nördlich oder südlich des Palastes gehen muss, was interessant ist – vielleicht liegt es daran, dass man eine Hauptstraße queren muss, die das Gebiet durchschneidet. Aber mein Hauptpunkt ist: Die Innenstadt von Oslo hat viele Straßen entlang derer man gehen kann, während es im Polarkreis – nicht so viele gibt (keine Karte dazu, aber vertrauen Sie mir). Wir brauchen eine Methode, um den WFS-Straßentransportdienst in Abschnitten zu lesen, sodass wir in Städten nicht mehr als das Limit der Dienstantwort anfragen und in Gebieten mit wenigen Straßen keine unnötigen Anfragen stellen. Wir werden eine gekachelte WFS-Lesestrategie entwerfen.<\/STRONG><\/DIV><\/DIV>
<\/DIV><\/DIV>OK jetzt<\/EM> klicken Sie auf die GetCapabilities <\/>URL und suchen Sie nach diesen Dingen:<\/><\/><\/>Wir können nicht<\/> Seiten anfordern:<\/><\/>
<\/>Wir können nur<\/> jeweils 10000<\/> Features erhalten:<\/><\/>
<\/>Wir können Feature-Typen tn-ro:RoadLink<\/> in einer Vielzahl von Koordinatensystemen über ein riesiges Gebiet abrufen:<\/><\/>
<\/>Wir können Features innerhalb eines Bounding Box<\/> (BBOX) anfordern:<\/><\/>
<\/>Jetzt eine Übung. Öffnen Sie die Workbench-App über das Analysis-Menüband (Data Interoperability muss installiert und lizenziert sein) und fügen Sie einen WFS Reader mit diesen Parametern hinzu (GetCapabilities URL, WFS Version 2.0.0, RoadLink Feature-Typ, kein MaxFeatures). Verbinden Sie einen Logger mit dem Reader, es ist nicht nötig etwas zu schreiben.<\/>
Führen Sie den Workspace aus. Es wird diese URL generiert und Sie erhalten einen Download mit 10.000 Features.
Fügen Sie nun die URL in Ihren Browser ein und bearbeiten Sie sie so, dass der Parameter 'resultType=hits<\\/STRONG>' hinzugefügt wird. Dies ist eine spezielle Anfrage zur Zählung der verfügbaren Features im Dienst. Führen Sie die bearbeitete URL in Ihrem Browser aus. Die Antwort sieht etwa so aus:
Beachten Sie die Eigenschaft numberMatched - 1.976.423 Road Link Features sind verfügbar.<\\/STRONG>
Norwegen hat eine Landfläche von ca. 385.000 Quadratkilometern, also durchschnittlich ca. 5 Road Link Features pro Quadratkilometer und im Durchschnitt haben ca. 2.000 Quadratkilometer ca. 10.000 Road Links – das Limit des WFS-Dienstes – ungefähr ein 45 km großes Quadrat. Im Norden des Landes wird es ein viel größeres Gebiet sein müssen um 10.000 Features zu enthalten. Nach wissenschaftlicher Methode habe ich willkürlich eine Zahl gewählt mit der richtigen Größenordnung als Ausgangspunkt für ein Kachel-Schema zum Lesen von WFS-Daten – ein 100 km großes Fischernetz<\\/STRONG>, erstellt mit dem Geoverarbeitungswerkzeug Create Fishnet<\\/STRONG> (Zellen ohne Landüberschneidung werden gelöscht und ich habe mich für die Projektion ETRS 1989 UTM Zone 33N entschieden, was EPSG:25833 in den Dienst-Eigenschaften entspricht):
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
Achten Sie darauf, dass ich einige Felder (XMin,YMin,XMax,YMax,RoadCount) zum Fischernetz hinzugefügt habe und Anfangswerte für die Koordinaten-Grenzfelder gesetzt habe (mithilfe von Python-Snippets – diese sind im Blog-Download enthalten). Diese Grenzen werden als Bounding Box Parameter-Eingaben in WFS-Anfragen verwendet. Nun benötige ich einen Workflow zur Verfeinerung des Fischernetzes so dass Zellen schrittweise unterteilt werden bis weniger als 10.000 Road Link Features darin enthalten sind. Zuerst muss ich die Methodik herausfinden wie man den WFS-Dienst innerhalb eines Bereichs liest....
<br><br>
Wenn Sie Workbench öffnen und BasicGetFeatureWithBBOX.fmw<\\/STRONG> aus dem Blog-Download hineinziehen sehen Sie einen WFS Reader mit den Eigenschaften die ich brauchte um eine GetFeature URL zu inspizieren. Der Workspace sieht so aus:
<br> class="image-13 j-img-centered jive-image" src="https://us.v-cdn.net/6038851/uploads/legacyfs/online/472804_pastedImage_1.png" style="display: block; margin-left: auto; margin-right: auto;" /><\/DIV><\/DIV>Unter dem Reader können Sie sehen, wie ich die GetFeature URL in einem HTTPCaller repliziert habe, aber die BBOX-Werte parametrisiert habe. Ich habe eine Fischernetz-Zell-Ausdehnung verwendet, die die Stadt Trondheim enthält. Das Download-Format ist GML Ich habe das Quick Import Geoverarbeitungswerkzeug (verfügbar mit Data Interoperability) verwendet, um das GML in eine File-Geodatabase zu übersetzen. Hier sind 10.000 Straßenabschnitte rund um Trondheim:<\/DIV><\/DIV><\/DIV>
<\/DIV><\/DIV>Jetzt habe ich die Bausteine eines gekachelten WFS Readers. Und hier ist er! ReadWFSFeatures.fmw<\/STRONG>:<\/DIV><\/DIV>
<\/DIV><\/DIV><\/DIV>Das Spatial ETL Tool liest RoadLink-Features in Fischernetz-Zellen, die durch eine WHERE-Klausel ausgewählt wurden, hier ist der erste Durchlauf, der Features in allen Zellen liest:<\/DIV><\/DIV>
<\/DIV><\/DIV>Ich sehe, dass nicht alle 100km-Zellen Straßen schneiden – die, die Sie im Fischernetz-Layer ausgewählt sehen – daher können sie gelöscht werden. Nun beginnt die Arbeit der Verfeinerung des Fischernetzes.<\/DIV><\/DIV>Der iterative Arbeitsablauf ist folgender (seien Sie sehr vorsichtig!):<\/DIV>Führen Sie ReadWFSFeatures.fmw<\/STRONG> mit einer WHERE<\/STRONG>-Klausel aus, die die kleinste Zellgröße auswählt (anfangs Shape_Length = 400000, dann 200000 wenn diese Zellen erstellt sind, dann 100000 wenn diese in einem nachfolgenden Schritt unten erstellt werden...<\/STRONG>)<\/LI>Fügen Sie die Ausgabe-Feature-Class RoadLink<\/STRONG> Ihrer Karte hinzu<\/LI>Führen Sie RoadCount.py<\/STRONG> im Python-Fenster aus, um RoadCount<\/STRONG> in NO_Fishnet<\/STRONG> zu füllen<\/LI>Wählen Sie NO_Fishnet<\/STRONG>-Features mit RoadCount >= 9000<\/STRONG> aus (unter 10.000, um Straßenbau zu berücksichtigen)<\/LI>Wenn keine NO_Fishnet<\/STRONG>-Features ausgewählt sind, dann BREAK - Sie sind fertig mit der Erstellung des Fischernetzes
<\/STRONG><\/LI>Führen Sie MinimumBoundingFishnet<\/STRONG> aus, um ein separates Fischernetz mit Zellen zu erstellen, die halb so breit / hoch sind wie das vorherige Minimum; es ist wichtig, dass die Auswahl auf NO_Fishnet<\/STRONG> noch aktiv ist<\/LI>Führen Sie Löschen von Features<\/STRONG> auf den ausgewählten NO_Fishnet<\/STRONG>-Zellen aus<\/LI>Führen Sie Anfügen<\/STRONG> aus, um die generierten kleineren Fischernetz-Zellen zu NO_Fishnet<\/STRONG> hinzuzufügen, unter Verwendung der Feldzuordnungsoption.<\/LI>Führen Sie SetExtentAttributes.py<\/STRONG> im Python-Fenster aus, um die Grenzkoordinaten neu zu berechnen<\/LI>Löschen Sie die Feature-Class RoadLink<\/STRONG><\/LI>Kehren Sie zum ersten Schritt zurück<\/LI><\/UL><\/DIV>Die erste Unterteilung der Fischernetz-Zellen in 50km quadratische Features mit MinimumBoundingFishnet<\/STRONG> sieht so aus:<\/DIV><\/DIV>
<\/DIV><\/DIV>Nachdem der Verfeinerungsprozess des Fischernetzes so lange durchlaufen wurde, bis keine Zelle mehr mehr als 9.000 Straßen enthält, können Sie ReadWFSFeatures.fmw<\/STRONG> mit einer WHERE-Klausel ausführen, die alle Fischernetz-Zellen auswählt und die vollständige Feature-Class RoadLink<\/STRONG> erstellen. Zum Schluss führen Sie RoadCount.py<\/STRONG> aus, um NO_Fishnet<\/STRONG> mit der Anzahl der Straßenabschnitte zu füllen, die jede Zelle schneiden. Sehen Sie nach, ob es Zellen mit RoadCount = 0 gibt und wenn Sie denken, dass dort niemals Straßen gebaut werden, löschen Sie diese Zellen, aber dafür müssen Sie Norweger sein.<\/DIV><\/DIV>Das Herunterladen aller Features dauerte genau 1 Stunde 0 Sekunden und genau 1.976.423 kamen an, genau wie vom WFS-Dienst beworben. So sehen die Daten aus, wobei die Beschriftungen die endgültige Straßenanzahl sind:<\/DIV><\/DIV>
<\/DIV><\/DIV>Das Fischernetz kann wiederverwendet werden, um auf andere WFS-Features von der GeoNorge-Agentur zuzugreifen, und die Methodik kann auf jeden WFS-Dienst angewendet werden, der keinen vollständigen Datensatz mit Kernansätzen liefern kann.<\/DIV><\/DIV>Diesen Beitrag wurde mit der Software ArcGIS Pro 2.5 beta 2<\/STRONG> erstellt, aber die .fmw-Dateien sollten in Pro 2.4 funktionieren. Wenn das Tool MinimumBoundingFishnet<\/STRONG> bei Ihnen nicht funktioniert, laden Sie eine frische Kopie von hierherunter.<\/A>.\/