Memigrasi data dari ArcSDE ke PostGIS?

19

Sudah disarankan agar saya mengajukan pertanyaan ini lagi, tetapi mungkin kata-kata berbeda dari bagaimana cara Massal memuat beberapa shapefile ke PostGIS .

Saya baru mengenal postgis dan sql tetapi saya ingin menggunakan postgis sebagai budak (untuk saat ini) untuk ArcSDE. Karena itu yang saya cari adalah bantuan untuk mengetahui bagaimana cara saya mengunggah data ArcSDE ke PostGIS setiap malam.

Saya dapat menghasilkan skrip python untuk mengekspor data ArcSDE ke SHP setiap malam, tetapi saya kemudian tidak yakin bagaimana untuk kemudian mengunggah file SHP yang diekspor ke PostGIS, menimpa yang sudah ada di postgis semua sebagai tugas otomatis (file batch saya kira ).

Rencana besar saya adalah mengganti ArcSDE / ArcGIS tepat waktu dengan PostGIS, QGIS dan GeoServer atau MapServer.

geosmiles
sumber
1
Bukankah ArcSDE mengelola datastore RDBMS? Apa data Anda sekarang?
Sean
1
Versi ArcSDE apa yang Anda gunakan? - ArcSDE 10 dapat menulis ke Postgres. resources.arcgis.com/content/arcsde/10.0/…
Mapperz
Jika Anda membaca pertanyaan Med dengan seksama, saya pikir ia benar-benar mencoba untuk mereplikasi data ke PostGIS untuk keperluan pengujian dan penerbitan web sampai ia berhasil beralih dari ArcSDE. Jadi intinya bukan untuk menyinkronkan ArSDE ke PostGIS asli untuk jangka panjang, tetapi hanya untuk jangka pendek.
RyanKDalton-OffTheGridMaps
Mungkin sinkronisasi adalah pilihan judul pertanyaan yang buruk. Memang, saya ingin ini sebagai metode jangka pendek untuk memindahkan dan memelihara dataset dari SDE ke PostGIS. SDE saya memiliki sekitar 600 dataset di dalamnya dan saya tidak ingin melakukan mirgrating data secara manual. Med (mr).
geosmiles

Jawaban:

19

Daripada melakukan DB -> file -> konversi DB, di mana Esri Shapefile adalah komponen berbasis file perantara, mungkin lebih baik menyelidiki DB lebih langsung -> transfer DB. Ada beberapa alat di luar sana yang dapat melakukan ini, tapi saya hanya berfokus pada alat GDAL / OGR open source .

Dengan asumsi Anda memiliki Server Windows, Anda dapat dengan mudah menginstal GDAL / OGR menggunakan OSGeo4W . Dengan mode Instalasi Tingkat Lanjut, Anda memiliki kemampuan untuk memilih konfigurasi paket khusus, seperti driver SDE (lihat daftar paket ini untuk memastikan ada kecocokan yang cocok untuk versi SDE Anda - hanya versi SDE yang didukung 9.0 hingga 9.2). Paket-paket ini hanya header dan pembungkus, dan mengharuskan Anda untuk menginstal perpustakaan SDE, yang harus Anda miliki pada CD / DVD ROM, dan memastikan variabel PATH secara tepat diatur untuk GDAL / OGR untuk menemukannya. Instalasi yang berhasil akan menampilkan "SDE" di suatu tempat dengan perintah berikut dalam shell OSGeo4W:ogr2ogr --formats

Setelah Anda mengkonfigurasi GDAL / OGR, Anda dapat menggunakan beberapa alat:

  • Alat baris perintah ogr2ogr dari shell OSGeo4W, yang akan membutuhkan perintah seperti: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](Anda juga dapat menjelajahi berbagai -append, -overwriteatau -updateopsi)
  • Salin dan modifikasi skrip Python yang ada yang terhubung ke SDE, dan Anda bisa memodifikasinya untuk mentransfer data ke sumber data lain.

Peringatan utama untuk metode ini adalah rumitnya pengaturan.

Mike T
sumber
+1 untuk respons yang sangat jelas dan bermanfaat. Bahkan menjadi rumit, itu adalah jalan langsung.
DEWright
Secara teori saya suka ide melakukan transfer DB langsung tapi saya sedang mencari sesuatu 'billy basic'. Namun kami SDE 9.3.1 di bulan ini, oleh karena itu jawaban di atas bukan go'a. Seperti yang saya katakan saya baru untuk PostGIS dan SQL tetapi saya akan berpikir bahwa ada skrip 'di luar sana' di mana Anda dapat mengotomatiskan unggahan massal!
geosmiles
1
Opsi "DB-> DB" lainnya untuk semua versi SDE (dan ratusan format / DB lainnya) adalah FME . FME tidak bebas (ada uji coba gratis yang dapat Anda uji), yang berarti mereka dapat memberikan dukungan untuk membantu solusi sinkronisasi Anda. Tapi ini jelas membutuhkan anggaran. Pilihan bebas terbaik adalah dengan penjahit naskah yang baik BAT dengan shp2pgsql, psql, dll
Mike T
2
Salah satu alasan saya menulis driver ArcALbjects GDAL adalah untuk melakukan hal ini. Karena mereka memiliki lisensi ESRI, mereka ingin mempertahankan FeatureClasses mereka yang kompleks dan membuangnya ke PostGIS setiap malam. Driver arcsde melewati lapisan api arcsde, tetapi driver arcobjects berjalan, well, melalui arcobjects. Kami telah menggunakannya selama setahun dan telah bekerja dengan cukup baik.
Ragi Yaser Burhum
Di mana Anda mendapatkan driver "SDE" sehingga Anda dapat menggunakan skrip Python yang ada? Saya tidak dapat menemukan ...
ePascoal
6

PostGIS memiliki loader bernama shp2pgsql yang dapat Anda gunakan untuk memuat shapefile ke dalam database PostGIS. Salah satu opsinya ("-d") menjatuhkan tabel database yang ada sebelum memuat data. Seharusnya cukup sederhana untuk membuat file batch atau skrip yang dapat di-loop melalui semua shapefile dan memuatnya untuk Anda.

Jika Anda ingin lebih menyukainya, Anda dapat menginstal GDAL, dan menggunakan alat OGR (yang memiliki konektor ArcSDE) dan melewatkan ekspor shapefile. Info tentang konektor ArcSDE dapat ditemukan di sini .

lagerratrobe
sumber
Dalam istilah dasar billy, bagaimana / apa yang akan saya tulis skrip (akan ditambahkan sebagai tugas terjadwal windows) untuk menjatuhkan tabel yang ada, katakanlah namanya Listed_Buildings dan kemudian unggah versi yang lebih baru yang disimpan sebagai shp di D: \ sde_export.
geosmiles
1
pendekatan shapefile lebih buruk ketika nama bidang lebih besar dari 11 karakter karena 11 karakter lainnya akan dihapus !!
SIslam
1

Saya tahu saya terlambat ke pesta tetapi ada opsi lain untuk ini yang menghindari memiliki 2 database.

Anda dapat memiliki ArcSDE di atas Postgresql + Postgis. Ini akan menjadi tuanmu dan hanya db.

ArcSDE dapat dikonfigurasi untuk menggunakan geometri postgis dan bukan st_geometries (hak milik ESRI).

Ini berarti Anda kemudian dapat menggunakan alat postgis apa pun untuk secara langsung menggunakan tabel spasial yang dimuat / diedit ArcSDE, karena sebenarnya itu adalah tabel asli postgis.

Misalnya Anda dapat menggunakan qgis untuk terhubung ke database postgis secara langsung dan membaca data yang sama seperti arcgis melalui arcsde.

Duarte Carreira
sumber
1

Pendekatan lain adalah dengan menggunakan ETL spasial seperti Geokettle (open source).

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

Saya menggunakan Geokettle untuk memindahkan data antara sql server dan PostGIS sepanjang waktu. Namun, sementara itu bekerja dengan baik dengan PostGIS ada tantangan ketika bekerja dengan tipe data spasial SQL Server (lihat petunjuk di bawah). Juga, ini mengasumsikan Anda menyimpan geometri SDE sebagai tipe data spasial asli SQL Server. Anda dapat melakukan ini dengan kata kunci Geometri saat memuat data melalui ArcCatalog.

Petunjuk 1: ketika memilih data DARI server sql, terapkan .STAsText () ke bidang geometri atau Geokettle akan tersedak pada tipe data server sql.

Petunjuk 2: Saat memasukkan data ke dalam sql server, Anda harus memasukkan geometri sebagai teks ke dalam bidang teks. Kemudian gunakan langkah sql untuk menambahkan kolom geometri baru (jika perlu) dan mengisinya dari geometri teks. Dengan begitu Anda menggunakan SQL Server untuk membangun geometri dari representasi teks standar OGC dari geometri.

Petunjuk 3: Pastikan untuk mendaftarkan tabel spasial baru Anda dengan SDE.

pemetaan
sumber
untuk menggunakan SDE.ST_AsText () Anda harus memiliki SDE.ST_GEOMETRY_SHAPELIB_PKG, apakah saya benar?
ePascoal
0

Pertimbangkan pengaturan replikasi basis data pada 9,3 db asli.
Itu tidak berfungsi sebaik 10 yang baru tetapi ...
meniru itu ke sde lain di postgresql menggunakan pg_geometry tipe data postgis.

Berikut adalah beberapa bantuan esri
CATATAN: Ini akan memerlukan lisensi duplikat jika kedua dbs tidak berada di mesin yang sama

Brad Nesom
sumber
Mendapatkan lisensi duplikat tampaknya mengalahkan titik mirgrating menjadi open source!
geosmiles
Jika db asli Anda berada di postgresql, Anda bisa melakukan semuanya dalam db yang sama (instance multi-sde). ATAU instal postgresql pada mesin yang sama dengan sde Anda. Jika tidak, Anda mungkin mempertimbangkan pengembangan dan membeli EDN (sde lain) untuk sementara ~ 2.5rb.
Brad Nesom
0

Anda dapat menulis ArcObjects ke:

A) buang basis data arcsde Anda; B) Kode c # biasa untuk menghasilkan sql shp2pgsql; C) Kode c # biasa untuk membuang tabel lama; D) Biasa c # untuk mengeksekusi semua shp2pgsql ke postgresql Anda;

Anda dapat menggunakan driver npgsql untuk mencapai ini, menjalankan fungsi dan pernyataan sql langsung ke dalam database postgis Anda;

George Silva
sumber
0

Apa geometri ArcSDE Anda ( penyimpanan Geodatabase dalam database relasional )? Dalam skenario seperti itu, Anda dapat mempertimbangkan menggunakan tipe ST_Geometry dan kemudian menggunakan replikasi PostGre / PostGIS ( PostGIS Replication @ FOSS4G ) alat. Skema ini mungkin memiliki keuntungan menggunakan fitur ArcSDE / ArcGIS / geodatabase untuk edisi (basis data edisi) dan alat sumber terbuka untuk difusi (replikasi basis data difusi).

toto
sumber