Перенесення даних з ArcSDE на PostGIS?


19

Було запропоновано, що я задаю це питання ще раз, але, можливо, сформульовано інакше, ніж як масово завантажувати декілька форм-файлів у PostGIS .

Я новачок у postgis та sql, але я хочу використовувати postgis як раб (на даний момент) для ArcSDE. Тому те, про що я хочу, - це допомога в пробудженні, як я можу щодня вести пакетне завантаження даних ArcSDE в PostGIS.

Я можу створити сценарій python для експорту даних ArcSDE у SHP щоночі, але я тоді не впевнений, як потім пакетно завантажувати експортовані файли SHP в PostGIS, перезаписуючи ті, які вже існували в postgis, все як автоматичне завдання (пакетний файл, я думаю, ).

Мій грандіозний план - вчасно замінити ArcSDE / ArcGIS на PostGIS, QGIS та GeoServer або MapServer.


1
Чи ArcSDE не керує сховищем даних RDBMS? Які ваші дані зараз?
Шон

1
Яку версію ArcSDE ви використовуєте? - ArcSDE 10 може писати на Postgres. resource.arcgis.com/content/arcsde/10.0/…
Mapperz

Якщо ви уважно читаєте питання Меда, я думаю, що він / він справді намагається копіювати дані на PostGIS для тестування та веб-публікацій, поки він не зможе успішно перейти з ArcSDE. Тому справа не в синхронізації ArSDE з рідною PostGIS на довгострокову перспективу, а лише на короткий термін.
RyanKDalton-OffTheGridMaps

Можливо, синхронізація була поганою обраною назвою питання. Дійсно, я хочу, щоб це був короткочасним методом переміщення та підтримки наборів даних від SDE до PostGIS. мій SDE має близько 600 наборів даних на ньому, і я не хочу відображати дані вручну. Мед (мр).
geosmiles

Відповіді:


19

Замість того, щоб робити DB -> file -> DB конверсію, де Esri Shapefiles є посередником файлового компонента, варто було б дослідити більш пряму передачу DB -> DB. Є кілька інструментів, які можуть це зробити, але я зосереджуюсь лише на інструментах GDAL / OGR з відкритим кодом .

Якщо припустити, що у вас є сервер Windows, ви можете легко встановити GDAL / OGR за допомогою OSGeo4W . У режимі розширеної установки ви маєте можливість вибирати власні конфігурації пакунків, такі як драйвер SDE (див. Цей перелік пакунків, щоб переконатися, що відповідність вашій версії SDE є відповідним - підтримуються лише версії SDE 9.0 до 9.2). Ці пакети - це лише заголовки та обгортки, і вам потрібно встановити бібліотеки SDE, які ви повинні мати на CD / DVD ROM, і переконатися, що змінні PATH належним чином встановлені для GDAL / OGR для її знаходження. Успішна установка десь покаже "SDE" із такою командою в оболонці OSGeo4W:ogr2ogr --formats

Після налаштування GDAL / OGR ви можете скористатися кількома інструментами:

  • Інструмент командного рядка ogr2ogr з OSGeo4W оболонки, яка буде потрібна команда що - щось на кшталт: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](ви також можете досліджувати різні -append, -overwriteабо -updateваріанти)
  • Скопіюйте та модифікуйте існуючий сценарій Python, який підключається до SDE, і ви можете змінити його для передачі даних до іншого джерела даних.

Найважливішим застереженням цього методу є те, що його складно налаштувати.


+1 за дуже чітку та корисну відповідь. Навіть будучи складним, це прямий шлях.
DEWright

Теоретично мені подобається ідея робити пряму передачу БД, але я шукаю щось "базове". Однак ми SDE 9.3.1 в мо, тому відповідь вище не йдеться. Як я кажу, я новачок у PostGIS та SQL, але я би подумав, що там був сценарій "там", де ви могли автоматизувати масове завантаження!
геосміли

1
Інший варіант "DB-> DB" для всіх версій SDE (і сотень інших форматів / DB) - це FME . FME не є безкоштовним (є безкоштовна пробна версія, яку ви можете протестувати), це означає, що вони можуть надати підтримку для вирішення проблеми синхронізації. Але для цього, очевидно, потрібен бюджет. Кращий вільний варіант кравець хороший BAT сценарій з shp2pgsql, psqlі так далі
Mike T

2
Однією з причин я написав драйвер ArcObjects GDAL, щоб зробити саме це. Оскільки вони мають ліцензію ESRI, вони хотіли підтримувати свої складні FeatureClasses і скидати їх на PostGIS щовечора. Драйвер arcsde проходить через арки ari-arpi шару, але драйвер arcobjects проходить, ну, через arcobjects. Ми використовуємо його вже рік, і він спрацював досить непогано.
Рагі Ясер Бурхум

Звідки ви отримуєте драйвер "SDE", щоб ви могли використовувати існуючий скрипт Python? Не можу знайти ...
ePascoal

6

PostGIS має завантажувач з іменем shp2pgsql, який можна використовувати для завантаження форм- файлів у базу даних PostGIS. Один із його параметрів ("-d") скидає існуючу таблицю бази даних перед завантаженням даних. Створити пакетний файл або скрипт, який може переглядати всі файли форм і досить завантажувати їх, слід досить просто.

Якщо ви хочете пофантазувати це, ви можете встановити GDAL та скористатися інструментами OGR (у яких є роз'єм ArcSDE) та пропустити експорт формфіле. Інформацію про роз'єм ArcSDE можна знайти тут .


У базовому виразі Біллі, як / що я напишу сценарій (який потрібно додати як заплановане завдання Windows), щоб скинути таблицю, що виходить, дозволити сказати її під назвою Listed_Buildings, а потім завантажити нову її версію, що зберігається як SHP в D: \ sde_export.
geosmiles

1
Підхід у формі файлу гірший, коли назва поля перевищує 11 знаків, оскільки інші 11 символів буде видалено !!
SIslam

1

Я знаю, що я спізнююся на вечірку, але є інший варіант для цього, який дозволяє уникнути наявності 2 баз даних.

Ви можете мати ArcSDE поверх Postgresql + Postgis. Це був би ваш господар і тільки db.

ArcSDE може бути налаштований на використання постгіс-геометрії, а не st_geometries (фірмову ESRI).

Це означає, що ви можете потім використовувати будь-який інструмент postgis для прямого використання завантажених / відредагованих просторових таблиць ArcSDE, оскільки вони насправді є натільними таблицями postgis.

Наприклад, ви можете використовувати qgis для прямого підключення до бази даних postgis і для читання тих же даних, що і arcgis, через arcsde.


1

Іншим підходом було б використання просторового ETL типу Geokettle (відкритий код).

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

Я використовую Geokettle для переміщення даних між сервером sql та PostGIS постійно. Однак, хоча він добре працює з PostGIS, є проблеми при роботі з типом просторових даних SQL Server (див. Підказки нижче). Крім того, це передбачає, що ви зберігаєте геодезії SDE як тип власних просторових даних SQL Server. Це можна зробити за допомогою ключового слова Geometry при завантаженні даних через ArcCatalog.

Підказка 1: при виборі даних із сервера sql застосуйте .STAsText () до поля геометрії або Geokettle задихається на типі даних сервера sql.

Підказка 2. Під час вставки даних на сервер sql sql вам потрібно буде вставити геометрію як текст у текстове поле. Потім скористайтеся кроком sql, щоб додати новий стовпець геометрії (якщо потрібно) і заповнити його з геометрії тексту. Таким чином ви використовуєте SQL Server для побудови геометрії зі стандартного представлення тексту OGC геометрії.

Підказка 3: Обов’язково зареєструйте свою нову просторову таблицю за допомогою SDE.


щоб використовувати SDE.ST_AsText (), вам потрібно мати SDE.ST_GEOMETRY_SHAPELIB_PKG, я прав?
ePascoal

0

Подумайте про налаштування реплікації бази даних на вихідні 9,3 дБ.
Це працює не так добре, як нові 10, але ...
реплікує це на інший sde в postgresql, використовуючи тип даних postgis pg_geometry.

Ось деяка допомога esri.
ПРИМІТКА. Для цього потрібні дублікати ліцензій, якщо обидва dbs не на одній машині


Отримання дублікату ліцензії, здається, перешкоджає зміцненню відкритого коду!
geosmiles

Якщо ваш початковий db був у postgresql, ви могли б зробити це все в тому ж db (multi-sde екземпляри). АБО встановіть postgresql на тій же машині, що і ваш sde. Якщо це не так, ви можете розглянути можливість розробки та придбати EDN (ще один sde) на проміжку ~ 2,5 тис. Років.
Бред Несом

0

Ви можете написати ArcObjects на:

А) скиньте свою базу даних arcsde; B) Простий c # код для створення shp2pgsql sqls; C) Простий c # код для скидання старих таблиць; D) Звичайна c #, щоб виконати всі shp2pgsql у ваш postgresql;

Ви можете використовувати драйвер npgsql для досягнення цього, виконуючи функції та оператори sql безпосередньо у вашу базу даних postgis;


0

Яка ваша геометрія ArcSDE ( сховище Geodatabase у реляційних базах даних )? У такому сценарії ви можете скористатися типом ST_Geometry, а потім використати реплікацію PostGre / PostGIS (реплікація PostGIS @ FOSS4G ). Ця схема може мати перевагу у використанні функцій ArcSDE / ArcGIS / geodatabase для видання (база даних видань) та інструментів відкритого коду для дифузії (реплікувана база даних дифузії).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.