Veriler ArcSDE'den PostGIS'e mi taşınıyor?


19

Bu soruyu tekrar sormam önerildi, ancak belki de PostGIS'e birden fazla şekil dosyasını nasıl yükleyeceğinden farklı bir şekilde ifade edildi .

Postgis ve sql için yeniyim ama postgis'i (şimdilik) ArcSDE'ye bir köle olarak kullanmak istiyorum. Bu yüzden sonra ne olduğumu nasıl toplu her gece PostSG ArcSDE veri yükleme toplu iş hakkında gitmek woking bazı yardım.

Her gece SHP içine ArcSDE verilerini vermek için bir python komut dosyası üretebilirim, ancak daha sonra postgis'te zaten mevcut olanların üzerine otomatik bir görev (toplu iş dosyası sanırım) üzerine yazarak PostGIS'e toplu SHP dosyalarını nasıl yükleyeceğinden emin değilim. ).

Benim büyük planım ArcSDE / ArcGIS'i zamanında PostGIS, QGIS ve GeoServer veya MapServer ile değiştirmektir.


1
ArcSDE bir RDBMS veri deposunu yönetmiyor mu? Şu andaki verileriniz nedir?
Sean

1
Hangi ArcSDE sürümünü kullanıyorsunuz? - ArcSDE 10 Postgres'e yazabilir. resources.arcgis.com/content/arcsde/10.0/…
Mapperz

Med'in sorusunu dikkatlice okursanız, gerçekten ArcSDE'den başarılı bir şekilde geçiş yapana kadar test ve web yayınlama amaçları için verileri PostGIS'e kopyalamaya çalıştığını düşünüyorum. Yani mesele ArSDE'yi uzun vadede yerel PostGIS ile senkronize etmek değil, sadece kısa vadede.
RyanKDalton-OffTheGridMaps

Eşitleme belki de soru başlığı seçiminde zayıftı. Aslında, bunu veri kümelerini SDE'den PostGIS'e taşımak ve sürdürmek için kısa vadeli bir yöntem olarak istiyorum. SDE'mde yaklaşık 600 veri kümesi var ve verileri manuel olarak taşımak istemiyorum. Med (Bay).
geosmiles

Yanıtlar:


19

Esri Shapefiles'in aracı dosya tabanlı bileşeni olduğu bir DB -> file -> DB dönüşümü yapmak yerine, daha doğrudan bir DB -> DB aktarımını araştırmak faydalı olabilir. Bunu yapabilen birkaç araç var, ama sadece açık kaynak GDAL / OGR araçlarına odaklanıyorum .

Windows Server'ınız olduğunu varsayarsak, OSGeo4W kullanarak GDAL / OGR'yi kolayca yükleyebilirsiniz . Gelişmiş Yükleme moduyla, SDE sürücüsü gibi özel paket yapılandırmalarını seçme olanağınız vardır (SDE sürümünüz için uygun bir eşleşme olduğundan emin olmak için bu paketler listesine bakın - yalnızca SDE 9.0 - 9.2 sürümleri desteklenir). Bu paketler yalnızca üstbilgiler ve sarmalayıcılardır ve bir CD / DVD ROM'a sahip olmanız gereken SDE kitaplıklarını yüklemenizi ve PATH değişkenlerinin bulmak için GDAL / OGR için uygun şekilde ayarlandığından emin olmanızı gerektirir. Başarılı bir yükleme, bir OSGeo4W kabuğunda aşağıdaki komutla bir yerde "SDE" gösterir:ogr2ogr --formats

GDAL / OGR'yi yapılandırdıktan sonra birkaç araç kullanabilirsiniz:

  • Komut satırı aracı ogr2ogr gibi bir komut şeye ihtiyacım olacak OSGeo4W kabuğundan,: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](aynı zamanda çeşitli keşfedebilirsiniz -append, -overwriteya -updateseçenekleri)
  • SDE'ye bağlanan mevcut bir Python betiğini kopyalayın ve değiştirin ; bunu başka bir veri kaynağına veri aktarmak için değiştirebilirsiniz.

Bu yöntemin ana uyarısı, kurulumun karmaşık olmasıdır.


+1 çok net ve yararlı bir yanıt için. Karmaşık olsa bile, doğrudan bir yoldur.
DEWright

Teorik olarak doğrudan DB aktarımı yapma fikrini seviyorum ama 'billy basic' bir şey arıyorum. Ancak biz SDE 9.3.1 biz mo, bu nedenle yukarıdaki cevap bir go'a değildir. Dediğim gibi PostGIS ve SQL için yeniyim ama toplu bir yüklemeyi otomatikleştirebileceğiniz bir 'dışarıda' senaryosu olduğunu düşünürdüm!
geosmiles

1
SDE'nin tüm sürümleri (ve yüzlerce başka biçim / DB) için diğer "DB-> DB" seçeneği FME'dir . FME ücretsiz değildir (test edebileceğiniz ücretsiz bir deneme vardır), bu da senkronizasyon çözümünüze yardımcı olmak için destek sağlayabilecekleri anlamına gelir. Ancak bu açıkça bir bütçe gerektiriyor. En iyi ücretsiz seçenek terziye ile iyi bir BAT script shp2pgsql, psqlvb
Mike T

2
ArcObjects GDAL sürücüsünü yazmamın nedenlerinden biri de tam olarak bunu yapmaktı. ESRI lisansına sahip oldukları için karmaşık FeatureClasses'larını korumak ve her gece PostGIS'e atmak istediler. Arcsde sürücüsü arcsde api katmanından geçer, ancak arcobjects sürücüsü arcobjects üzerinden geçer. Biz bir yıldır kullanıyor ve oldukça güzel çalıştı.
Ragi Yaser Burhum

Oradaki Python betiğini kullanabilmek için "SDE" sürücüsünü nereden edinebilirsiniz?
Bulamıyorum

6

PostGIS adında bir yükleyici vardır shp2pgsql bir PostGIS veritabanına shapefiles yüklemek için kullanabileceğiniz. Seçeneklerinden biri ("-d") verileri yüklemeden önce mevcut veritabanı tablosunu bırakır. Tüm şekil dosyalarında dolaşıp sizin için yükleyebilen bir toplu iş dosyası veya komut dosyası oluşturmak oldukça basit olmalıdır.

Bu konuda meraklı olmak istiyorsanız, GDAL'ı yükleyebilir ve OGR araçlarını (bir ArcSDE konektörü olan) kullanabilir ve şekil dosyası dışa aktarmayı atlayabilirsiniz. ArcSDE konektörüyle ilgili bilgileri burada bulabilirsiniz .


Billy temel terimlerle, varolan bir tabloyu bırakmak için bir komut dosyası nasıl yazılır (Windows zamanlanmış görev olarak eklenecek), Listed_Buildings adlı diyelim ve daha sonra D: shp olarak tutulan yeni bir sürümünü yükleyelim sde_export.
geosmiles

1
Diğer 11 karakter silineceğinden alan adı 11 karakterden büyük olduğunda şekil dosyası yaklaşımı daha kötüdür !!
SIslam

1

Partiye geç kaldığımı biliyorum ama bunun için 2 veritabanına sahip olmaktan kaçınan başka bir seçenek var.

ArcSDE'yi Postgresql + Postgis'in üstünde bulabilirsiniz. Bu senin efendin ve sadece db olurdu.

ArcSDE, st_geometrileri (ESRI'ya özel) değil postgis geometrilerini kullanacak şekilde yapılandırılabilir.

Bu, daha sonra ArcSDE yüklü / düzenlenmiş uzamsal tabloları doğrudan kullanmak için herhangi bir postgis aracını kullanabileceğiniz anlamına gelir, çünkü bunlar aslında postgis yerel tablolarıdır.

Örneğin, postgis veritabanına doğrudan bağlanmak için qgis kullanabilirsiniz ve arcsde üzerinden arcgis ile aynı verileri okuyabilirsiniz.


1

Başka bir yaklaşım, Geokettle (açık kaynak) gibi bir uzaysal ETL kullanmak olacaktır.

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

Her zaman sql sunucusu ve PostGIS arasında veri taşımak için Geokettle kullanın. Bununla birlikte, PostGIS ile iyi çalışmasına rağmen, SQL Server'ın uzamsal veri türüyle çalışırken zorluklar vardır (aşağıdaki ipuçlarına bakın). Ayrıca, SDE geometrilerini SQL Server yerel uzamsal veri türü olarak depoladığınızı varsayar. Bunu ArcCatalog üzerinden veri yüklerken Geometry anahtar sözcüğü ile yapabilirsiniz.

İpucu 1: sql sunucudan veri seçerken geometri alanına .STAsText () uygulayın veya Geokettle sql sunucusu veri türünde boğulur.

İpucu 2: Veri sql sunucusuna veri eklerken, geometriyi bir metin alanına metin olarak eklemeniz gerekir. Ardından yeni bir geometri sütunu eklemek için sql adımını kullanın (gerekirse) ve metin geometrisinden doldurun. Bu şekilde geometriyi bir geometrinin OGC standart metin temsilinden oluşturmak için SQL Server'ı kullanırsınız.

İpucu 3: Yeni uzamsal tablonuzu SDE'ye kaydettiğinizden emin olun.


SDE.ST_AsText () kullanmak için SDE.ST_GEOMETRY_SHAPELIB_PKG'ye ihtiyacınız olacak, doğru mu?
ePascoal

0

Orijinal 9.3 db'de veritabanı çoğaltması ayarlamayı düşünün.
Yeni 10 kadar iyi çalışmaz ama ...
postgresql'de pg_geometry postgis veri türünü kullanarak bunu başka bir sde'ye çoğaltır.

İşte bazı esri yardımı
NOT: Her iki dbs de aynı makinede değilse, bu yinelenen lisanslar gerektirir


Yinelenen bir lisans almak, açık kaynağa geçiş noktasını yeniyor gibi görünüyor!
geosmiles

Orijinal db postgresql içinde olsaydı hepsini aynı db (multi-sde örnekleri) yapabilirsiniz. VEYA postgresql sde ile aynı makineye yükleyin. Değilse geliştirme düşünebilir ve geçici ~ 2.5k yıl için EDN (başka bir sde) satın alabilirsiniz.
Brad Nesom

0

ArcObjects için şunları yazabilirsiniz:

A) arcsde veritabanınızı dökümü; B) shp2pgsql sqls oluşturmak için düz c # kodu; C) Eski tabloları dökmek için düz c # kodu; D) postgresql içine tüm shp2pgsql yürütmek için düz c #;

Bunu yapmak için npgsql sürücüsünü kullanabilirsiniz, fonksiyonları ve sql deyimlerini doğrudan postgis veritabanınıza yürütebilirsiniz;


0

ArcSDE geometrisiniz nedir ( ilişkisel veritabanlarında coğrafi veritabanı depolama alanı )? Böyle bir senaryoda, ST_Geometry türünü kullanmayı ve ardından PostGre / PostGIS çoğaltma ( PostGIS Replication @ FOSS4G ) araçlarını kullanmayı düşünebilirsiniz . Bu şema, sürüm (sürüm veritabanı) için ArcSDE / ArcGIS / coğrafi veri tabanı özelliklerini ve difüzyon için açık kaynak araçlarını (çoğaltılmış difüzyon veritabanı) kullanma avantajına sahip olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.