Le multipolygone PostGIS lorsqu'il est converti en fichier de formes ne correspond pas à la géométrie source

8

J'essaie de convertir un enregistrement MULTIPOLYGON de PostGIS (v2.2.2) vers le fichier de formes via QGIS (v2.18.9), mais la géométrie source et le fichier de formes résultant ne correspondent pas comme indiqué sur les images ci-dessous (la couche rouge est la source et la couche verte est le fichier de formes résultant). J'obtiens le même résultat si j'effectue la conversion via ogr2ogr depuis GDAL v2.0.0. Cette conversion dure environ 40 minutes.

Si je transfère la géométrie source vers POLYGON et effectue la conversion, le fichier de formes résultant est correct et la conversion est beaucoup plus rapide (7 secondes + 17 secondes pour le vidage). Mais, au lieu de 5 fonctionnalités, je me retrouve maintenant avec 305188.

Les enregistrements MULTIPOLYGON source sont créés par ST_Union sur les cellules adjacentes si cela est important.

Suis-je en train de manquer quelque chose? Existe-t-il un moyen d'effectuer la conversion correcte? Quelqu'un peut-il expliquer pourquoi cela se produit?

Géométrie source Source de PostGIS

Fichier de formes exporté avec des trous remplis marqués par des flèches Fichier de formes exporté


J'ai plus de détails:

pgsql2shp produit le même fichier de formes résultant comme QGIS ou ogr2ogr.

@dbaston - J'ai coupé la plupart des données et laissé la partie autour de la zone présentée sur les images ci-dessus (autour ('POINT (-89.45 29.99)', 4326)). J'ai converti ce petit échantillon et obtenu le même résultat. Si vous ou quelqu'un d'autre veut essayer la conversion sur le même échantillon, vous pouvez obtenir le vidage ici:

Exemple de sauvegarde de données à partir de PostgreSQL v9.5

Au bout de 31 heures, le ST_IsValid a renvoyé true sur toute la géométrie de l'ensemble de données complet. J'ai obtenu le même résultat pour le plus petit échantillon disponible sur le lien ci-dessus. Cependant, vérifiez la validité dans QGIS pour le même ensemble de données plus petit retourné:

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...

Comment se fait-il qu'il y ait une différence dans le contrôle de validité dans PostGIS et QGIS?

Pour vérifier plus loin, j'ai supprimé toutes les parties du polygone sauf celle marquée en bleu sur l'image ci-dessus. J'ai vérifié son format WKT et il a l'air bien. Et maintenant, la conversion en fichier de formes avec uniquement cette fonctionnalité était correcte.

Est-ce que cela a un sens? J'ai vérifié plus de jeux de données créés par ST_Union sur les cellules adjacentes et découvert que le même problème existait également lors de la conversion en fichier de formes. Les mêmes données converties en GeoJSON produisent le résultat correct.

MULTIPOLYGON a été créé à partir de la géométrie POLYGON avec l'expression suivante:

st_multi(st_union(st_buffer(geom,0)))
Dejan Stojanovic
la source
1
Il peut y avoir des erreurs de topologie dans les données source. Comme les données sont dans PostGIS, vous pouvez vérifier les géométries avec ST_IsValid et ST_IsValidReason ou les corriger avec ST_MakeValid.
user30184
Désolé de ne pas avoir commenté ici, mais je n'ai pas encore le privilège. Je me demandais comment vous avez fait: "J'obtiens le même résultat si j'effectue la conversion via ogr2ogr depuis GDAL v2.0.0" Pourriez-vous être plus précis .. code? Avez-vous essayé pgsql2shp?
Martinyt
Merci. J'exécute cela maintenant, mais cela prend beaucoup de temps pour vérifier la validité de la géométrie. Je vous répondrai une fois le contrôle terminé.
Dejan Stojanovic du
2
J'ai déjà vu ce comportement dans des géométries complexes (valides) avec des anneaux imbriqués à l'intérieur des trous. Celles-ci peuvent être traitées par les deux ogr2ogret pgsql2shpdifféremment, mais j'ai vu des cas qui déconcertent chacun d'eux. Si vous pouvez réduire le problème à une entrée plus petite, ce serait utile comme rapport de bogue.
dbaston
J'ai converti votre échantillon en GeoPackage et le résultat est le même que le Postgis. Avez-vous vraiment besoin d'utiliser le format de fichier de formes? Capture d'écran . GeoPackage est bien meilleur :-)
jgrocha

Réponses:

1

Il semble que ce soit un bogue dans QGIS (2.18.16 inclus) lors du rendu des multipolygones à partir d'un SHP. Si vous ouvrez votre SHP dans ArcMap - ce problème ne se produit pas. Ou, si vous exportez vos multipolygones vers SQLite - ce problème ne se produit pas également. J'espère que quelqu'un de l'équipe QGIS verra cette question.

SHP utilisant ArcMap 10 SQLite utilisant QGIS 2.18.16

Ralph Tee
la source