<\/HEAD>
Las agencias de todo el mundo publican sus datos en la web utilizando una gran variedad de tecnologías, y aunque existen estándares para hacerlos accesibles dentro de ArcGIS, nada funciona dentro de ArcGIS como nuestros propios servicios. A veces simplemente tiene sentido sincronizar regularmente los datos desde su sistema de registro a ArcGIS Online o Portal. Este blog trata sobre cómo hacerlo de manera eficiente.<\/P>
<\/P>
Para ver si deberías seguir leyendo, descarga el archivo adjunto del blog NZ_Street_Address.lyrx<\/STRONG> y añádelo a un nuevo mapa en Pro, luego usando el panel Locate y el ArcGIS World Geocoding Service haz zoom a Wellington, NZL (o tu otra localidad favorita de Nueva Zelanda). Acércate a una escala de 1:5000 o mayor, desplázate, activa las clases de etiquetas Standard Number, Suffix Number y Range Number e inspecciona los números de las casas en los puntos de dirección. Identifica características. Selecciona características. Estás accediendo a una capa de entidades en un almacén estándar de datos de entidades de ArcGIS Online. Aquí están los enlaces al elemento <\/A>y al servicio<\/A>. Si tienes una conexión a internet razonable tendrás una buena experiencia explorando el mapa. La capa que estás viendo tiene más de 2 millones de entidades. Puedes descargar los datos. Puedes usarlos en geoprocesamiento. Los datos se mantienen semanalmente y el proceso de sincronización que promedia miles de actualizaciones cada semana toma menos de 2 minutos. El enfoque no usa codificación. Si quieres hacer esto para datos accesibles para ti entonces sigue leyendo (haz clic en las imágenes para ampliarlas).<\/P><\/P>
<\/P>
<\/P>
Primero, ¿qué fuentes de datos son candidatas para este tratamiento? Cualquier cosa accesible a la extensión ArcGIS Data Interoperability<\/STRONG>, que es
todos estos formatos y flujos<\/A> en muchos repositorios de almacenamiento. Mi ejemplo específico usa datos disponibles por servicio WFS<\/STRONG> pero eso no es crítico para la discusión, el enfoque es genérico.<\/P><\/P>Vamos a profundizar un poco más. Para mirar la capa un poco más de cerca, con ArcGIS Online como tu portal activo, Añade Datos desde Todo el Portal con etiquetas de búsqueda 'LDS' y 'ETL'.<\/P><\/P>
<\/P><\/P>Verás las mismas entidades puntuales (con simbología predeterminada) pero también en tu tabla de contenidos hay una tabla independiente 'Timestamps' con una fila:<\/P><\/P><\/P>
<\/P><\/P>El valor en UpdatedUTC se actualiza en cada sincronización por lo que diferirá del gráfico pero es la clave para la sincronización. Vive dentro del servicio de entidades como una capa. La hora UTC de sincronización es el paso final del proceso que también escribe las actualizaciones de entidades.<\/P><\/P>Entonces, ¿cuáles son todos<\/EM> <\/>los pasos? Para seguir necesitarás tener instalada y habilitada la extensión ArcGIS Pro 2.3+ con Data Interoperability<\/STRONG>, y haber descargado la caja de herramientas y los archivos fuente .fmw del ETL en la descarga del blog Synchronize.zip. Añade la caja de herramientas a tu proyecto, verás estas herramientas ETL en ella:<\/P><\/P>
<\/P><\/>Haz clic derecho en cada herramienta ETL y repara la ruta fuente a su archivo .fmw.<\/><\/>Mis datos objetivo están disponibles como descarga masiva, que tomé como una geodatabase archivo. Copié la clase de entidad address point en la geodatabase principal de mi proyecto. En cualquier caso, pon tus datos objetivo en la geodatabase principal del proyecto, usando procesos ETL si es necesario.<\/><\/>Luego hice la tabla Timestamp usando MakeTimestampTable<\/>strong>, que se ve así:<\/>Mira la nota abajo no es buena idea usar el nombre 'Timestamps' para la tabla pero lo dejaremos pasar por ahora<\/>
<\/>
Repara la ruta destino del archivo geodatabase para que sea igual que tus entidades de interés. Si ejecutas MakeTimestampTable en modo edición puedes elegir tu propio valor inicial para timestamp con un selector útil de fecha. Usé hora UTC pero no tuve que ser exacto, si lo haces y vives en Greenwich UK entonces mira tu reloj e ignora cualquier ajuste actual por horario de verano, si no usa un poco Python después de crear la tabla con cualquier valor:<\/><\/>
<\/><\/>Luego calcula UpdatedUTC para que sea igual a DownloadedUTC y lo tendrás:<\/>
<\/><\/>En este punto escribiendo el blog descubres que es realmente mala idea usar un nombre 'Timestamps' para una tabla porque está muy cerca de una palabra reservada en muchas tecnologías base de datos incluyendo file geodatabase, pero como no afecta mi objetivo aquí lo dejaré pasar, pero si vas a producción usa otro nombre!<\/>
Ahora levanta un servicio de entidades. Añade tus datos objetivo y la tabla timestamp a un mapa, luego selecciona ambos objetos en la tabla de contenidos:

Luego haz clic derecho y elige Compartir como Capa Web<\\strong>:


Configura el servicio para que sea una capa de entidades en la carpeta que desees y deja que cargue.
Incluido en Synchronize.tbx<\\strong> hay una herramienta ETL llamada LoadData<\\strong> que también crea un servicio de entidades si quieres ir por ese camino.

Ahora para las cosas de sincronización en la herramienta ETL llamada Synchronize<\\strong>:
El diseño de tu versión dependerá de tus datos objetivo, pero en términos generales:
Se captura la hora UTC actual al inicio del procesamiento
Se lee la capa timestamps (tabla) desde la capa web Esri
Tus datos objetivo se leen desde su sistema registro original
Se derivan inserciones, actualizaciones y eliminaciones entre la fuente objetivo y la capa web Esri
Se validan inserciones, actualizaciones y eliminaciones mediante comparación del identificador único con la capa Esri
Se confirman las eliminaciones
Se escriben las actualizaciones
Se escriben las inserciones
La capa timestamps (tabla) se actualiza con la hora UTC capturada cuando comenzó el procesamiento
Para mis datos objetivo el curador proporciona una API changeset que me permitió construir tiempos desde/hasta en una llamada WFS que dio conjuntos exactos para insertar, actualizar y eliminar. Si tus datos tienen timestamps para valores creados, editados y retirados puedes hacer esto tú mismo. Si no tienes nada con qué trabajar puedes derivar conjuntos cambios leyendo todos los datos desde ambas fuentes y haciendo detección forzada con el transformador UpdateDetector<\\strong>, aunque esto por supuesto puede tomar tiempo.
En la herramienta ETL Synchronize hay algunas características menos obvias. La secuencia para escribir entidades está determinada por el orden del escritor en el panel Navigator, desde arriba hacia abajo. Por lo tanto se fuerza que escribir la actualización timestamp sea lo último, así si algo falla no se actualizará falsamente. <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 /><br /><br /><br /> en el servicio Esri para ser enviado con la característica, por lo que los valores se capturan a mitad de flujo con un FeatureReader y se unen en un identificador único de capa. De manera similar, el flujo Inserts busca identificadores únicos existentes antes de escribir, solo pasan las características que se sabe que no existen.<\/P><\/P>En el párrafo inicial dije que el enfoque no usa codificación. Hay una función matemática usada (floor) para calcular un número de lote en fragmentos módulo 20 para obtener ObjectIDs objetivo del servicio. Eso es lo más cerca que necesitas llegar a escribir código, aunque eres libre de usar Python si quieres.<\/P><\/P>Mientras menciono la codificación, en un entorno de producción querrías ejecutar la sincronización como una tarea programada. Esto comienza como un script Python. Aquí hago un esqueleto que asume cosas como conexiones web ETL disponibles para el propietario del proceso, lo cual se hace fácilmente compartiendo el archivo de conexión en un directorio conocido. <\/P><\/P>
<\/P><\/P>Otro enfoque sobre el que escribiré en un blog por separado es llamar directamente al ejecutable del motor FME en una tarea programada.<\/P><\/P>Explora las herramientas ETL suministradas y envía preguntas a este foro.<\/P><\/P>¡Espero que esto te dé confianza para construir tus propias sincronizaciones. ¡Disfruta!<\/P><\/BODY><\/HTML>