Estou tentando importar alguns shapefiles de polígono para o Postgis no QGIS via SPIT. Um deles não pode ser importado e retorna este erro:
ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)
Tentei alterar o atributo "Feature Class" nessa tabela no SPIT widnow, de MULTIPOLYGON para POLYGON, mas nada aconteceu.
Existe alguma maneira de fazer o Postgis aceitar os dois tipos (polígono e multipolígono)? Ou talvez de alguma forma eu possa converter a geometria do shapefile de polígono para multipolígono? Alguma ideia?
Eu tentei o Qgis 2.0.1 no Windows e o Qgis 2.3 no ArchLinux.
Parece ser um problema conhecido que não será corrigido: consulte http://hub.qgis.org/issues/5328
Se você precisar de uma solução alternativa, tente alterar o tipo de coluna de geometria da sua tabela para uma 'geometria' genérica:
Depois de fazer a importação, você pode voltar para
MultiPolygon
:Como alternativa, tente carregar seus dados usando ogr2ogr .
fonte
Eu uso ogr2ogr para automatizar a ingestão de shapefiles em um banco de dados PostGIS. Especificamente em relação à pergunta, use a opção:
Isso forçará o ogr2ogr a promover geometrias POLYGON para MULTIPOLYGON, evitando o erro. Um exemplo muito simples:
Omiti os detalhes do host / autenticação do pgsql. Para agrupar vários shapefiles, você pode fazer algo como:
fonte
Embora tenha tentado resolvê-lo com o algoritmo "Importar para PostGis", não obtive êxito (meu banco de dados não estava aparecendo na lista - estou usando o QGIS 2.10).
Em vez disso, usei shp2pgsql , que era uma tarefa simples do prompt de comando, conforme descrito abaixo:
C:\Program Files\PostgreSQL\9.4\bin>
.shp
arquivos neste diretório. (Copiei minha pasta inteira com meus.shp
arquivos.shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sql
ondeMyShpDir
seu diretório, 4326 é o SRID do WGS84; portanto, se você estiver usando SSID diferente, altereMySHPFile.shp
seu arquivo específico (MYSQLFile
será criado automaticamente). Obviamente, faça isso para todos os arquivos que você deseja converter. Os arquivos serão salvos no seu diretório atual (C:\Program Files\PostgreSQL\9.4\bin
no meu caso)Em seguida, basta copiar e colar os arquivos SQL no seu banco de dados PLSQL.
Além disso, uma coisa interessante adicional
shp2pgsql
é o fato de que você pode criar instantaneamente um índice em sua tabela, apenas adicionando oI
parâmetro no comando, assim:shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql
Lucro! :)
fonte
Sim, você pode dizer ao PostGIS para aceitar qualquer tipo de geometria (polígono, multipolígono, ponto, cadeia de linhas etc.) adicionando a seguinte restrição à sua tabela.
Para PostGIS 2.x (usando o tipo de geometria Geometry genérico)
Resposta anterior (para PostGIS 1.x usando restrições)
fonte
enforce_geotype_geom
vez deenforce_geometry_type
. deixe-me saber se isso funciona e eu editarei minha resposta, se funcionar.Tentei a solução do algoritmo 'Importar para o PostGIS', mas achei que isso também não funcionava. A solução mais fácil que encontrei foi acessar o banco de dados > DB Manager , navegar até o banco de dados e clicar no botão Importar camada / arquivo (seta para baixo) .
fonte