<\/HEAD>
Agenturen auf der ganzen Welt veröffentlichen ihre Daten im Web unter Verwendung einer großen Vielfalt von Technologien, und obwohl Standards existieren, um sie innerhalb von ArcGIS zugänglich zu machen, funktioniert nichts innerhalb von ArcGIS so gut wie unsere eigenen Services. Manchmal ist es einfach sinnvoll, Daten regelmäßig von ihrem System of Record zu ArcGIS Online oder Portal zu synchronisieren. Dieser Blog handelt davon, wie man das effizient macht.<\/P>
<\/P>
Um zu sehen, ob Sie weiterlesen sollten, laden Sie den Blog-Anhang NZ_Street_Address.lyrx<\/STRONG> herunter und fügen Sie ihn einer neuen Karte in Pro hinzu. Verwenden Sie dann das Locate-Fenster und den ArcGIS World Geocoding Service, um nach Wellington, NZL (oder Ihrem bevorzugten anderen Ort in Neuseeland) zu zoomen. Zoomen Sie auf eine Maßstabsgröße von 1:5000 oder größer, schwenken Sie herum, schalten Sie die Beschriftungsklassen Standard Number, Suffix Number und Range Number ein und prüfen Sie die Hausnummern der Adresspunkte. Identifizieren Sie Features. Wählen Sie Features aus. Sie greifen auf eine Feature-Layer in einem ArcGIS Online Standard Feature Data Store zu. Hier sind Links zum Item<\/A> und Service<\/A>. Wenn Sie eine vernünftige Internetverbindung haben, werden Sie eine gute Kartenerkundungserfahrung machen. Die Ebene, die Sie betrachten, enthält über 2 Millionen Features. Sie können die Daten herunterladen. Sie können sie in der Geoverarbeitung verwenden. Die Daten werden wöchentlich gepflegt und der Synchronisationsprozess mit durchschnittlich tausenden Updates pro Woche dauert unter 2 Minuten. Der Ansatz verwendet keinen Code. Wenn Sie dies für Daten tun möchten, die Ihnen zugänglich sind, lesen Sie weiter (klicken Sie auf Bilder, um sie zu vergrößern).<\/P><\/P>
<\/P>
<\/P>
Zunächst einmal: Welche Datenquellen kommen für diese Behandlung in Frage? Alles, was mit der ArcGIS Data Interoperability<\/STRONG>-Erweiterung zugänglich ist, also
all diese Formate und Feeds<\/A> in vielen Speicherorten. Mein konkretes Beispiel verwendet Daten, die über einen WFS<\/STRONG>-Service verfügbar sind, aber das ist für die Diskussion nicht entscheidend, der Ansatz ist generisch.<\/P><\/P>Lassen Sie uns etwas tiefer eintauchen. Um die Ebene etwas genauer anzusehen, fügen Sie mit ArcGIS Online als aktivem Portal Daten aus "All Portal" mit den Suchbegriffen 'LDS' und 'ETL' hinzu.<\/P><\/P>
<\/P><\/P>Sie sehen dieselben Punkt-Features (mit Standardsymbolik), aber auch in Ihrem Inhaltsverzeichnis gibt es eine eigenständige Tabelle 'Timestamps' mit einer Zeile:<\/P><\/P>
<\/P><\/P>Der Wert in UpdatedUTC wird bei jeder Synchronisation aktualisiert und unterscheidet sich daher vom Bild, aber er ist der Schlüssel zur Synchronisation. Er befindet sich innerhalb des Feature-Service als Layer. Die UTC-Zeit der Synchronisation ist der letzte Schritt des Prozesses, der auch Feature-Updates schreibt.<\/P><\/P>Also, was sind alle<\EM> <\STRONG>Schritte? Um zu folgen benötigen Sie ArcGIS Pro 2.3+ mit Data Interoperability<\STRONG>-Erweiterung installiert und aktiviert sowie die Toolbox und ETL-Tool-Quell-.fmw-Dateien aus dem Blog-Download Synchronize.zip heruntergeladen. Fügen Sie die Toolbox Ihrem Projekt hinzu. Dort sehen Sie diese ETL-Tools:<\P><\P>
<\p>
Klicken Sie mit der rechten Maustaste auf jedes ETL-Tool und reparieren Sie den Quellpfad zu seiner .fmw-Datei.<\p>
<\p>
Meine Zieldaten sind als Bulk-Download verfügbar, den ich als File Geodatabase genommen habe. Ich habe die Adresspunkt-Feature-Class in meine Projekt-Heim-Geodatabase kopiert. Holen Sie Ihre Zieldaten auf jeden Fall in Ihre Projekt-Heim-Geodatabase, falls nötig mit ETL-Prozessen.<\p>
<\p>
Als nächstes habe ich die Timestamp-Tabelle mit MakeTimestampTable<\STRONG> erstellt, die so aussieht:<\p>Beachten Sie untenstehende Anmerkung: Es ist keine gute Idee, den Tabellennamen 'Timestamps' zu verwenden, aber wir lassen es vorerst so.<\p>
Reparieren Sie den Zielpfad der File Geodatabase so, dass er derselbe ist wie bei Ihren interessierenden Features. Wenn Sie MakeTimestampTable im Bearbeitungsmodus ausführen, können Sie Ihren eigenen Anfangszeitstempel mit einem nützlichen Datumswähler auswählen. Ich habe UTC-Zeit verwendet, musste sie aber nicht exakt treffen. Wenn doch und wenn Sie in Greenwich UK leben, schauen Sie auf Ihre Uhr und ignorieren jegliche aktuelle Sommerzeitumstellung. Andernfalls verwenden Sie ein wenig Python nach dem Erstellen der Tabelle mit einem beliebigen Wert:<\p>
<\p>

<\p>Dann berechnen Sie UpdatedUTC so, dass es DownloadedUTC entspricht und dann haben Sie es:<\p>
<\p>
<\p>
An diesem Punkt beim Schreiben des Blogs stellt man fest, dass es wirklich keine gute Idee ist, einen Tabellennamen 'Timestamps' zu verwenden, da er vielen reservierten Wörtern in verschiedenen Datenbanktechnologien einschließlich File Geodatabase zu nahe kommt. Da es mein Ziel hier nicht beeinträchtigt, lasse ich es so. Aber wenn Sie produktiv gehen wollen, verwenden Sie einen anderen Namen!<\p>
<\p>
Jetzt stellen wir einen Feature-Service bereit. Fügen Sie Ihre Zieldaten und die Timestamp-Tabelle einer Karte hinzu und wählen dann beide Objekte im Inhaltsverzeichnis aus:<\p>
<\p>

<\p>
Dann klicken Sie mit der rechten Maustaste und wählen Share as Web Layer<\STRONG>:<\p><\p>

Konfigurieren Sie den Service so, dass er ein Feature-Layer im gewünschten Ordner ist und lassen ihn laden.
Im Synchronize.tbx<\STRONG> enthalten ist ein ETL-Tool LoadData<\STRONG>, das ebenfalls einen Feature-Service erstellt, falls gewünscht.

Nun zum Synchronisationsprozess im ETL-Tool Synchronize<\STRONG>:

Das Design Ihrer Version hängt von Ihren Zieldaten ab. Im Großen und Ganzen:
- Die aktuelle UTC-Zeit zu Beginn der Verarbeitung wird erfasst
- Die Timestamps-Ebene (Tabelle) wird vom Esri-Web-Layer gelesen
- Ihre Zieldaten werden aus ihrem System of Record gelesen
- Einfügungen (Inserts), Aktualisierungen (Updates) und Löschungen (Deletes) werden zwischen der Zielquelle und dem Esri-Web-Layer abgeleitet
- Einfügungen (Inserts), Aktualisierungen (Updates) und Löschungen (Deletes) werden durch Vergleich eindeutiger Bezeichner mit dem Esri-Layer validiert
- Löschungen (Deletes) werden ausgeführt
- Aktualisierungen (Updates) werden geschrieben
- Einfügungen (Inserts) werden geschrieben
- Die Timestamps-Ebene (Tabelle) wird mit der bei Beginn der Verarbeitung erfassten UTC-Zeit aktualisiert
Für meine Zieldaten stellt der Kurator eine Changeset API bereit, die mir erlaubt hat, Von-/Bis-Zeiten in einen WFS-Aufruf einzubauen, was exakte Einfüge-, Aktualisierungs- und Löschmengen lieferte. Wenn Ihre Daten Zeitstempel für Erstellungs-, Bearbeitungs- und Löschwerte haben, können Sie dies selbst tun. Wenn Ihnen nichts zur Verfügung steht, können Änderungen durch das Lesen aller Daten aus beiden Quellen abgeleitet werden und eine Brute-Force Änderungsdetektion mit dem UpdateDetector<\STRONG>-Transformer durchgeführt werden. Dies kann natürlich Zeit in Anspruch nehmen.
Im Synchronize ETL Tool gibt es einige weniger offensichtliche Funktionen. Die Reihenfolge des Schreibens von Features wird durch die Reihenfolge der Writer im Navigator-Fenster von oben nach unten bestimmt. Das Schreiben des Timestamp-Updates wird daher als letztes erzwungen. Falls etwas fehlschlägt wird somit keine falsche Aktualisierung vorgenommen.
ArcGIS Online und Portal Feature Writer im Delete- und Update-Modus benötigen den ObjectID-Wert im Esri-Dienst, der mit dem Feature gesendet wird, sodass die Werte mittendrin mit einem FeatureReader erfasst und anhand eines eindeutigen Layer-Identifiers verknüpft werden. Ebenso sucht der Inserts-Stream vor dem Schreiben nach vorhandenen eindeutigen Identifikatoren, nur Features, von denen bekannt ist, dass sie nicht existieren, werden weitergegeben.<\/P>
<\/P>
Im einleitenden Absatz habe ich gesagt, dass der Ansatz keine Programmierung verwendet. Es gibt eine mathematische Funktion (floor), um eine Batch-Nummer in modulo 20-Stücken zu berechnen, um Zielservice-ObjectIDs zu erhalten. Das ist so nah am Programmieren, wie Sie kommen müssen, obwohl Sie gerne Python verwenden können, wenn Sie möchten.<\/P>
<\/P>
Während ich Programmierung erwähne, würden Sie in einer Produktionsumgebung die Synchronisierung als geplanten Task ausführen wollen. Dies beginnt als Python-Skript. Ich skizziere hier eines, das davon ausgeht, dass Dinge wie ETL-Webverbindungen für den Prozessbesitzer verfügbar sind, was leicht durch das Teilen der Verbindungsdatei in einem bekannten Verzeichnis erreicht wird. <\/P>
<\/P>
<\/P>
<\/P>
Ein anderer Ansatz, über den ich separat bloggen werde, ist das direkte Aufrufen der FME engine executable in einem geplanten Task.<\/P>
<\/P>
Erkunden Sie die bereitgestellten ETL-Tools und senden Sie Fragen an dieses Forum.<\/P>
<\/P>
Ich hoffe, dies gibt Ihnen Vertrauen, Ihre eigenen Synchronisationen zu erstellen. Viel Spaß!<\/P><\/BODY><\/HTML>