¿Migrando datos de ArcSDE a PostGIS?

19

Se ha sugerido que haga esta pregunta nuevamente, pero tal vez esté redactada de manera diferente a cómo cargar en masa múltiples archivos de forma en PostGIS .

Soy nuevo en postgis y sql pero quiero usar postgis como esclavo (por el momento) para ArcSDE. Por lo tanto, lo que busco es un poco de ayuda para averiguar cómo podría realizar la carga por lotes de datos de ArcSDE en PostGIS todas las noches.

Puedo producir un script de Python para exportar datos de ArcSDE a SHP todas las noches, pero no estoy seguro de cómo cargar por lotes los archivos SHP exportados en PostGIS, sobrescribiendo los que ya existían en Postgis como una tarea automática (archivo por lotes, supongo )

Mi gran plan es reemplazar ArcSDE / ArcGIS a tiempo con PostGIS, QGIS y GeoServer o MapServer.

geosmiles
fuente
1
¿ArcSDE no administra un almacén de datos RDBMS? ¿Cuáles son sus datos ahora?
Sean
1
¿Qué versión de ArcSDE estás usando? - ArcSDE 10 puede escribir en Postgres. resources.arcgis.com/content/arcsde/10.0/…
Mapperz
Si lees cuidadosamente la pregunta de Med, creo que realmente está tratando de replicar los datos en PostGIS para pruebas y publicación web hasta que pueda hacer una transición exitosa de ArcSDE. Entonces, el punto no es sincronizar ArSDE con PostGIS nativo a largo plazo, sino solo a corto plazo.
RyanKDalton-OffTheGridMaps
Quizás sincronizar fue una mala elección del título de la pregunta. De hecho, quiero esto como un método a corto plazo para mover y mantener conjuntos de datos de SDE a PostGIS. mi SDE tiene alrededor de 600 conjuntos de datos y no quiero duplicar los datos manualmente. Med (mr).
geosmiles

Respuestas:

19

En lugar de hacer una conversión DB -> archivo -> DB, donde Esri Shapefiles es el componente basado en un archivo intermediario, podría valer la pena investigar una transferencia DB -> DB más directa. Existen algunas herramientas que pueden hacer esto, pero solo me estoy centrando en las herramientas de código abierto GDAL / OGR .

Suponiendo que tiene un servidor de Windows, puede instalar fácilmente GDAL / OGR usando OSGeo4W . Con el modo de instalación avanzada, tiene la capacidad de seleccionar configuraciones de paquetes personalizados, como el controlador SDE (consulte esta lista de paquetes para asegurarse de que haya una coincidencia adecuada para su versión SDE; solo se admiten las versiones SDE 9.0 a 9.2). Estos paquetes son solo los encabezados y envoltorios, y requiere que instale las bibliotecas SDE, que debe tener en un CD / DVD ROM, y asegúrese de que las variables PATH estén configuradas adecuadamente para que GDAL / OGR las encuentre. Una instalación exitosa mostrará "SDE" en alguna parte con el siguiente comando en un shell OSGeo4W:ogr2ogr --formats

Después de configurar GDAL / OGR, puede usar algunas herramientas:

  • La herramienta de línea de comandos ogr2ogr de la cáscara OSGeo4W, que necesitará una orden algo como: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](también se puede explorar los diferentes -append, -overwriteo -updatelas opciones)
  • Copie y modifique un script Python existente que se conecta a SDE, y puede modificarlo para transferir datos a otra fuente de datos.

La advertencia principal de este método es que es complicado de configurar.

Mike T
fuente
+1 para una respuesta muy clara y útil. Aun siendo complicado, es un camino directo.
DEWright
En teoría, me gusta la idea de hacer una transferencia directa de base de datos, pero estoy buscando algo 'billy basic'. Sin embargo, estamos SDE 9.3.1 en el mes, por lo tanto, la respuesta anterior no es una go'a. Como digo, soy nuevo en PostGIS y SQL, ¡pero habría pensado que había un script 'por ahí' en el que podía automatizar una carga masiva!
geosmiles
1
La otra opción "DB-> DB" para todas las versiones de SDE (y cientos de otros formatos / DBs) es FME . FME no es gratuito (hay una prueba gratuita que puede probar), lo que significa que pueden proporcionar soporte para ayudar a su solución de sincronización. Pero esto obviamente requiere un presupuesto. La mejor opción es libre de adaptar un guión buena BAT con shp2pgsql, psql, etc.
Mike T
2
Una de las razones por las que escribí el controlador ArcObjects GDAL fue para hacer exactamente esto. Como tienen una licencia ESRI, querían mantener sus complejas FeatureClasses y descargarlas en PostGIS todas las noches. El controlador arcsde atraviesa la capa api de arcsde, pero el controlador arcobjects pasa, bueno, a través de los arcobjects. Lo hemos estado usando durante un año y ha funcionado bastante bien.
Ragi Yaser Burhum
¿Dónde obtienes el controlador "SDE" para que puedas usar ese script Python existente? No puedo encontrar ...
ePascoal
6

PostGIS tiene un cargador llamado shp2pgsql que puede usar para cargar archivos de forma en una base de datos PostGIS. Una de sus opciones ("-d") descarta la tabla de base de datos existente antes de cargar los datos. Debería ser bastante simple crear un archivo por lotes o un script que pueda recorrer todos los archivos de forma y cargarlos por usted.

Si desea obtener más detalles al respecto, puede instalar GDAL y utilizar las herramientas OGR (que tienen un conector ArcSDE) y omitir la exportación del archivo de forma. Puede encontrar información sobre el conector ArcSDE aquí .

lagerratrobe
fuente
En términos básicos de billy, cómo / qué escribiría un script (para agregarlo como una tarea programada de Windows) para eliminar una tabla existente, digamos que se llama Listed_Buildings y luego cargar una versión más nueva que se mantiene como un shp en D: \ sde_export.
geosmiles
1
¡El enfoque del archivo de forma es peor cuando el nombre del campo es mayor que 11 caracteres ya que se eliminarán otros 11 caracteres!
SIslam
1

Sé que llego tarde a la fiesta, pero hay otra opción para esto que evita tener 2 bases de datos.

Puede tener ArcSDE encima de Postgresql + Postgis. Este sería tu maestro y solo db.

ArcSDE se puede configurar para usar geometrías postgis y no st_geometries (propiedad de ESRI).

Esto significa que puede usar cualquier herramienta postgis para usar directamente las tablas espaciales cargadas / editadas de ArcSDE, ya que de hecho son tablas nativas postgis.

Por ejemplo, puede usar qgis para conectarse directamente a la base de datos postgis y leer los mismos datos que arcgis a través de arcsde.

Duarte Carreira
fuente
1

Otro enfoque sería utilizar un ETL espacial como Geokettle (código abierto).

http://www.spatialytics.org/projects/geokettle/

Uso Geokettle para mover datos entre el servidor SQL y PostGIS todo el tiempo. Sin embargo, si bien funciona bien con PostGIS, existen desafíos cuando se trabaja con el tipo de datos espaciales de SQL Server (consulte las sugerencias a continuación). Además, esto supone que está almacenando geometrías SDE como el tipo de datos espaciales nativos de SQL Server. Puede hacer esto con la palabra clave Geometry al cargar datos a través de ArcCatalog.

Sugerencia 1: al seleccionar datos del servidor sql, aplique .STAsText () al campo de geometría o Geokettle se ahogará con el tipo de datos del servidor sql.

Sugerencia 2: al insertar datos en el servidor sql, deberá insertar la geometría como texto en un campo de texto. Luego, use el paso sql para agregar una nueva columna de geometría (si es necesario) y llenarla desde la geometría del texto. De esa manera, utiliza SQL Server para construir la geometría a partir de una representación de texto estándar de una geometría OGC.

Sugerencia 3: asegúrese de registrar su nueva tabla espacial con SDE.

jmapping
fuente
para usar SDE.ST_AsText () necesitarás tener SDE.ST_GEOMETRY_SHAPELIB_PKG, ¿estoy en lo cierto?
ePascoal
0

Considere configurar la replicación de la base de datos en el 9.3 db original.
No funciona tan bien como el nuevo 10, pero ...
replica eso en otro sde en postgresql usando el tipo de datos postgis pg_geometry.

Aquí hay ayuda de esri
NOTA: Esto requerirá licencias duplicadas si ambos dbs no están en la misma máquina

Brad Nesom
fuente
¡Obtener una licencia duplicada parece estar derrotando el punto de duplicar a código abierto!
geosmiles
Si su base de datos original estuviera en postgresql, podría hacerlo todo en la misma base de datos (instancias multi-sde). O instale postgresql en la misma máquina que su sde. Si no, podría considerarlo desarrollo y comprar EDN (otro SDE) por el período intermedio ~ 2.5k años.
Brad Nesom el
0

Podría escribir ArcObjects a:

A) volcar su base de datos arcsde; B) Código simple de C # para generar shp2pgsql sqls; C) Código simple de C # para volcar tablas viejas; D) C # simple para ejecutar todos los shp2pgsql en su postgresql;

Puede usar el controlador npgsql para lograr esto, ejecutando funciones y sentencias sql directamente en su base de datos postgis;

George Silva
fuente
0

¿Cuál es su geometría ArcSDE ( almacenamiento de geodatabase en bases de datos relacionales )? En tal escenario, puede considerar usar el tipo ST_Geometry y luego usar las herramientas de replicación PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Este esquema puede tener la ventaja de utilizar las funciones de ArcSDE / ArcGIS / geodatabase para la edición (base de datos de edición) y las herramientas de código abierto para la difusión (base de datos de difusión replicada).

toto
fuente