<\/HEAD>
Les agences du monde entier publient leurs données sur le web en utilisant une grande variété de technologies, et bien que des normes existent pour les rendre accessibles dans ArcGIS, rien ne fonctionne dans ArcGIS comme nos propres services. Parfois, il est simplement logique de synchroniser régulièrement les données de leur système d'enregistrement vers ArcGIS Online ou Portal. Ce blog explique comment le faire efficacement.<\/P>
<\/P>
Pour voir si vous devez lire la suite, téléchargez la pièce jointe du blog NZ_Street_Address.lyrx<\/STRONG> et ajoutez-la à une nouvelle carte dans Pro, puis utilisez le volet Localiser et le service de géocodage mondial ArcGIS pour zoomer sur Wellington, NZL (ou votre autre localité préférée en Nouvelle-Zélande). Zoomez à une échelle de 1:5000 ou plus grande, déplacez-vous, activez les classes d'étiquettes Standard Number, Suffix Number et Range Number et inspectez les numéros des points d'adresse. Identifiez les entités. Sélectionnez les entités. Vous accédez à une couche d'entités dans un magasin de données d'entités standard ArcGIS Online. Voici les liens vers l'élément<\/A> et le service<\/A>. Si vous avez une connexion internet raisonnable, vous aurez une bonne expérience d'exploration cartographique. La couche que vous regardez contient plus de 2 millions d'entités. Vous pouvez télécharger les données. Vous pouvez les utiliser en géotraitement. Les données sont mises à jour chaque semaine et le processus de synchronisation, qui traite en moyenne des milliers de mises à jour chaque semaine, prend moins de 2 minutes. L'approche n'utilise aucun codage. Si vous souhaitez faire cela pour des données accessibles pour vous, continuez la lecture (cliquez sur les images pour les agrandir).<\/P><\/P>
<\/P>
<\/P>
Premièrement, quelles sources de données sont candidates à ce traitement ? Tout ce qui est accessible via l'extension ArcGIS Data Interoperability<\/STRONG>, qui comprend
tous ces formats et flux<\/A> dans de nombreux dépôts de stockage. Mon exemple spécifique utilise des données disponibles via un service WFS<\/STRONG>, mais ce n'est pas critique pour la discussion, l'approche est générique.<\/P><\/P>Approfondissons un peu. Pour examiner la couche un peu plus en détail, avec ArcGIS Online comme portail actif, ajoutez des données depuis Tout le portail avec les tags de recherche 'LDS' et 'ETL'.<\/P><\/P>
<\/P><\/P>Vous verrez les mêmes entités ponctuelles (avec la symbologie par défaut) mais aussi dans votre table des matières il y a une table autonome 'Timestamps' avec une seule ligne :<\/P><\/P><\/P>
<\/P><\/P>La valeur dans UpdatedUTC est actualisée à chaque synchronisation donc elle diffère du graphique mais c'est la clé de la synchronisation. Elle vit au sein du service d'entités comme une couche. L'heure UTC de synchronisation est l'étape finale du processus qui écrit également les mises à jour des entités.<\/P><\/P>Alors quelles sont toutes<\/EM> <\/>les étapes ? Pour suivre vous aurez besoin d'ArcGIS Pro 2.3+ avec l'extension Data Interoperability<\/STRONG> installée et activée, et d'avoir téléchargé la boîte à outils et les fichiers source .fmw de l'outil ETL dans le téléchargement Synchronize.zip du blog. Ajoutez la boîte à outils à votre projet, vous verrez ces outils ETL dedans :<\/P><\/P>
<\/P><\/>
Cliquez droit sur chaque outil ETL et réparez le chemin source vers son fichier .fmw.
<\/>
Mes données cibles sont disponibles en téléchargement massif, que j'ai pris sous forme de géodatabase fichier. J'ai copié la classe d'entités des points d'adresse dans ma géodatabase domicile du projet. Dans tous les cas, mettez vos données cibles dans votre géodatabase domicile du projet, en utilisant des processus ETL si nécessaire.
<\/>
Ensuite j'ai créé la table Timestamp en utilisant MakeTimestampTable<\/STRONG>, qui ressemble à ceci :
Notez ci-dessous qu'il n'est pas très judicieux d'utiliser le nom de table 'Timestamps' mais nous allons laisser passer pour l'instant<\/>

Réparez le chemin de destination de la géodatabase fichier pour qu'il soit identique à celui de vos entités d'intérêt. Si vous exécutez MakeTimestampTable en mode édition vous pouvez choisir votre propre valeur initiale de timestamp avec un sélecteur de date utile. J'ai utilisé l'heure UTC mais je n'ai pas eu besoin qu'elle soit exacte ; si vous devez l'être et que vous vivez à Greenwich au Royaume-Uni alors regardez votre montre et ignorez tout ajustement actuel pour l'heure d'été, sinon utilisez un peu de Python après avoir créé la table avec n'importe quelle valeur :

Puis calculez UpdatedUTC pour qu'il soit égal à DownloadedUTC et vous l'aurez :

C'est à ce moment-là que vous découvrez en écrivant ce blog que c'est vraiment une mauvaise idée d'utiliser un nom de table 'Timestamps' car il est trop proche d'un mot réservé dans beaucoup de technologies de bases de données y compris la géodatabase fichier, mais comme cela n'affecte pas mon objectif ici je vais le laisser passer ; mais si vous passez en production utilisez un autre nom !
Maintenant déployez un service d'entités. Ajoutez vos données cibles et la table timestamp à une carte, puis sélectionnez les deux objets dans la table des matières :

Puis cliquez droit et choisissez Partager comme couche web<\/><\/>:
<\/><\/>

Configurez le service pour qu'il soit une couche d'entités dans le dossier souhaité et laissez-le se charger.
Inclus dans Synchronize.tbx<\/> est un outil ETL LoadData<\/> qui crée aussi un service d'entités si vous souhaitez procéder ainsi.

Passons maintenant aux éléments de synchronisation dans l'outil ETL Synchronize<\/>:

La conception de votre version dépendra de vos données cibles, mais globalement :
- L'heure UTC actuelle au début du traitement est capturée
- La couche timestamps (table) est lue depuis la couche web Esri
- Vos données cibles sont lues depuis leur système d'enregistrement
- Les insertions, mises à jour et suppressions sont dérivées entre la source cible et la couche web Esri
- Les insertions, mises à jour et suppressions sont validées par comparaison des identifiants uniques avec la couche Esri
- Les suppressions sont engagées
- Les mises à jour sont écrites
- Les insertions sont écrites
- La couche timestamps (table) est mise à jour avec l'heure UTC capturée au début du traitement
Pour mes données cibles, le conservateur fournit une API changeset qui m'a permis d'intégrer des temps from/to dans un appel WFS donnant des ensembles exacts d'insertion, mise à jour et suppression. Si vos données ont des timestamps pour valeurs créées, modifiées et retirées vous pouvez faire cela vous-même. Si vous n'avez rien sur quoi baser cela vous pouvez dériver des changesets en lisant toutes les données des deux sources et en faisant une détection brute des changements avec le transformateur UpdateDetector<\/> bien que cela puisse bien sûr prendre du temps.
Dans l'outil ETL Synchronize il y a quelques fonctionnalités moins évidentes. La séquence d'écriture des entités est déterminée par l'ordre des écrivains dans le volet Navigator, du haut vers le bas. L'écriture de la mise à jour timestamp est donc forcée en dernier lieu, ainsi si quelque chose échoue elle ne sera pas faussement mise à jour. Les écrivains d'entités ArcGIS Online et Portal en mode Delete et Update requièrent la valeur ObjectID dans le service Esri à envoyer avec la feature, de sorte que les valeurs sont récupérées en cours de flux avec un FeatureReader et jointes sur un identifiant unique de couche. De même, le flux Inserts recherche des identifiants uniques existants avant d'écrire, seules les features connues pour ne pas<\/EM> exister passent.<\/P><\/P>Dans le paragraphe d'ouverture, j'ai dit que l'approche n'utilise aucun codage. Il y a<\/EM> une fonction mathématique utilisée (floor) pour calculer un numéro de lot en morceaux modulo 20 afin d'obtenir les ObjectIDs cibles du service. C'est aussi proche que vous devez être de l'écriture de code, bien que vous soyez libre d'utiliser Python si vous le souhaitez.<\/P><\/P>Bien que je mentionne le codage, dans un environnement de production, vous voudriez exécuter la synchronisation en tant que tâche planifiée. Cela commence par un script Python. J'en esquisse un ici qui suppose que des choses comme les connexions web ETL sont disponibles pour le propriétaire du processus, ce qui est facilement fait en partageant le fichier de connexion dans un répertoire bien connu. <\/P><\/P>
<\/P><\/P>Une autre approche dont je parlerai séparément sur mon blog est d'appeler directement l'exécutable du moteur FME dans une tâche planifiée.<\/P><\/P>Explorez les outils ETL fournis et envoyez vos questions à ce forum.<\/P><\/P>J'espère que cela vous donnera confiance pour construire vos propres synchronisations. Profitez-en !<\/P><\/BODY><\/HTML>