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.
fonte
Respostas:
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:
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
,-overwrite
ou-update
opções)A principal advertência para esse método é que é complicado de configurar.
fonte
shp2pgsql
,psql
etc.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 .
fonte
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.
fonte
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.
fonte
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
fonte
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;
fonte
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).
fonte