Migrando dados do ArcSDE para o PostGIS?


19

Foi sugerido que eu faça essa pergunta novamente, mas talvez tenha uma redação diferente de como carregar em massa vários shapefiles no PostGIS .

Eu sou novo no postgis e no sql, mas quero usar o postgis como escravo (por enquanto) do ArcSDE. Portanto, o que estou procurando é alguma ajuda para descobrir como posso fazer o upload em lote de dados do ArcSDE no PostGIS todas as noites.

Posso produzir um script python para exportar dados do ArcSDE para o SHP todas as noites, mas não sei como fazer o upload em lote dos arquivos SHP exportados para o PostGIS, substituindo os que já existiam no postgis como uma tarefa automática (arquivo em lote, acho) )

Meu grande plano é substituir o ArcSDE / ArcGIS a tempo pelo PostGIS, QGIS e GeoServer ou MapServer.


1
O ArcSDE não gerencia um armazenamento de dados RDBMS? Quais são seus dados agora?
Sean

1
Qual versão do ArcSDE você está usando? - O ArcSDE 10 pode escrever no Postgres. resources.arcgis.com/content/arcsde/10.0/...
Mapperz

Se você ler atentamente a pergunta de Med, acho que ele está realmente tentando replicar os dados no PostGIS para fins de teste e publicação na web, até que possa fazer a transição do ArcSDE com êxito. Portanto, o objetivo não é sincronizar o ArSDE com o PostGIS nativo a longo prazo, mas apenas a curto prazo.
RyanKDalton-OffTheGridMaps

Talvez a sincronização tenha sido uma má escolha do título da pergunta. Na verdade, eu quero isso como um método de curto prazo para mover e manter conjuntos de dados do SDE para o PostGIS. meu SDE tem cerca de 600 conjuntos de dados e eu não quero mirgrating os dados manualmente. Med (mr).
Geosmiles

Respostas:


19

Em vez de fazer uma conversão DB -> arquivo -> DB, em que os Esri Shapefiles são o componente baseado em arquivo intermediário, pode valer a pena investigar uma transferência mais direta de DB -> DB. Existem algumas ferramentas por aí que podem fazer isso, mas estou focando apenas as ferramentas GDAL / OGR de código aberto .

Supondo que você tenha um Windows Server, é possível instalar facilmente o GDAL / OGR usando o OSGeo4W . Com o modo Instalação Avançada, você pode selecionar configurações personalizadas de pacotes, como o driver SDE (consulte esta lista de pacotes para garantir que haja uma correspondência adequada para sua versão do SDE - somente as versões 9.0 a 9.2 do SDE são suportadas). Esses pacotes são apenas os cabeçalhos e invólucros e requer a instalação das bibliotecas SDE, que você deve ter em um CD / DVD ROM, e assegura que as variáveis ​​PATH estejam configuradas adequadamente para serem encontradas pelo GDAL / OGR. Uma instalação bem-sucedida mostrará "SDE" em algum lugar com o seguinte comando em um shell do OSGeo4W:ogr2ogr --formats

Depois de configurar o GDAL / OGR, você pode usar algumas ferramentas:

  • A linha de comando ferramenta ogr2ogr do shell OSGeo4W, que vai precisar de um comando algo como: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](você também pode explorar os vários -append, -overwriteou -updateopções)
  • Copie e modifique um script Python existente que se conecte ao SDE e você poderá modificá-lo para transferir dados para outra fonte de dados.

A principal advertência para esse método é que é complicado de configurar.


+1 para uma resposta muito clara e útil. Mesmo sendo complicado, é um caminho direto.
DEWright

Em teoria, eu gosto da idéia de fazer uma transferência direta de banco de dados, mas estou procurando algo "básico básico". No entanto, estamos no SDE 9.3.1 no momento, portanto, a resposta acima não é boa. Como eu digo, sou novo no PostGIS e SQL, mas eu pensaria que havia um script 'lá fora' onde você poderia automatizar um upload em massa!
Geosmiles

1
A outra opção "DB-> DB" para todas as versões do SDE (e centenas de outros formatos / DBs) é FME . O FME não é gratuito (existe uma avaliação gratuita que você pode testar), o que significa que eles podem fornecer suporte para ajudar sua solução de sincronização. Mas isso obviamente requer um orçamento. A melhor opção é livre para adaptar um roteiro bom BAT com shp2pgsql, psqletc.
Mike T

2
Uma das razões pelas quais escrevi o driver ArcObjects GDAL foi fazer exatamente isso. Como eles têm uma licença ESRI, eles queriam manter suas complexas FeatureClasses e despejá-las no PostGIS todas as noites. O driver do arcsde passa pela camada da API do arcsde, mas o driver dos arcobjects passa, bem, pelos arcobjects. Nós o usamos há um ano e funcionou muito bem.
Ragi Yaser Burhum em

Onde você obtém o driver "SDE" para poder usar o script Python existente? Não consigo encontrar ...
ePascoal 16/10

6

O PostGIS possui um carregador chamado shp2pgsql que você pode usar para carregar shapefiles em um banco de dados PostGIS. Uma de suas opções ("-d") descarta a tabela de banco de dados existente antes de carregar os dados. Deve ser bastante simples criar um arquivo ou script em lote que possa percorrer todos os shapefiles e carregá-los para você.

Se você quisesse ficar mais chocado com isso, poderia instalar o GDAL e usar as ferramentas OGR (que possuem um conector ArcSDE) e pular a exportação do shapefile. Informações sobre o conector ArcSDE podem ser encontradas aqui .


Em termos básicos, como / o que eu escreveria um script (para ser adicionado como uma tarefa agendada do Windows) para soltar uma tabela existente, digamos que seja chamado Listed_Buildings e, em seguida, fazer upload de uma versão mais recente dele realizada como shp em D: \ sde_export.
Geosmiles

1
A abordagem shapefile é pior quando o nome do campo é maior que 11 caracteres, pois outros 11 caracteres serão excluídos!
SIslam

1

Eu sei que estou atrasado para a festa, mas há outra opção para isso que evita ter 2 bancos de dados.

Você pode ter o ArcSDE no topo do Postgresql + Postgis. Este seria o seu mestre e apenas db.

O ArcSDE pode ser configurado para usar geometrias postgis e não st_geometries (propriedade da ESRI).

Isso significa que você pode usar qualquer ferramenta postgis para usar diretamente as tabelas espaciais carregadas / editadas do ArcSDE, uma vez que elas são de fato tabelas nativas do postgis.

Por exemplo, você pode usar o qgis para conectar-se diretamente ao banco de dados postgis e ler os mesmos dados do arcgis no arcsde.


1

Outra abordagem seria usar um ETL espacial como Geokettle (código aberto).

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

Eu uso o Geokettle para mover dados entre o servidor sql e o PostGIS o tempo todo. No entanto, embora funcione bem com o PostGIS, há desafios ao trabalhar com o tipo de dados geográficos do SQL Server (consulte as dicas abaixo). Além disso, isso pressupõe que você esteja armazenando geometrias SDE como o tipo de dados espaciais nativos do SQL Server. Você pode fazer isso com a palavra-chave Geometry ao carregar dados através do ArcCatalog.

Dica 1: ao selecionar dados do servidor sql, aplique .STAsText () ao campo geometria ou o Geokettle engasgará com o tipo de dados do servidor sql.

Dica 2: Ao inserir dados no servidor sql, você precisará inserir a geometria como texto em um campo de texto. Em seguida, use a etapa sql para adicionar uma nova coluna de geometria (se necessário) e preenchê-la a partir da geometria do texto. Dessa forma, você usa o SQL Server para criar a geometria a partir de uma representação de texto padrão OGC de uma geometria.

Dica 3: Certifique-se de registrar sua nova tabela espacial no SDE.


Para usar o SDE.ST_AsText (), você precisará do SDE.ST_GEOMETRY_SHAPELIB_PKG, estou certo?
EPascoal

0

Considere configurar a replicação do banco de dados no 9.3 db original.
Ele não funciona tão bem quanto o novo 10, mas ...
replica isso para outro sde no postgresql usando o tipo de dados postgis pg_geometry.

Aqui está uma ajuda da esri
NOTA: Isso exigirá licenças duplicadas se os dois dbs não estiverem na mesma máquina


Conseguir uma licença duplicada parece derrotar o ponto de mirgrating para o código aberto!
Geosmiles

Se o seu banco de dados original estivesse no postgresql, você poderia fazer tudo no mesmo banco de dados (instâncias multi-sde). OU instale o postgresql na mesma máquina que o seu sde. Caso contrário, você pode considerar o desenvolvimento e comprar o EDN (outro sde) pelo período intermediário ~ 2,5 mil anos.
Brad Nesom

0

Você pode escrever o ArcObjects para:

A) despejar seu banco de dados do arcsde; B) Código c # simples para gerar shp2pgsql sqls; C) código c # simples para despejar tabelas antigas; D) C # simples para executar todo o shp2pgsql no seu postgresql;

Você pode usar o driver npgsql para conseguir isso, executando funções e instruções sql diretamente no seu banco de dados postgis;


0

Qual é a sua geometria do ArcSDE ( armazenamento de banco de dados geográficos em bancos de dados relacionais )? Nesse cenário, você pode considerar o uso do tipo ST_Geometry e, em seguida, usar as ferramentas de replicação PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Esse esquema pode ter a vantagem de usar os recursos do ArcSDE / ArcGIS / geodatabase para edição (banco de dados de edição) e ferramentas de código aberto para a difusão (banco de dados de difusão replicado).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.