<\/HEAD>
Bureaus over de hele wereld publiceren hun gegevens op het web met een grote verscheidenheid aan technologieën, en hoewel er standaarden bestaan om ze toegankelijk te maken binnen ArcGIS, presteert niets binnen ArcGIS zoals onze eigen services. Soms is het gewoon logisch om gegevens regelmatig te synchroniseren van het systeem van registratie naar ArcGIS Online of Portal. Deze blog gaat over hoe je dat efficiënt kunt doen.<\/P>
<\/P>
Om te zien of je verder moet lezen, download de blogbijlage NZ_Street_Address.lyrx<\/STRONG> en voeg deze toe aan een nieuwe kaart in Pro, zoom dan met behulp van het Locate-paneel en de ArcGIS World Geocoding Service naar Wellington, NZL (of je favoriete andere locatie in Nieuw-Zeeland). Zoom in tot 1:5000 of een grotere schaal, pan rond, zet de labelklassen Standard Number, Suffix Number en Range Number aan en inspecteer de huisnummers van de adrespunten. Identificeer features. Selecteer features. Je hebt toegang tot een feature layer in een standaard feature data store van ArcGIS Online. Hier zijn links naar het item<\/A> en service<\/A>. Als je een redelijke internetverbinding hebt, zul je een goede kaartverkenningservaring hebben. De laag die je bekijkt bevat meer dan 2 miljoen features. Je kunt de data downloaden. Je kunt het gebruiken in geoprocessing. De data wordt wekelijks onderhouden en het synchronisatieproces dat gemiddeld duizenden updates per week verwerkt duurt minder dan 2 minuten. De aanpak gebruikt geen codering. Als je dit wilt doen voor data die voor jou toegankelijk is, lees dan verder (klik op afbeeldingen om ze te vergroten).<\/P><\/P>
<\/P>
<\/P>
Ten eerste, welke databronnen komen in aanmerking voor deze behandeling? Alles wat toegankelijk is voor de ArcGIS Data Interoperability<\/STRONG> extensie, wat
al deze formaten en feeds omvat<\/A> in vele opslagplaatsen. Mijn specifieke voorbeeld gebruikt data beschikbaar via WFS<\/STRONG> service maar dat is niet cruciaal voor de discussie, de aanpak is generiek.<\/P><\/P>Laten we iets dieper graven. Om de laag iets beter te bekijken, met ArcGIS Online als je actieve portal, Voeg Data toe van Alle Portal met zoekwoorden 'LDS' en 'ETL'.<\/P><\/P>
<\/P><\/P>Je zult dezelfde puntfeatures zien (met standaard symbologie) maar ook in je inhoudstabel staat een zelfstandige tabel 'Timestamps' met één rij:<\/P><\/P><\/P>
<\/P><\/P>De waarde in UpdatedUTC wordt bij elke synchronisatie vernieuwd dus zal verschillen van de afbeelding maar het is de sleutel tot synchronisatie. Het leeft binnen de feature service als een laag. De UTC-tijd van synchronisatie is de laatste stap van het proces die ook feature-updates schrijft.<\/P><\/P>Dus wat zijn alle<\EM> <\STRONG>stappen? Om te volgen heb je ArcGIS Pro 2.3+ met Data Interoperability<\STRONG> extensie geïnstalleerd en ingeschakeld nodig, en moet je de toolbox en ETL tool bron .fmw bestanden uit de blogdownload Synchronize.zip hebben gedownload. Voeg de toolbox toe aan je project, je zult deze ETL tools erin zien:<\P><\P><\P style="text-align: center;">
<\p>
Klik met de rechtermuisknop op elke ETL tool en herstel het bronpad naar het .fmw bestand.<\p>
<\p>
Mijn doeldata is beschikbaar als bulkdownload, die ik heb genomen als een file geodatabase. Ik kopieerde de address point feature class naar mijn project home geodatabase. Zorg er in ieder geval voor dat je doeldata in je project home geodatabase staat, gebruik ETL-processen indien nodig.<\p>
<\p>
Vervolgens maakte ik de Timestamp tabel met MakeTimestampTable<\STRONG>, die er zo uitziet:<\p>Zie opmerking hieronder dat het geen goed idee is om de tabelnaam 'Timestamps' te gebruiken maar we laten het nu even zo gaan<\p>
Herstel het bestemmingsbestand geodatabase pad zodat dit hetzelfde is als je features of interest. Als je MakeTimestampTable in bewerkingsmodus uitvoert kun je zelf een initiële timestamp waarde kiezen met een handige datumkiezer. Ik gebruikte UTC tijd maar hoefde niet exact te zijn, als dat wel moet en je woont in Greenwich UK kijk dan op je horloge en negeer eventuele huidige zomertijdaanpassing, anders gebruik een beetje Python na het maken van de tabel met elke waarde:<\p>
<\p>

<\p>Bereken dan UpdatedUTC gelijk aan DownloadedUTC en dan heb je het:<\p>
<\p>

<\p<p style="text-align: left;">Op dit punt bij het schrijven van deze blog ontdek je dat het echt geen goed idee is om een tabelnaam 'Timestamps' te gebruiken omdat het te dicht bij een gereserveerd woord ligt in veel database technologieën inclusief file geodatabase, maar omdat het mijn doel hier niet beïnvloed laat ik het zo, maar als je in productie gaat gebruik dan een andere naam!<\p<p style="text-align: left;"><\p<p style="text-align: left;">Zet nu een feature service op. Voeg je doeldata en de timestamp tabel toe aan een kaart, selecteer dan beide objecten in de inhoudstabel:<\p<p style="text-align: left;"><\p<p>
</ p >< p style= "text-align : left ; " >< \ p >< p style= "text-align : left ; " > Klik vervolgens met rechts en kies < STRONG > Share as Web Layer < \ STRONG > : < \ p >< p style= "text-align : left ; " >< \ p >< p style= "text-align : left ; " >< IMG __jive_id = "441361 " class = "jive-image image-10 " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/441361_pastedImage_1.png " \ / > < \ p > < p > < IMG __jive_id = "441362 " class = "image-11 j-img-centered jive-image " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/441362_pastedImage_2.png " style = "display : block ; margin-left : auto ; margin-right : auto ; " \ / > < \ p > < p >< \ p > < p > Configureer de service zodat deze een feature layer wordt in de map waar jij hem wilt hebben en laat hem laden.< \ p > < p >< \ p > < p > Inbegrepen in < STRONG > Synchronize.tbx < \ STRONG > is een ETL tool < STRONG > LoadData < \ STRONG > die ook een feature service maakt als je die route wilt volgen.< \ p > < p >< \ p > < p >< IMG __jive_id = "441363 " class = "image-12 jive-image " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/441363_pastedImage_1.png " \ / > < \ p > < p >< \ p > < p > Nu voor de synchronisatiespul in de ETL tool < STRONG > Synchronize < \ STRONG > : < \ p > < p >< \ p > < p >< IMG __jive_id = "441364 " class = "image-13 jive-image " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/441364_pastedImage_2.png " \ / > < \ p > < p >< \ p > < p > Het ontwerp van jouw versie hangt af van jouw doeldata, maar globaal gezien:< \ p > < ul >< li > De huidige UTC tijd aan het begin van verwerking wordt vastgelegd </ li >< li > De timestamps laag (tabel) wordt gelezen uit de Esri weblaag </ li >< li > Jouw doeldata wordt gelezen uit zijn systeem van registratie </ li >< li > Inserts, Updates en Deletes worden afgeleid tussen de doelsource en Esri weblaag </ li >< li > Inserts, Updates en Deletes worden gevalideerd door vergelijking van unieke identificatoren met de Esri laag </ li >< li > Deletes worden uitgevoerd </ li >< li > Updates worden geschreven </ li >< li > Inserts worden geschreven </ li >< li > De timestamps laag (tabel) wordt bijgewerkt met de UTC tijd die werd vastgelegd toen de verwerking begon </ li ></ ul >< \ p > < p >< \ p > Voor mijn doeldata levert de curator een changeset API die me toestaat om from/to tijden in te bouwen in een WFS-aanroep wat exacte insert-, update- en delete-sets gaf. Als jouw data timestamps heeft voor aangemaakt, bewerkt en verwijderd kun je dit zelf doen. Als je niets hebt om op voort te bouwen kun je changesets afleiden door alle data uit beide bronnen te lezen en brute force wijzigingsdetectie uit te voeren met de < STRONG > UpdateDetector < \ STRONG > transformer, hoewel dit natuurlijk tijd kan kosten.< \ p > < p >< \ p > In de Synchronize ETL tool zijn er enkele minder voor de hand liggende functies. De volgorde van feature schrijven wordt bepaald door schrijversvolgorde in het Navigator-paneel, van boven naar beneden. Het schrijven van de timestamp update wordt daarom afgedwongen als laatste stap, zodat als er iets faalt deze niet valselijk wordt bijgewerkt. ArcGIS Online en Portal feature writers vereisen bij Delete- en Update-modus dat ObjectID waarde in de Esri-service die met het feature wordt verzonden, zodat de waarden halverwege de stroom worden opgepikt met een FeatureReader en worden gekoppeld aan een unieke laagidentificatie. Op dezelfde manier zoekt de Inserts-stroom naar bestaande unieke identificaties voordat er wordt geschreven, alleen features waarvan bekend is dat ze niet bestaan, worden doorgelaten.<\/P>
<\/P>
In de openingsparagraaf zei ik dat de aanpak geen codering gebruikt. Er is een wiskundige functie gebruikt (floor) om een batchnummer te berekenen in modulo 20 stukken om doelservice ObjectIDs te verkrijgen. Dat is zo dicht bij het schrijven van code als je hoeft te komen, hoewel je vrij bent om Python te gebruiken als je dat wilt.<\/P>
<\/P>
Hoewel ik codering noem, zou je in een productieomgeving synchronisatie willen uitvoeren als een geplande taak. Dit begint als een Python-script. Ik stel hier een voorbeeld op dat ervan uitgaat dat zaken zoals ETL-webverbindingen beschikbaar zijn voor de proces-eigenaar, wat gemakkelijk kan worden gedaan door het verbindingsbestand te delen in een bekende map. <\/P>
<\/P>
<\/P>
<\/P>
Een andere aanpak waar ik apart over zal bloggen is het direct aanroepen van de FME-engine executable in een geplande taak.<\/P>
<\/P>
Verken zeker de geleverde ETL-tools en stuur vragen naar dit forum.<\/P>
<\/P>
Ik hoop dat dit je vertrouwen geeft om je eigen synchronisaties te bouwen. Veel plezier!<\/P><\/BODY><\/HTML>