<\/HEAD>
Agências ao redor do mundo publicam seus dados na web usando uma grande variedade de tecnologias, e embora existam padrões para torná-los acessíveis dentro do ArcGIS, nada funciona dentro do ArcGIS como nossos próprios serviços. Às vezes, faz sentido sincronizar regularmente os dados do seu sistema de registro para o ArcGIS Online ou Portal. Este blog é sobre como fazer isso de forma eficiente.<\/P>
<\/P>
Para ver se você deve continuar lendo, baixe o anexo do blog NZ_Street_Address.lyrx<\/STRONG> e adicione-o a um novo mapa no Pro, então usando o painel Localizar e o ArcGIS World Geocoding Service, dê zoom em Wellington, NZL (ou sua localidade favorita da Nova Zelândia). Dê zoom para escala 1:5000 ou maior, navegue pelo mapa, ative as classes de rótulo Standard Number, Suffix Number e Range Number e inspecione os números das casas nos pontos de endereço. Identifique feições. Selecione feições. Você está acessando uma camada de feição em um armazenamento padrão de dados de feição do ArcGIS Online. Aqui estão os links para o item <\/A>e serviço<\/A>. Se você tiver uma conexão razoável com a internet, terá uma boa experiência explorando o mapa. A camada que você está visualizando tem mais de 2 milhões de feições. Você pode baixar os dados. Pode usá-los em geoprocessamento. Os dados são mantidos semanalmente e o processo de sincronização, que em média realiza milhares de atualizações por semana, leva menos de 2 minutos. A abordagem não usa codificação. Se você quiser fazer isso para dados acessíveis a você, continue lendo (clique nas imagens para ampliá-las).<\/P><\/P>
<\/P>
<\/P>
Primeiramente, quais fontes de dados são candidatas para esse tratamento? Qualquer coisa acessível à extensão ArcGIS Data Interoperability<\/STRONG>, que é
todos esses formatos e feeds<\/A> em muitos repositórios de armazenamento. Meu exemplo específico usa dados disponíveis via serviço WFS<\/STRONG>, mas isso não é crítico para a discussão, a abordagem é genérica.<\/P><\/P>Vamos aprofundar um pouco mais. Para olhar a camada mais de perto, com o ArcGIS Online como seu portal ativo, Adicione Dados de Todo Portal com as tags de busca 'LDS' e 'ETL'.<\/P><\/P>
<\/P><\/P>Você verá as mesmas feições pontuais (com simbologia padrão), mas também na sua tabela de conteúdos há uma tabela independente 'Timestamps' com uma linha:<\/P><\/P><\/P>
<\/P><\/P>O valor em UpdatedUTC é atualizado a cada sincronização, então será diferente do gráfico mas é a chave para a sincronização. Ele vive dentro do serviço de feição como uma camada. O horário UTC da sincronização é o passo final do processo que também grava as atualizações das feições.<\/P><\/P>Então quais são todos<\/EM> <\/> os passos? Para seguir você precisará do ArcGIS Pro 2.3+ com extensão Data Interoperability<\/STRONG> instalada e habilitada, e ter baixado a caixa de ferramentas e os arquivos fonte .fmw da ferramenta ETL no download do blog Synchronize.zip. Adicione a caixa de ferramentas ao seu projeto, você verá essas ferramentas ETL nela:<\/P><\/P>
<\/P><\/>Clique com o botão direito em cada ferramenta ETL e corrija o caminho da fonte para seu arquivo .fmw.<\/><\/>Meus dados alvo estão disponíveis como download em massa, que peguei como um file geodatabase. Copiei a classe de feição dos pontos de endereço para o geodatabase principal do meu projeto. De qualquer forma, coloque seus dados alvo no geodatabase principal do seu projeto, usando processos ETL se necessário.<\/><\/>Em seguida criei a tabela Timestamp usando MakeTimestampTable<\/> , que fica assim:<\/>Veja a nota abaixo que não é uma boa ideia usar o nome da tabela 'Timestamps', mas vamos deixar assim por enquanto<\/>
Corrija o caminho do file geodatabase destino para ser o mesmo dos seus recursos de interesse. Se você executar MakeTimestampTable no modo edição poderá escolher seu próprio valor inicial de timestamp com um seletor útil de datas. Usei horário UTC mas não precisei ser exato, se precisar e morar em Greenwich UK então olhe seu relógio e ignore qualquer ajuste atual de horário de verão, caso contrário use um pouco de Python após criar a tabela com qualquer valor:<\/>
<\/>

<\/>
Então calcule UpdatedUTC para ser igual a DownloadedUTC e você terá isso:<\/>
<\/>

<\/>
É neste ponto da escrita do blog que você descobre que é realmente uma má ideia usar o nome da tabela 'Timestamps' pois é muito próximo a uma palavra reservada em muitas tecnologias de banco de dados incluindo file geodatabase, mas como isso não afeta meu objetivo aqui vou deixar assim, mas se for para produção use outro nome!<\/>
<\/>
Agora configure um serviço de feição. Adicione seus dados alvo e a tabela timestamp a um mapa, então selecione ambos os objetos na tabela de conteúdos:<\/>
<\/>

<\/>
Então clique com o botão direito e escolha Compartilhar como Camada Web<\/> :<\/>
<\/>

< 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 > Configure o serviço para ser uma camada de feição na pasta desejada e deixe carregar.< \ / p > < p >< \ / p > < p > Incluído no < STRONG > Synchronize.tbx < \ / STRONG > há uma ferramenta ETL < STRONG > LoadData < \ / STRONG > que cria um serviço de feição também se quiser seguir esse caminho.< \ / 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 > Agora sobre a sincronização na ferramenta ETL < 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 > O design da sua versão dependerá dos seus dados alvo, mas em linhas gerais:< \ / p > < p >< \ / p > < UL >< LI > O horário UTC atual no início do processamento é capturado < \ / LI > < LI > A camada timestamps (tabela) é lida da camada web Esri < \ / LI > < LI > Seus dados alvo são lidos do seu sistema de registro < \ / LI > < LI > Inserções, Atualizações e Exclusões são derivadas entre a fonte alvo e a camada web Esri < \ / LI > < LI > Inserções, Atualizações e Exclusões são validadas pela comparação do identificador único com a camada Esri < \ / LI > < LI > Exclusões são confirmadas (committed) < \ / LI > < LI > Atualizações são gravadas (written) < \ / LI > < LI > Inserções são gravadas (written) < \ / LI > < LI > A camada timestamps (tabela) é atualizada com o horário UTC capturado quando o processamento começou < \ / LI >< / UL >< p >< \ / p >< p > Para meus dados alvo o curador fornece uma API changeset que me permitiu construir tempos from/to numa chamada WFS que deu conjuntos exatos de inserção, atualização e exclusão.& nbsp ; Se seus dados têm timestamps para valores criados, editados e removidos você pode fazer isso sozinho. & nbsp ; Se não tiver nada para basear-se pode derivar changesets lendo todos os dados das duas fontes e fazendo detecção bruta de mudanças com o transformador < STRONG > UpdateDetector </ STRONG>, embora isso possa levar tempo. & nbsp ;< \ / p >< p >< \ / p >< p > Na ferramenta ETL Synchronize há alguns recursos menos óbvios. & nbsp ; A sequência da gravação das feições é determinada pela ordem dos escritores no painel Navigator, de cima para baixo. & nbsp ; Gravar a atualização timestamp é portanto garantido ser por último, assim se algo falhar não será atualizado falsamente. & nbsp ; Os escritores feature do ArcGIS Online e Portal nos modos Delete e Update requerem o valor ObjectID no serviço Esri para ser enviado com a feição, assim os valores são capturados no meio do fluxo com um FeatureReader e unidos em um identificador único da camada. Da mesma forma, o fluxo de Inserts procura identificadores únicos existentes antes de gravar, apenas feições que se sabe
não<\/EM> existirem passam.<\/P><\/P>No parágrafo inicial eu disse que a abordagem não usa codificação. Há uma<\/EM> função matemática usada (floor) para calcular um número de lote em pedaços módulo 20 para obter ObjectIDs do serviço alvo. Isso é o mais próximo de escrever código que você precisa chegar, embora você seja livre para usar Python se quiser.<\/P><\/P>Embora eu mencione codificação, em um ambiente de produção você gostaria de executar a sincronização como uma tarefa agendada. Isso começa como um script Python. Eu crio um aqui que assume coisas como conexões web ETL disponíveis para o proprietário do processo, o que é facilmente feito compartilhando o arquivo de conexão em um diretório conhecido. <\/P><\/P>
<\/P><\/P>Outra abordagem sobre a qual vou escrever separadamente é chamar o executável do motor FME diretamente em uma tarefa agendada.<\/P><\/P>Explore as ferramentas ETL fornecidas e envie perguntas para este fórum.<\/P><\/P>Espero que isso lhe dê confiança para construir suas próprias sincronizações. Aproveite!<\/P><\/BODY><\/HTML>