Migrujesz dane z ArcSDE do PostGIS?

19

Zasugerowano, że zadam to pytanie jeszcze raz, ale być może sformułowane inaczej niż jak Zbiorcze ładowanie wielu plików kształtów do PostGIS .

Jestem nowy w Postgis i SQL, ale chcę używać PostGIS jako niewolnika (na razie) ArcSDE. Dlatego szukam pomocy w przebudzeniu, jak mogę co wieczór zajmować się przesyłaniem wsadowym danych ArcSDE do PostGIS.

Mogę stworzyć skrypt Pythona do eksportowania danych ArcSDE do SHP co noc, ale nie jestem pewien, jak następnie wsadowo przesłać wyeksportowane pliki SHP do PostGIS, zastępując te, które już istniały w Postgis, jako zadanie automatyczne (chyba plik wsadowy ).

Moim wielkim planem jest zastąpienie ArcSDE / ArcGIS na czas PostGIS, QGIS i GeoServer lub MapServer.

geosmile
źródło
1
Czy ArcSDE nie zarządza magazynem danych RDBMS? Jakie są teraz twoje dane?
Sean
1
Jakiej wersji ArcSDE używasz? - ArcSDE 10 może pisać do Postgres. resources.arcgis.com/content/arcsde/10.0/…
Mapperz
Jeśli uważnie przeczytasz pytanie Meda, myślę, że on / ona naprawdę próbuje replikować dane do PostGIS w celach testowych i publikowania w Internecie, dopóki nie uda mu się pomyślnie przejść z ArcSDE. Nie chodzi więc o synchronizację ArSDE z natywnym PostGIS na dłuższą metę, ale tylko na krótką metę.
RyanKDalton-OffTheGridMaps
Być może synchronizacja była kiepskim tytułem pytania. Rzeczywiście, chcę, aby była to krótkoterminowa metoda przenoszenia i zarządzania zestawami danych z SDE do PostGIS. mój SDE zawiera około 600 zestawów danych i nie chcę ręcznie kopiować danych. Med (mr).
geosmiles

Odpowiedzi:

19

Zamiast konwersji DB -> plik -> DB, w której Esri Shapefiles są komponentem opartym na plikach pośrednika, warto zbadać bardziej bezpośredni transfer DB -> DB. Istnieje kilka narzędzi, które mogą to zrobić, ale skupiam się tylko na narzędziach GDAL / OGR typu open source .

Zakładając, że masz Windows Server, możesz łatwo zainstalować GDAL / OGR za pomocą OSGeo4W . W trybie instalacji zaawansowanej możesz wybrać niestandardowe konfiguracje pakietów, takie jak sterownik SDE (zapoznaj się z listą pakietów, aby upewnić się, że pasują one do twojej wersji SDE - obsługiwane są tylko wersje SDE 9.0 do 9.2). Te pakiety są tylko nagłówkami i opakowaniami i wymagają zainstalowania bibliotek SDE, które powinieneś mieć na dysku CD / DVD ROM, i upewnienia się, że zmienne PATH są odpowiednio ustawione, aby GDAL / OGR je znalazł. Pomyślna instalacja pokaże gdzieś „SDE” za pomocą następującego polecenia w powłoce OSGeo4W:ogr2ogr --formats

Po skonfigurowaniu GDAL / OGR możesz użyć kilku narzędzi:

  • Wiersza polecenia narzędzie ogr2ogr z OSGeo4W powłoki, który będzie potrzebował czegoś podobnego polecenia: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](można również zbadać różne -append, -overwritelub -updateopcji)
  • Skopiuj i zmodyfikuj istniejący skrypt Pythona, który łączy się z SDE, i możesz go zmodyfikować, aby przenieść dane do innego źródła danych.

Głównym zastrzeżeniem tej metody jest to, że jej konfiguracja jest skomplikowana.

Mike T.
źródło
+1 za bardzo jasną i pomocną odpowiedź. Mimo że jest skomplikowana, jest to bezpośrednia ścieżka.
DEWright
Teoretycznie podoba mi się pomysł wykonania bezpośredniego transferu DB, ale szukam czegoś „podstawowego”. Jesteśmy jednak SDE 9.3.1, więc powyższa odpowiedź nie jest go'a. Jak mówię, jestem nowy w PostGIS i SQL, ale pomyślałem, że istnieje skrypt „tam”, w którym można zautomatyzować przesyłanie zbiorcze!
geosmile
1
Inną opcją „DB-> DB” dla wszystkich wersji SDE (i setek innych formatów / DB) jest FME . FME nie jest darmowy (istnieje bezpłatna wersja próbna, którą możesz przetestować), co oznacza, że ​​mogą zapewnić wsparcie w zakresie rozwiązania synchronizacji. Ale to oczywiście wymaga budżetu. Najlepszym rozwiązaniem jest darmowy skrypt dobry krawiec z BAT shp2pgsql, psqlitp
Mike T
2
Jednym z powodów, dla których napisałem sterownik ArcObjects GDAL, było właśnie to zrobić. Ponieważ mają licencję ESRI, chcieli utrzymać swoje złożone klasy FeatureClasses i co wieczór wyrzucać je do PostGIS. Sterownik arcsde przechodzi przez warstwę apcs arcsde, ale sterownik arcobjects przechodzi, no cóż, przez arcobjects. Używamy go od roku i działa całkiem nieźle.
Ragi Yaser Burhum
Skąd masz sterownik „SDE”, dzięki czemu możesz użyć istniejącego skryptu Python? Nie mogę znaleźć ...
ePascoal
6

PostGIS ma moduł ładujący o nazwie shp2pgsql , którego można użyć do załadowania plików shapefile do bazy danych PostGIS. Jedna z jego opcji („-d”) usuwa istniejącą tabelę bazy danych przed załadowaniem danych. Utworzenie pliku wsadowego lub skryptu, który może przechodzić przez wszystkie pliki kształtów i ładować je dla Ciebie, powinno być dość proste.

Jeśli chcesz uzyskać bardziej wyszukane informacje, możesz zainstalować GDAL i użyć narzędzi OGR (które mają złącze ArcSDE) i pominąć eksport pliku shapefile. Informacje na temat złącza ArcSDE można znaleźć tutaj .

lagerratrobe
źródło
Zasadniczo, w jaki sposób / co napisać skrypt (dodany jako zaplanowane zadanie systemu Windows), aby upuścić eksytuującą tabelę, powiedzmy, że nazywa się Listed_Buildings, a następnie prześlij jej nowszą wersję przechowywaną jako shp w D: \ sde_export.
geosmiles
1
podejście shapefile jest gorsze, gdy nazwa pola jest większa niż 11 znaków, ponieważ pozostałe 11 znaków zostanie usuniętych !!
SIslam,
1

Wiem, że jestem spóźniony na imprezę, ale jest na to inna opcja, która pozwala uniknąć posiadania 2 baz danych.

Możesz mieć ArcSDE na Postgresql + Postgis. To byłby twój master i tylko db.

ArcSDE można skonfigurować do korzystania z geometrii postgis, a nie st_geometries (zastrzeżonych przez ESRI).

Oznacza to, że możesz następnie użyć dowolnego narzędzia Postgis, aby bezpośrednio korzystać z załadowanych / edytowanych tabel przestrzennych ArcSDE, ponieważ w rzeczywistości są to tabele rodzime Postgis.

Na przykład możesz użyć qgis, aby połączyć się bezpośrednio z bazą danych Postgis i odczytać te same dane, co arcgis przez arcsde.

Duarte Carreira
źródło
1

Innym podejściem byłoby użycie przestrzennego ETL, takiego jak Geokettle (open source).

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

Używam Geokettle do ciągłego przesyłania danych między serwerem SQL a PostGIS. Jednak, choć działa dobrze z PostGIS, istnieją problemy podczas pracy z typem danych przestrzennych SQL Server (patrz wskazówki poniżej). Zakłada się również, że przechowujesz geometrie SDE jako rodzimy typ danych przestrzennych SQL Server. Można to zrobić za pomocą słowa kluczowego Geometry podczas ładowania danych przez ArcCatalog.

Wskazówka 1: podczas wybierania danych z serwera sql zastosuj .STAsText () do pola geometrii lub Geokettle zadławi się typem danych serwera sql.

Wskazówka 2: Wstawiając dane do serwera SQL, należy wstawić geometrię jako tekst do pola tekstowego. Następnie użyj kroku sql, aby dodać nową kolumnę geometrii (w razie potrzeby) i wypełnić ją z geometrii tekstu. W ten sposób używasz SQL Server do budowania geometrii ze standardowej reprezentacji tekstowej geometrii OGC.

Wskazówka 3: Zarejestruj nową tabelę przestrzenną w SDE.

jmapping
źródło
aby użyć SDE.ST_AsText (), musisz mieć SDE.ST_GEOMETRY_SHAPELIB_PKG, mam rację?
ePascoal
0

Rozważ skonfigurowanie replikacji bazy danych na oryginalnym pliku db o wartości 9.3.
Nie działa tak dobrze, jak nowa 10, ale ...
powiela to do innego sde w postgresql przy użyciu typu danych postgis pg_geometry.

Oto pomoc esri
UWAGA: Będzie to wymagać duplikatów licencji, jeśli oba dbs nie są na tym samym komputerze

Brad Nesom
źródło
Wydaje się, że uzyskanie duplikatu licencji pokonuje sens mirrowania do open source!
geosmiles
Jeśli twój oryginalny db był w postgresql, możesz to wszystko zrobić w tym samym db (instancje wielu sde). LUB zainstaluj postgresql na tym samym komputerze, co twój sde. Jeśli nie, możesz rozważyć jego rozwój i kupić EDN (kolejne SDE) za okres przejściowy ~ 2,5 tys. Lat.
Brad Nesom
0

Możesz pisać ArcObjects na:

A) zrzuć bazę danych arcsde; B) Zwykły kod c # do generowania sql shp2pgsql; C) Zwykły kod c # do zrzucania starych tabel; D) Zwykły c #, aby wykonać wszystkie shp2pgsql do postgresql;

Aby to osiągnąć, możesz użyć sterownika npgsql, wykonując funkcje i instrukcje SQL bezpośrednio w bazie danych Postgis;

George Silva
źródło
0

Jaka jest twoja geometria ArcSDE ( pamięć Geodatabase w relacyjnych bazach danych )? W takim scenariuszu możesz rozważyć użycie typu ST_Geometry, a następnie użyć narzędzi do replikacji PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Ten schemat może mieć tę zaletę, że korzysta z funkcji ArcSDE / ArcGIS / geodatabase do edycji (baza danych edycji) i narzędzi open source do rozpowszechniania (replikowana baza danych rozpowszechniania).

Toto
źródło