Suite

Utiliser PyQGIS pour transformer une couche de polygones en couche de trous à l'intérieur de bbox ?

Utiliser PyQGIS pour transformer une couche de polygones en couche de trous à l'intérieur de bbox ?


J'utilise python dans QGIS. J'ai une couche de polygones (c'est le résultat d'une dissolution antérieure et n'a pas de polygones qui se chevauchent mais des trous et des îles dans les trous, etc.). Je veux construire une nouvelle couche qui contient un polygone représentant une bbox de la première couche avec chaque polygone coupé à partir de celle-ci.

Essentiellement, je veux "inverser" la couche que j'ai de sorte que là où était le polygone, maintenant il n'y en a plus, et là où il n'y avait pas de polygone maintenant, il y en a. Le tout à l'intérieur d'un cadre de délimitation du calque d'origine.

Je peux facilement créer une bbox et j'ai essayé de "soustraire" la couche de polygones de ma nouvelle couche de polygones bbox, mais le processus ralentit jusqu'à l'arrêt, puis plante mon PC. Voici l'algorithme

processing.runalg("qgis.difference","chemin/vers/polygone.shp","chemin/vers/bbox.shp","chemin/vers/result.shp")

Je ne me soucie pas des attributs (évidemment). J'ai juste besoin de couper un ensemble de polygones d'un polygone plus grand.

Cela semble si simple, j'aimerais pouvoir trouver une commande ou un script simple pour y parvenir. Comme indiqué en haut, je recherche une solution en python dans QGIS.


OK, je voulais donc convertir des îles en trous et des trous en îles, mais je n'ai pas trouvé de commande pour le faire dans QGIS, j'ai donc écrit un script moi-même.

Voici ce script "simple" qui inversera un input_layer en un polygone bbox dans un output_layer. L'ensemble du processus a duré quelques secondes pour inverser un fichier de forme de 25 Mo. Mieux que de s'effondrer avec un appel à la "différence" !

output_layer = QgsVectorLayer("Polygon?crs=epsg:"+str(input_layer.crs().authid().split(':')[1]), "output_layer", "memory") output_layer_provider = output_layer.dataProvider( ) QgsMapLayerRegistry.instance().addMapLayer(output_layer) bbox_feature_list=[] bbox_feature = QgsFeature() bbox_feature_outer_rings =QgsGeometry.fromRect(input_layer.extent()).asPolygon() bbox_feature_bature_outer_fering) [] polygon_geoms=[] features = input_layer.getFeatures() pour f in features : geom = f.geometry() if geom.wkbType() == QGis.WKBPolygon : polygon_geoms.append(geom.asPolygon()) if geom. wkbType() == QGis.WKBMultiPolygon : pour le polygone dans geom.asMultiPolygon() : polygon_geoms.append(polygon) pour polygon_geom dans polygon_geoms : ring_count=0 pour l'anneau dans polygon_geom : ring_count+=1 si ring_count==1 : bbox_feature_list.append( ring) else : island_rings.append(ring) bbox_feature.setGeometry(QgsGeometry.fromPolygon(bbox_feature_list)) ( res, outFeats) = output_layer_provider.addFeatures([bbox_feature]) island_features=[] pour island_ring dans island_rings : island_feature = QgsFeature() island_feature_list=([island_ring]) island_feature.setGeometry(QgsGeometry.fromPolygon_features_liste)app ) (res, outFeats) = output_layer_provider.addFeatures(island_features) QgsMapLayerRegistry.instance().addMapLayer(output_layer) output_layer.updateExtents()

REMARQUE: Après avoir exécuté ce processus, je dois parfois exécuter l'algorithme v.clean de GRASS avec l'outil bpol afin d'y effectuer des processus spatiaux plus tard. Je ne sais pas pourquoi, mais cela résout le problème pour moi.


1. Fonctionnalités simples pour R

Fonctionnalités simples ou accès simple aux fonctionnalités fait référence à une norme formelle (ISO 19125-1:2004) qui décrit comment les objets du monde réel peuvent être représentés dans les ordinateurs, en mettant l'accent sur la spatial géométrie de ces objets. Il décrit également comment de tels objets peuvent être stockés et extraits de bases de données, et quelles opérations géométriques doivent être définies pour eux.

La norme est largement mise en œuvre dans les bases de données spatiales (telles que PostGIS), les SIG commerciaux (par exemple, ESRI ArcGIS) et constitue la base de données vectorielles pour les bibliothèques telles que GDAL. Un sous-ensemble de fonctionnalités simples forme la norme GeoJSON.

R a des classes bien prises en charge pour le stockage de données spatiales (sp) et l'interfaçage avec les environnements mentionnés ci-dessus (rgdal, rgeos), mais il manquait jusqu'à présent une implémentation complète de fonctionnalités simples, rendant les conversions parfois alambiquées, inefficaces ou incomplètes. Le package sf tente de combler cette lacune, et vise à succéder à sp sur le long terme.

  • explique ce que l'on entend par fonctionnalités et par fonctionnalités simples
  • montre comment ils sont implémentés dans R
  • fournit des exemples de la façon dont vous pouvez travailler avec eux
  • montre comment ils peuvent être lus et écrits dans des fichiers ou des ressources externes
  • explique comment ils peuvent être convertis vers et depuis des objets sp
  • montre comment ils peuvent être utilisés pour une analyse spatiale significative

Codes postaux par rapport aux ZCTA et aux limites

Contrairement à la croyance populaire, les codes postaux ne sont pas des zones et le service postal américain ne les délimite pas. Ce sont simplement des numéros attribués à des plages d'adresses le long de segments de rue, et les codes sont associés à un bureau de poste spécifique. Lorsque nous voyons des limites de code postal (sur Google Maps par exemple), celles-ci ont été dérivées en créant des zones où la plupart des adresses partagent le même code postal.

Le US Census Bureau crée des approximations surfaciques pour les codes postaux appelées ZIP Code Tabulation Areas ou ZCTA. Le Bureau attribue des blocs de recensement à un numéro ZIP basé sur le ZIP qui est utilisé par la majorité des adresses dans chaque bloc, et agrège les blocs qui partagent le même ZIP pour former un ZCTA. Après cette affectation initiale, ils apportent quelques modifications pour agréger ou éliminer les blocs orphelins qui partagent le même numéro ZIP mais ne sont pas contigus. Les ZCTA sont délimitées une fois tous les dix ans en conjonction avec le recensement décennal, et les données du recensement décennal et de l'American Community Survey (ACS) sur 5 ans sont publiées au niveau du ZCTA. Vous pouvez télécharger les limites ZCTA à partir de la page TIGER / Line Shapefiles, et il existe également un fichier de limites cartographiques généralisées pour elles.


Voir la vidéo: GeoMYTNMAC PgAdmin4 36 STCENTROID. Extraire les centroïdes de geométrie des couches spatiales