Migrazione dei dati da ArcSDE a PostGIS?


19

Mi è stato suggerito di porre nuovamente questa domanda, ma forse formulato diversamente rispetto a come caricare in blocco più file di forma in PostGIS .

Sono nuovo di Postgis e sql ma voglio usare Postgis come slave (per il momento) di ArcSDE. Quindi quello che sto cercando è un aiuto per svegliare come potrei fare per caricare in batch i dati ArcSDE in PostGIS ogni notte.

Posso produrre uno script Python per esportare i dati ArcSDE in SHP ogni notte, ma non sono sicuro di come caricare in batch i file SHP esportati in PostGIS, sovrascrivendo quelli già esistenti in PostGis tutti come un'attività automatica (file batch immagino ).

Il mio grande piano è di sostituire ArcSDE / ArcGIS in tempo con PostGIS, QGIS e GeoServer o MapServer.


1
ArcSDE non gestisce un archivio dati RDBMS? Quali sono i tuoi dati ora?
Sean,

1
Quale versione di ArcSDE stai usando? - ArcSDE 10 può scrivere su Postgres. resources.arcgis.com/content/arcsde/10.0/…
Mapperz

Se leggi attentamente la domanda di Med, penso che stia davvero cercando di replicare i dati su PostGIS per scopi di test e pubblicazione sul web fino a quando non riesce a passare con successo da ArcSDE. Quindi il punto non è sincronizzare ArSDE con PostGIS nativo a lungo termine, ma solo a breve termine.
RyanKDalton-OffTheGridMaps

Forse la sincronizzazione era una scelta sbagliata del titolo della domanda. In effetti, voglio questo come metodo a breve termine per spostare e mantenere i set di dati da SDE a PostGIS. il mio SDE ha circa 600 set di dati su di esso e non voglio mirare manualmente ai dati. Med (sig.).
geosmiles

Risposte:


19

Invece di eseguire una conversione DB -> file -> DB, in cui Esri Shapefiles è il componente basato su file di middleman, potrebbe essere utile esaminare un trasferimento DB più diretto -> DB. Ci sono alcuni strumenti là fuori che possono farlo, ma mi sto concentrando solo sugli strumenti open source GDAL / OGR .

Supponendo che tu abbia un server Windows, puoi facilmente installare GDAL / OGR usando OSGeo4W . Con la modalità di installazione avanzata, hai la possibilità di selezionare configurazioni di pacchetto personalizzate, come il driver SDE (consulta questo elenco di pacchetti per assicurarti che vi sia una corrispondenza adatta per la tua versione SDE - sono supportate solo le versioni SDE da 9.0 a 9.2). Questi pacchetti sono solo le intestazioni e i wrapper e richiedono l'installazione delle librerie SDE, che dovresti avere su un CD / DVD ROM, e assicurarti che le variabili PATH siano impostate in modo appropriato affinché GDAL / OGR lo trovi. Una corretta installazione mostrerà "SDE" da qualche parte con il seguente comando in una shell OSGeo4W:ogr2ogr --formats

Dopo aver configurato GDAL / OGR, è possibile utilizzare alcuni strumenti:

  • Lo strumento da riga di comando ogr2ogr dalla shell OSGeo4W, che avrà bisogno di un comando simile al seguente: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](puoi anche esplorare i vari -append, -overwriteo le -updateopzioni)
  • Copia e modifica uno script Python esistente che si collega a SDE e puoi modificarlo per trasferire i dati a un'altra origine dati.

Il principale avvertimento di questo metodo è che è complicato da installare.


+1 per una risposta molto chiara e utile. Pur essendo complicato, è un percorso diretto.
DEWright

In teoria mi piace l'idea di fare un trasferimento diretto di DB ma sto cercando qualcosa di "billy basic". Tuttavia siamo SDE 9.3.1 al momento, quindi la risposta di cui sopra non è un go'a. Come ho già detto, sono nuovo in PostGIS e SQL, ma avrei pensato che ci fosse uno script "là fuori" in cui si poteva automatizzare un caricamento collettivo!
geosmiles

1
L'altra opzione "DB-> DB" per tutte le versioni di SDE (e centinaia di altri formati / DB) è FME . FME non è gratuito (esiste una versione di prova gratuita che è possibile testare), il che significa che possono fornire supporto per aiutare la soluzione di sincronizzazione. Ma questo ovviamente richiede un budget. La migliore opzione gratuita è quella di uno script su misura buona BAT con shp2pgsql, psqle così via
Mike T

2
Uno dei motivi per cui ho scritto il driver Arcalbjects GDAL è stato quello di fare esattamente questo. Poiché hanno una licenza ESRI, volevano mantenere le loro complesse FeatureClass e scaricarle su PostGIS ogni notte. Il driver arcsde passa attraverso il livello api arcsde, ma il driver arcobjects passa attraverso gli oggetti arco. Lo usiamo da un anno e ha funzionato abbastanza bene.
Ragi Yaser Burhum,

Dove si trova il driver "SDE" in modo da poter utilizzare quello script Python esistente? Non riesco a trovare ...
ePascoal,

6

PostGIS ha un caricatore chiamato shp2pgsql che puoi usare per caricare shapefile in un database PostGIS. Una delle sue opzioni ("-d") elimina la tabella del database esistente prima di caricare i dati. Dovrebbe essere abbastanza semplice creare un file batch o uno script in grado di scorrere tutti i file di forma e caricarli per te.

Se volevi diventare più elaborato, puoi installare GDAL e utilizzare gli strumenti OGR (che hanno un connettore ArcSDE) e saltare l'esportazione dello shapefile. Informazioni sul connettore ArcSDE sono disponibili qui .


In termini billy di base, come / cosa scriverei uno script (da aggiungere come attività pianificata di Windows) per eliminare una tabella esistente, diciamo che si chiama Listed_Buildings e quindi caricare una versione più recente di essa contenuta come shp in D: \ sde_export.
geosmiles

1
l'approccio shapefile è peggiore quando il nome del campo è maggiore di 11 caratteri poiché verranno eliminati altri 11 caratteri !!
SIslam,

1

So di essere in ritardo alla festa, ma c'è un'altra opzione per questo che evita di avere 2 database.

Puoi avere ArcSDE sopra Postgresql + Postgis. Questo sarebbe il tuo padrone e solo db.

ArcSDE può essere configurato per utilizzare geometrie postgis e non st_geometries (proprietario ESRI).

Ciò significa che è quindi possibile utilizzare qualsiasi strumento Postgis per utilizzare direttamente le tabelle spaziali caricate / modificate di ArcSDE, poiché in realtà sono tabelle native di Postgis.

Ad esempio puoi usare qgis per collegarti direttamente al database postgis e leggere gli stessi dati di arcgis tramite arcsde.


1

Un altro approccio sarebbe quello di utilizzare un ETL spaziale come Geokettle (open source).

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

Uso Geokettle per spostare continuamente i dati tra SQL Server e PostGIS. Tuttavia, sebbene funzioni bene con PostGIS, ci sono delle difficoltà quando si lavora con il tipo di dati spaziali di SQL Server (vedere i suggerimenti di seguito). Inoltre, ciò presuppone che si stiano memorizzando le geometrie SDE come tipo di dati spaziali nativi di SQL Server. È possibile farlo con la parola chiave Geometry quando si caricano i dati tramite ArcCatalog.

Suggerimento 1: quando si selezionano i dati DAL server sql applicare .STAsText () al campo della geometria o Geokettle si strozzerà sul tipo di dati del server sql.

Suggerimento 2: quando si inseriscono dati nel server sql, è necessario inserire la geometria come testo in un campo di testo. Quindi utilizzare il passo sql per aggiungere una nuova colonna geometrica (se necessario) e popolarla dalla geometria del testo. In questo modo si utilizza SQL Server per creare la geometria da una rappresentazione di testo standard OGC di una geometria.

Suggerimento 3: assicurati di registrare la tua nuova tabella spaziale con SDE.


per usare SDE.ST_AsText () dovrai avere SDE.ST_GEOMETRY_SHAPELIB_PKG, vero?
ePascoal,

0

Valutare la possibilità di impostare la replica del database sul database originale 9.3.
Non funziona come il nuovo 10 ma ...
replicalo su un altro sde in postgresql usando il tipo di dati postgis pg_geometry.

Ecco qualche aiuto con esri
NOTA: ciò richiederà licenze duplicate se entrambi i dbs non si trovano sulla stessa macchina


Ottenere una licenza duplicata sembra sconfiggere il punto di mirgrare all'open source!
geosmiles

Se il tuo db originale fosse in postgresql, potresti fare tutto nello stesso db (istanze multi-sde). O installa postgresql sullo stesso computer del tuo sde. Altrimenti potresti prendere in considerazione lo sviluppo e acquistare EDN (un altro sde) per l'intervallo ~ 2.5k anno.
Brad Nesom,

0

Puoi scrivere ArcObjects a:

A) scaricare il database arcsde; B) Codice c # semplice per generare sqls shp2pgsql; C) Codice c # semplice per scaricare vecchie tabelle; D) Plain c # per eseguire tutto shp2pgsql nel tuo postgresql;

Puoi usare il driver npgsql per raggiungere questo obiettivo, eseguendo funzioni e istruzioni sql direttamente nel tuo database Postgis;


0

Qual è la tua geometria ArcSDE ( archiviazione Geodatabase nei database relazionali )? In un tale scenario, è possibile prendere in considerazione l'utilizzo del tipo ST_Geometry e quindi utilizzare gli strumenti di replica PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Questo schema può avere il vantaggio di utilizzare le funzionalità ArcSDE / ArcGIS / geodatabase per l'edizione (database dell'edizione) e gli strumenti open source per la diffusione (database di diffusione replicato).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.