Suite

Les vidages galbés valides WKT deviennent Aucun lorsqu'ils sont utilisés comme entrée dans QgsGeometry


J'essaie de produire une fonctionnalité multipolygone dans QGIS. Je produis des contours remplis avec Matplotlib, en prenant les multipolygones représentant chaque niveau de contour, en utilisant shapely pour produire WKT, puis en essayant d'ajouter une géométrie à mes fonctionnalités QGIS avec QgsGeometry.fromWKT. Même si shapely produit une géométrie valide et que le WKT peut être lu par des outils en ligne tels que Wicket, QgsGeometry.fromWKT renvoie None (indiquant qu'il y a un problème avec ma saisie).

Voici un exemple de code :

# shapely.geometry.multipolygon.MultiPolygon() p = MultiPolygon(polygon) # shapely.wkt.dumps WKT = dumps(p) sinon p.is_valid: # p est toujours valide raise Exception("Il y a un multipolygone invalide") QGSGeom = QgsGeometry.fromWkt(WKT) # Renvoie toujours Aucun feat.setGeometry(QGSGeom)

Exception:

TypeError : QgsFeature.setGeometry(QgsGeometry) : l'argument 1 a un type inattendu 'NoneType'

Le premier multipolygone produit dans mon code est ci-dessous. Vous pouvez le coller dans Wicket et il est lu correctement. Le seul problème que je vois avec c'est qu'il a des sommets séquentiels en double. Cependant, si cela posait problème, j'imagine que l'appel àest valablel'aurait signalé.

MULTIPOLYGON (((174,4422222222213 -38.5,174.49111111111017 -38.5,174.53999999999905 -38.5,174.53999999999905 -38.46611111111111,174.53999999999905 -38.43222222222222,174.53999999999905 -38.39833333333333,174.53999999999905 -38.364444444444445,174.53999999999905 -38.330555555555556,174.53999999999905 -38.29666666666667,174.58888888888794 -38.29666666666667,174.63777777777682 -38.29666666666667,174.63777777777682 - 38.26277777777778,174.63777777777682 -38.22888888888889,174.63777777777682 -38.195,174.63777777777682 -38.16111111111111,174.63777777777682 -38.12722222222222,174.63777777777682 -38.093333333333334,174.63777777777682 -38.059444444444445,174.6866666666657 -38.059444444444445,174.6866666666657 -38.025555555555556,174.6866666666657 -37.99166666666667,174.6866666666657 -37.95777777777778,174.6866666666657 -37.92388888888889,174.6866666666657 -37,89, 174.68666666666757 -37.85611111111111,174.73555555555458 -37.85611111111111,174.73555555555458 -37.822222222222222,174.6866666666657 -37.8 2222222222222,174.6866666666657 -37.788333333333334,174.6866666666657 -37.754444444444445,174.6866666666657 -37.720555555555556,174.6866666666657 -37.68666666666667,174.73555555555458 -37.68666666666667,174.73555555555458 -37.65277777777778,174.6866666666657 -37.65277777777778,174.6866666666657 -37.61888888888889,174.63777777777682 -37.61888888888889,174.63777777777682 -37.585,174.63777777777682 -37.55111111111111,174.63777777777682 -37,51722222222222, 174,63777777777682 -37.483333333333334,174.63777777777682 -37.449444444444445,174.63777777777682 -37.41555555555556,174.63777777777682 -37.38166666666667,174.58888888888794 -37.38166666666667,174.58888888888794 -37.34777777777778,174.53999999999905 -37.34777777777778,174.53999999999905 -37.31388888888889,174.53999999999905 -37.28,174.53999999999905 -37.24611111111111,174.53999999999905 -37.21222222222222,174.49111111111017 -37.21222222222222,174.49111111111017 - 37.178333333333335,174.4422222222213 -37.178333333333335,174.4422222222213 -37 .144444444444446,174.4422222222213 -37.11055555555556,174.3933333333324 -37.11055555555556,174.3933333333324 -37.08084030041046,174.3918541180993 -37.07666666666667,174.3933333333324 -37.073563748483664,174.3933333333324 -37.04277777777778,174.3933333333324 -37.00888888888889,174.3933333333324 -36.975,174.3933333333324 -36.94111111111111,174.3933333333324 -36.907222222222224,174.3933333333324 -36.873333333333335,174.34444444444352 -36,873333333333335 , 174,29555555555464 -36.873333333333335,174.29555555555464 -36.839444444444446,174.29555555555464 -36.80555555555556,174.29555555555464 -36.77166666666667,174.24666666666576 -36.77166666666667,174.19777777777688 -36.77166666666667,174.19777777777688 -36.73777777777778,174.19777777777688 -36.70388888888889,174.19777777777688 -36.67,174.19777777777688 -36.63611111111111,174.19777777777688 -36.602222222222224,174.148888888888 -36.602222222222224,174.0999999999991 -36.6022222222222224,174.07638009736746 -36.6022222222222224,174.0783635985048 -36. 63611111111111,174.08313907435038 -36.67,174.0945282251905 -36.70388888888889,174.0999999999991 -36.73597729247714,174.10119541117496 -36.73777777777778,174.13328583421037 -36.77166666666667,174.14374543646616 -36.80555555555556,174.148888888888 -36.83168881985557,174.15232756532507 -36.839444444444446,174.17476842624663 -36.873333333333335,174.1847075954181 -36.907222222222224,174.1956525713804 -36.94111111111111,174.19777777777688 -36,948316948136956, 174,21202794606387 -36.975,174.22200422378174 -37.00888888888889,174.23281078508953 -37.04277777777778,174.2362527105547 -37.07666666666667,174.2443993175849 -37.11055555555556,174.24666666666576 -37.126506253934686,174.2553837712646 -37.144444444444446,174.26893886132717 -37.178333333333335,174.28608811503204 -37.21222222222222,174.29521386071525 -37.24611111111111,174.29555555555464 -37.24707296361483,174.30981910302373 -37.28,174.31985523780398 - 37.31388888888889,174.32704467341563 -37.34777777777778,174.33320266579798 -37.38166666666 667,174.33705269711575 -37.41555555555556,174.34043259488126 -37.449444444444445,174.34239999579125 -37.483333333333334,174.3434139886748 -37.51722222222222,174.34369589543317 -37.55111111111111,174.34277412563725 -37.585,174.34134753776272 -37.61888888888889,174.33842570444313 -37.65277777777778,174.33548194519963 -37.68666666666667,174.33168761737662 -37.720555555555556,174.3261546294196 -37.754444444444445,174.3201397488093 -37.788333333333334,174.30945948456915 - 37.82222222222222,174.29582956616 -37.85611111111111,174.29555555555464 -37.8566856256242,174.2836244645519 -37.89,174.25137332154347 -37.92388888888889,174.24666666666576 -37.939789917181415,174.24568237633656 -37.95777777777778,174.23578037906807 -37.99166666666667,174.23094523800063 -38.025555555555556,174.21531880811364 -38.059444444444445,174.19777777777688 -38.07484898967532,174.1875235154153 -38.093333333333334,174.17925432310602 -38,12722222222222, 174.148888888888 -38.153196039233286,174.14095602352862 -38.161111111 11111,174.1252321775911 -38.195,174.0999999999991 -38.21365265825294,174.09474385546508 -38.22888888888889,174.05203184125423 -38.26277777777778,174.0999999999991 -38.277854908742455,174.1201063670163 -38.26277777777778,174.13390610093055 -38.22888888888889,174.148888888888 -38.219468649326835,174.19777777777688 -38.20859612970229,174.21995835962346 -38.195,174.23476922587 -38.16111111111111,174.24666666666576 -38,149179190442055, 174,261704248229 -38.16111111111111,174.26281661298975 -38.195,174.26330478448233 -38.22888888888889,174.25832904507158 -38.26277777777778,174.24666666666576 -38.28860574460334,174.24032248600773 -38.29666666666667,174.2247539205459 -38.330555555555556,174.20611957106544 -38.364444444444445,174.19777777777688 -38.38089181715259,174.1882329880123 -38.39833333333333,174.1723973349145 -38.43222222222222,174.1581399702732 -38.46611111111111,174.19777777777688 - 38.46611111111111,174.246666666666576 -38.46611111111111,174.295555555555464 -38.46611111111111,174.3444444 4444352 -38.46611111111111,174.3933333333324 -38.46611111111111,174.4422222222213 -38.46611111111111,174.4422222222213 -38.5,174.4422222222213 -38.5,174.4422222222213 -38,5)), ((173,8555555555547 -36.27469467488416,173.8555555555547 -36.263333333333335,173.8555555555547 -36.22944444444445,173.8555555555547 -36.19555555555556,173.80666666666582 -36.19555555555556,173.80666666666582 - 36.16166666666667,173.80666666666582 -36.12777777777778,173.75777777777694 -36.12777777777778,173.75777777777694 -36.09388888888889,173.7417959253454 -36.09388888888889,173.75557784459505 -36.12777777777778,173.75777777777694 -36.14911530091963,173.76325310347545 -36.16166666666667,173.80558726743018 -36.19555555555556,173.80666666666582 -36.197384850578814,173.82878975804974 -36.22944444444445,173.84944811561743 -36.263333333333335,173.8555555555547 -36,27469467488416, 173.85555555555547 -36.27469467488416,173.8555555555547 -36.27469467488416)),((174.6866666666657 -36.12777777777778,174.73555555555458 -36.1277 7777777778,174.78444444444347 -36.12777777777778,174.78444444444347 -36.09388888888889,174.78444444444347 -36.06,174.78444444444347 -36.02611111111111,174.78444444444347 -35.992222222222225,174.78444444444347 -35.958333333333336,174.78444444444347 -35.92444444444445,174.78444444444347 -35.89055555555556,174.78444444444347 -35.87765747147396,174.7514938058022 -35.89055555555556,174.73555555555458 -35.89644654727934,174.68751545249424 -35,92444444444445, 174,6866666666657 -35.92476578980626,174.6866666666657 -35.958333333333336,174.63777777777682 -35.958333333333336,174.63777777777682 -35.992222222222225,174.63777777777682 -36.02611111111111,174.63777777777682 -36.06,174.6866666666657 -36.06,174.6866666666657 -36.09388888888889,174.6866666666657 -36.12777777777778,174.6866666666657 -36.12777777777778,174.6866666666657 -36,12777777777778)), ((173,70888888888805 - 36.0377948322446,173.70888888888805 -36.0261111111111,173.70295771755846 -36.0261111111111,173.70888888888805 -36.0377948322446, 173,70888888888805 -36.0377948322446,173.70888888888805 -36,0377948322446)), ((173,65999999999917 -35.99243834496677,173.65999999999917 -35.992222222222225,173.65985904211445 -35.992222222222225,173.65999999999917 -35.99243834496677,173.65999999999917 -35.99243834496677,173.65999999999917 -35,99243834496677)), ((173,2688888888881 -35.5186510460533,173.2688888888881 -35.51777777777778,173.26818353235572 - 35.51777777777778,173.2688888888881 -35.5186510460533,173.2688888888881 -35.5186510460533,173.2688888888881 -35,5186510460533)), ((172,97555555555482 -35.21739078513759,173.0244444444437 -35.23925169779804,173.0244444444437 -35.21277777777778,173.0244444444437 -35.17888888888889,173.0244444444437 -35.145,173.0244444444437 -35.111111111111114,173.0244444444437 -35.077222222222225,173.0244444444437 -35,04333333333334, 172.975555555555482 -35.04333333333334,172.97555555555482 -35.00944444444445,172.975555555555482 -34.97555555555556,172.975555555555482 -34.94166666666667,172.97555555555555482 -34.90 777777777778,172.97555555555482 -34.87388888888889,172.92666666666594 -34.87388888888889,172.87777777777706 -34.87388888888889,172.87777777777706 -34.84,172.87777777777706 -34.806111111111115,172.87777777777706 -34.772222222222226,172.82888888888817 -34.772222222222226,172.7799999999993 -34.772222222222226,172.7799999999993 -34.73833333333334,172.7799999999993 -34.70444444444445,172.7311111111104 -34.70444444444445,172.7311111111104 -34,67055555555556, 172,7311111111104 -34.63666666666667,172.7311111111104 -34.60277777777778,172.68222222222153 -34.60277777777778,172.63333333333264 -34.60277777777778,172.62600766948088 -34.60277777777778,172.62613979085938 -34.63666666666667,172.6294749774601 -34.67055555555556,172.63333333333264 -34.678486947011635,172.64573521644763 -34.70444444444445,172.6647644128248 -34.73833333333334,172.68222222222153 -34.768723960330995,172.68445886850148 -34.772222222222226,172.70490736277 - 34.806111111111115,172.724997924181 -34.84.172.7311111111104 -34.8506897 904488,172.7449245696022 -34.87388888888889,172.76321856150685 -34.90777777777778,172.7799999999993 -34.93852535629443,172.7818258971361 -34.94166666666667,172.79911908350337 -34.97555555555556,172.81436383530234 -35.00944444444445,172.82888888888817 -35.039007084410215,172.83197437321274 -35.04333333333334,172.85003248920535 -35.077222222222225,172.87777777777706 -35.10496647795794,172.88313700002374 -35.111111111111114,172.90780226210077 -35,145, 172,92666666666594 -35.17519032942247,172.93087506556083 -35.17888888888889,172.97184333091403 -35.21277777777778,172.97555555555482 -35.21739078513759,172.97555555555482 -35.21739078513759,172.97555555555482 -35,21739078513759)), ((173,80666666666582 -34.97555555555556,173.8555555555547 -34.97555555555556,173.88505076717465 -34.97555555555556,173.8555555555547 -34.95635582303564,173.81790508096478 -34.94166666666667,173.80666666666582 - 34.93725493580909,173.806666666666582 -34.941666666666667,173.80666666666582 -34.97555555555556,173.8066666666 6582 -34.97555555555556,173.80666666666582 -34,97555555555556)), ((173,5622222222214 -34.87388888888889,173.6111111111103 -34.87388888888889,173.6404955215007 -34.87388888888889,173.6137590343396 -34.84,173.6111111111103 -34.83897128340532,173.5622222222214 -34.82454559833585,173.5622222222214 -34.84,173.5622222222214 -34.87388888888889,173.5622222222214 -34.87388888888889,173.5622222222214 - 34,87388888888889)), ((173,21999999999923 -34.70444444444445,173.2688888888881 -34.70444444444445,173.30963094634106 -34.70444444444445,173.28493477815138 -34.67055555555556,173.2688888888881 -34.65386012980699,173.2482145460874 -34.63666666666667,173.21999999999923 -34.610049142157266,173.21104390378179 -34.60277777777778,173.17111111111035 -34.5706617923791,173.16892922600925 -34.56888888888889,173.13486746020118 -34,535000000000004, 173.122222222222147 -34.52090845332938,173.12222222222147 -34.535000000000004,173.073333333333258 -34.535000000000004,173.07333333333258 -34.56888888888889,173.12222222222 2147 -34.56888888888889,173.12222222222147 -34.60277777777778,173.12222222222147 -34.63666666666667,173.17111111111035 -34.63666666666667,173.17111111111035 -34.67055555555556,173.21999999999923 -34.67055555555556,173.21999999999923 -34.70444444444445,173.21999999999923 -34.70444444444445,173.21999999999923 -34,70444444444445)))

Anticipant que j'ai des problèmes tels que des nœuds papillon et d'autres auto-intersections, j'ai également essayé d'effectuer un tampon à distance zéro :p = p.tampon(0), selon une recommandation dans le manuel de forme. Le même résultat sort.

EDIT : coller ma géométrie dans un fichier texte délimité produit également une erreur :

1 enregistrements supprimés en raison de définitions de géométrie non valides Les lignes suivantes n'ont pas été chargées dans QGIS en raison d'erreurs : WKT non valide à la ligne 2

EDIT2 : mais PostGIS l'analyse correctement avecST_GeomFromText!

EDIT3 : Orielo lit correctement mon WKT.

EDIT4 : Le plugin QGIS QuickWKT ne peut pas l'analyser.

Donc, pour autant que je puisse voir: j'ai un MultiPolygon valide, et je le transforme en une représentation WKT correcte qui peut être lue par les outils Web et PostGIS, mais pas par tout ce qui utilise pyqgis.

Comment puis-je produire un MultiPolygon valide pour QGIS ?


Votre version de QGIS (2.11 = QGIS dev) utilise une nouvelle classe de géométrie (QGIS dev : nouvelles classes de géométrie fusionnées et de nombreux autres messages dans cette liste de diffusion en tant que questions concernant le nouveau moteur de géométrie, QGIS QgsGeometry.fromWkt n'accepte pas les polygones avec des valeurs Z ? , Régression potentiellement sérieuse des performances dans la nouvelle géométrie - la 2.10 devrait-elle être retardée ?,… )

Quelle est la date de votre version (dev = une version par jour), car dans QGIS dev : Nouvelles classes de géométrie fusionnées, Marco Hugentobler écrit (25 mai 2015) :

Les modifications ne contiennent que les classes de base, ne sont pas incluses les modifications du flux de travail de rendu et tous les outils d'édition. Ils seraient trop risqués pour la 2.10 et seront fusionnés plus tard (très probablement pour la 2.12).

Pour le moment, la classe de compatibilité QgsGeometry devrait masquer les différences par rapport à l'ancienne géométrie. En pratique, il y aura un certain nombre de problèmes inattendus après la fusion. Si vous en rencontrez un, remplissez un ticket dans le tracker et attribuez-le moi (ou déposez une note dans la liste de développement). Mes excuses d'avance pour la gêne occasionnée. Il existe un certain nombre de tests unitaires de fournisseur qui ne réussissent pas pour le moment (principalement à cause de problèmes de formatage wkt). Je les passerai en revue dans les prochains jours.

Regardez aussi le rapport de bogue : WKT Parser ne peut pas gérer le multipolygone avec des espaces


Voir la vidéo: QGIS - QuickWKT - Visualize WKT Geometry (Octobre 2021).