PostGIS Multipolygon cuando se convierte a shapefile no coincide con la geometría de origen

8

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?

Geometría fuente Fuente de PostGIS

Archivo de formas exportado con agujeros rellenos marcados por flechas Archivo de forma exportado


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)))
Dejan Stojanovic
fuente
1
Puede haber errores de topología en los datos de origen. Debido a que los datos están en PostGIS, puede verificar las geometrías con ST_IsValid y ST_IsValidReason o corregirlas con ST_MakeValid.
usuario30184
Perdón por no comentar aquí, pero todavía no tengo el privilegio. Me preguntaba cómo lo hizo: "Obtengo el mismo resultado si realizo la conversión a través de ogr2ogr de GDAL v2.0.0" ¿Podría ser más específico ... código? ¿Has probado pgsql2shp?
Martinyt
Gracias. Estoy ejecutando eso ahora, pero me está tomando mucho tiempo verificar la validez de la geometría. Responderé cuando se complete el cheque.
Dejan Stojanovic
2
He visto este comportamiento antes en geometrías complejas (válidas) con anillos anidados dentro de los agujeros. Estos pueden ser manejados por ambos ogr2ogry de manera pgsql2shpdiferente, 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.
dbaston
Convertí su muestra a GeoPackage y el resultado es el mismo que el Postgis. ¿Realmente necesitas usar el formato shapefile? Captura de pantalla . GeoPackage es mucho mejor :-)
jgrocha

Respuestas:

1

Parece ser un error en QGIS (2.18.16 incluido) cuando se procesan los multipolígonos de un SHP. Si abre su SHP en ArcMap, este problema no ocurre. O, si exporta sus multipolígonos a SQLite, este problema tampoco ocurre. Esperemos que alguien del equipo de QGIS vea esta pregunta.

SHP usando ArcMap 10 SQLite usando QGIS 2.18.16

Ralph Tee
fuente