Миграция данных из 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. resources.arcgis.com/content/arcsde/10.0/…
Mapperz

Если вы внимательно прочитаете вопрос Меда, я думаю, он действительно пытается скопировать данные в PostGIS для тестирования и публикации в Интернете, пока он не сможет успешно выйти из ArcSDE. Таким образом, смысл не в том, чтобы синхронизировать ArSDE с нативным PostGIS на длительный срок, а только на короткий срок.
RyanKDalton-OffTheGridMaps

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

Ответы:


19

Вместо того чтобы выполнять преобразование DB -> file -> DB, где Esri Shapefiles является компонентом-посредником, основанным на файлах, возможно, стоит изучить более прямую передачу DB -> DB. Есть несколько инструментов, которые могут сделать это, но я сосредоточен только на инструментах GDAL / OGR с открытым исходным кодом .

Предполагая, что у вас есть Windows Server, вы можете легко установить 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, они хотели поддерживать свои сложные классы FeatureClass и выгружать их в PostGIS каждую ночь. Драйвер arcsde проходит через уровень API arcsde, но драйвер arcobjects проходит через arcobjects. Мы использовали его в течение года, и он работал довольно хорошо.
Раги Язер Бурхум

Где взять драйвер «SDE», чтобы использовать этот существующий скрипт Python? Я не могу найти ...
ePascoal

6

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

Если вы хотите узнать больше об этом, вы можете установить GDAL и использовать инструменты OGR (которые имеют разъем ArcSDE) и пропустить экспорт shapefile. Информацию о разъеме ArcSDE можно найти здесь .


В общих чертах, как / что бы я написал скрипт (который будет добавлен в качестве запланированной задачи Windows), чтобы отбросить существующую таблицу, скажем, что она называется Listed_Buildings, а затем загрузить ее более новую версию, хранящуюся как shp в D: \ sde_export.
geosmiles

1
Подход к шейп-файлу хуже, когда имя поля больше 11 символов, так как остальные 11 символов будут удалены !!
SIslam

1

Я знаю, что опаздываю на вечеринку, но есть еще один вариант, который позволяет избежать двух баз данных.

Вы можете использовать ArcSDE поверх Postgresql + Postgis. Это был бы твой хозяин и только дб.

ArcSDE может быть настроен для использования геометрии postgis, а не st_geometries (ESRI проприетарно).

Это означает, что вы можете использовать любой инструмент postgis для непосредственного использования загруженных / отредактированных пространственных таблиц ArcSDE, поскольку они на самом деле являются собственными таблицами postgis.

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


1

Другой подход заключается в использовании пространственного ETL, такого как Geokettle (с открытым исходным кодом).

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

Я использую Geokettle для перемещения данных между SQL Server и PostGIS все время. Однако, хотя он хорошо работает с PostGIS, при работе с пространственным типом данных SQL Server возникают проблемы (см. Советы ниже). Кроме того, это предполагает, что вы сохраняете геометрию SDE как собственный пространственный тип данных SQL Server. Вы можете сделать это с помощью ключевого слова Geometry при загрузке данных через ArcCatalog.

Подсказка 1: при выборе данных с сервера sql примените .STAsText () к полю геометрии, иначе Geokettle захлебнется типом данных сервера sql.

Подсказка 2: при вставке данных на сервер 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
ПРИМЕЧАНИЕ. Для этого потребуются дубликаты лицензий, если обе базы данных находятся не на одной машине.


Получение дубликата лицензии, кажется, побеждает точку соприкосновения с открытым исходным кодом!
geosmiles

Если бы ваш исходный db был в postgresql, вы могли бы сделать все это в одном и том же db (несколько экземпляров 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 ( хранилище базы геоданных в реляционных базах данных )? В таком сценарии вы можете рассмотреть возможность использования типа ST_Geometry и затем использовать инструменты репликации PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Эта схема может иметь преимущество в использовании возможностей ArcSDE / ArcGIS / базы геоданных для редакции (база данных редакции) и инструментов с открытым исходным кодом для распространения (реплицированная база данных диффузии).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.