Estoy tratando de convertir un registro MULTIPOLYGON de PostGIS (v2.2.2) al archivo de forma a través de QGIS (v2.18.9), pero la geometría de origen y el archivo de forma resultante no coinciden como se muestra en las imágenes a continuación (la capa roja es la fuente y la capa verde es el archivo de forma resultante). Obtengo el mismo resultado si realizo la conversión a través de ogr2ogr desde GDAL v2.0.0. Esta conversión tarda unos 40 minutos en completarse.
Si vuelco la geometría de origen a POLYGON y realizo la conversión, el archivo de forma resultante es correcto y la conversión es mucho más rápida (7 segundos + 17 segundos para el volcado). Pero, en lugar de 5 características, ahora termino con 305188.
Los registros MULTIPOLYGON de origen son creados por ST_Union en las celdas adyacentes si eso es importante.
¿Me estoy perdiendo de algo? ¿Hay alguna manera de realizar la conversión correcta? ¿Alguien puede explicar por qué sucede esto?
Archivo de formas exportado con agujeros rellenos marcados por flechas
Tengo mas detalles:
pgsql2shp produce el mismo archivo de forma resultante como QGIS u ogr2ogr.
@dbaston: corté la mayoría de los datos y dejé la parte alrededor del área presentada en las imágenes anteriores (alrededor de ('PUNTO (-89.45 29.99)', 4326)). Convertí esta pequeña muestra y obtuve el mismo resultado. Si usted o alguien quiere probar la conversión en la misma muestra, puede obtener el volcado aquí:
Copia de seguridad de datos de muestra de PostgreSQL v9.5
Después de 31 horas, el ST_IsValid regresó verdadero en toda la geometría del conjunto de datos completo. Obtuve el mismo resultado para la muestra más pequeña disponible en el enlace de arriba. Sin embargo, Verifique la validez en QGIS para el mismo conjunto de datos más pequeño devuelto:
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...
¿Cómo es que hay una diferencia en la verificación de validez en PostGIS y QGIS?
Para verificar más, eliminé todas las partes del polígono, excepto la marcada en azul en la imagen de arriba. Verifiqué su formato WKT y se ve bien. Y ahora la conversión a shapefile con solo esta característica fue correcta.
¿Tiene esto algún sentido? Verifiqué más conjuntos de datos creados por ST_Union en las celdas adyacentes y descubrí que también existe el mismo problema al convertir a shapefile. Los mismos datos convertidos a GeoJSON producen el resultado correcto.
MULTIPOLYGON fue creado a partir de la geometría POLYGON con la siguiente expresión:
st_multi(st_union(st_buffer(geom,0)))
ogr2ogr
y de manera pgsql2shp
diferente, pero he visto casos que topan cada uno de ellos. Si puede reducir el problema a una entrada más pequeña, sería útil como informe de error.