Estou tentando converter um registro MULTIPOLYGON do PostGIS (v2.2.2) para o shapefile via QGIS (v2.18.9), mas a geometria da fonte e o shapefile resultante não coincidem conforme exibido nas imagens abaixo (a camada vermelha é a fonte e a camada verde é o shapefile resultante). Eu obtenho o mesmo resultado se eu realizar a conversão via ogr2ogr do GDAL v2.0.0. Essa conversão leva cerca de 40 minutos para ser concluída.
Se eu despejar a geometria de origem no POLYGON e executar a conversão, o shapefile resultante está correto e a conversão é muito mais rápida (7 segundos + 17 segundos para despejo). Mas, em vez de cinco recursos, agora eu termino com 305188.
Os registros MULTIPOLYGON de origem são criados por ST_Union nas células adjacentes, se isso importa.
Estou esquecendo de algo? Existe uma maneira de realizar a conversão correta? Alguém pode explicar por que isso está acontecendo?
Arquivo de forma exportado com furos preenchidos marcados por setas
Eu tenho mais detalhes:
O pgsql2shp produz o mesmo shapefile resultante, como o QGIS ou ogr2ogr.
@dbaston - cortei a maioria dos dados e deixei a parte ao redor da área apresentada nas imagens acima (em torno de ('PONTO (-89,45 29,99)', 4326)). Eu converti esta pequena amostra e obtive o mesmo resultado. Se você ou alguém quiser tentar a conversão na mesma amostra, pode obter o despejo aqui:
Exemplo de backup de dados do PostgreSQL v9.5
Após 31 horas, o ST_IsValid retornou true em todas as geometrias do conjunto de dados completo. Obtive o mesmo resultado para a amostra menor disponível no link acima. No entanto, verifique a validade no QGIS para o mesmo conjunto de dados menor retornado:
ring 1 of polygon 712 not in exterior ring
ring 2 of polygon 712 not in exterior ring
ring 3 of polygon 712 not in exterior...
Como é que existe uma diferença na verificação de validade no PostGIS e QGIS?
Para verificar mais adiante, removi todas as partes do polígono, exceto a marcada em azul na imagem acima. Eu verifiquei o seu formato WKT e parece bom. E agora a conversão para shapefile com apenas esse recurso estava correta.
Isto faz algum sentido? Eu verifiquei mais conjuntos de dados criados por ST_Union nas células adjacentes e descobri que o mesmo problema existe lá também ao converter para shapefile. Os mesmos dados convertidos em GeoJSON produzem o resultado correto.
MULTIPOLYGON foi criado a partir da geometria POLYGON com a seguinte expressão:
st_multi(st_union(st_buffer(geom,0)))
ogr2ogr
e de maneira pgsql2shp
diferente, mas vi casos que surpreendem cada um deles. Se você puder reduzir o problema a uma entrada menor, seria útil como um relatório de erro.