Suite

Aligner les attributs avec les fonctionnalités lors de la création d'un fichier de formes à l'aide de PyShp ?

Aligner les attributs avec les fonctionnalités lors de la création d'un fichier de formes à l'aide de PyShp ?


J'ai utilisé le module Python Pyshp pour sélectionner des blocs de recensement particuliers dans les fichiers de formes du recensement et les regrouper dans un seul fichier de formes. Cependant, lorsque j'ajoute ces données dans ArcMap et que je clique avec le bouton droit pour identifier les blocs, j'obtiens des attributs pour plusieurs blocs loin du bloc prévu. Au début, j'ai supposé que j'avais écrit mon script d'une manière qui désalignait les objets enregistrements et formes dans pyshp, mais lorsque je relis ce fichier de formes en python, tout semble être correctement aligné (c'est-à-dire que je peux rechercher l'enregistrement que je veux et trouver la forme correcte au même index et vice versa).

Quelqu'un a-t-il une suggestion quant au prochain endroit où je peux chercher pour essayer de résoudre mon problème ?

Voici la classe que j'ai construit pour ce faire. L'ordre des opérations consiste à appeler load pour obtenir un fichier zip particulier du recensement, à utiliser add_blocks pour collecter tous ceux qui correspondent à ma liste et à les ajouter à l'objet writer, puis à write_shapefile pour enregistrer tout ce que j'ai collecté.

class CensusConnection : def __init__(self) : self.file_name ="self.ftp_path = 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/TABBLOCK/2010/' self.reader = Aucun self.writer = shapefile .Writer() def load(self,state_fips, county_fips ="):"Utilisez-moi pour charger tous les blocs dans un dossier dans pwd qui correspondent à l'état FIPS, ou à l'état FIPS plus le comté FIPS."#importer les données et configurer l'objet lecteur self .file_name = 'tl_2010_' + state_fips + county_fips + '_tabblock10' tempdir = tempfile.mkdtemp() sinon os.path.exists('tl_2010_' + state_fips + county_fips + '_tabblock10'): print 'Récupération ' + self.ftp_path + self.file_name + '.zip… ' sock = urllib2.urlopen(self.ftp_path + self.file_name + '.zip') memfile = io.BytesIO(sock.read()) ZipFile(memfile, 'a'). extractall(tempdir + "/" + self.file_name) self.reader = shapefile.Reader(tempdir + "/" + self.file_name + "/" + self.file_name) self._dump() #configurer l'objet écrivain pour qu'il corresponde lecteur self.shapes = self.reader.shapes() self.fields = self.reader.fields self.records = self .reader.records() self.writer.fields = self.fields def _dump(self): if (os.path.exists(self.file_name)): Shutil.rmtree(self.file_name) def add_blocks(self, block_keys) :"Prenez une clé de bloc, trouvez ce bloc et ajoutez des fichiers de formes à l'objet d'écriture"Clé de bloc = StateFIPS + CountyFIPS + TractID + GroupID + BlockID (15 chiffres)"fields = self.reader.fields records = self.reader.records( ) pour index in range(len(records)): if(records[index][4] in set(block_keys)): self.writer.shapes().append(self.reader.shapes()[index]) self .writer.records.append(self.reader.records()[index]) def write_shapefile(self,dir_name): if(len(self.writer.records)>0): if(os.path.exists(dir_name) ): Shutil.rmtree(dir_name) os.mkdir(dir_name) self.writer.save(dir_name+"/"+dir_name)

Pyshp : le dessin PolyLineZ trace des lignes entre mes lignes

Mes lignes se connectent, même si je ne les ai pas définies sur des polygones.

Je base mon script sur le package pyshp.

Mon script ressemble à ceci :

Le problème est que lorsque je génère plusieurs Qgis de poly dans lesquels je les ouvre, trace une ligne entre eux. Exemple:

Une ligne va de A à B.

Une autre ligne va de C à D

Pour une raison quelconque, Qgis trace une ligne entre B et C. Je pense que cela a à voir avec la gestion pyshp du fichier de formes. Plus spécifique, le champ 'bbox' qui définit les limites de chaque forme.

La solution ferait disparaître la ligne entre B et C.


Pyshp 1.2.0

1.2.0Jamais construitPourquoi pas?
1.1.4 Disponible Afficher le journal de construction
1.1.3 Disponible Afficher le journal de construction
1.1.1 Disponible Afficher le journal de construction
1.1.0 Disponible Afficher le journal de construction
1.0.5 Disponible Afficher le journal de construction
1.2.0Jamais construitPourquoi pas?
1.1.4 Disponible Afficher le journal de construction
1.1.3 Disponible Afficher le journal de construction
1.1.1 Disponible Afficher le journal de construction
1.1.0 Disponible Afficher le journal de construction
1.0.5 Disponible Afficher le journal de construction
1.2.0Jamais construitPourquoi pas?
1.1.4 Disponible Afficher le journal de construction
1.1.3 Disponible Afficher le journal de construction
1.1.1 Disponible Afficher le journal de construction
1.1.0 Disponible Afficher le journal de construction
1.0.5 Disponible Afficher le journal de construction

1.2.0 Disponible Afficher le journal de construction
1.1.4 Disponible Afficher le journal de construction
1.1.3 Disponible Afficher le journal de construction
1.1.1 Disponible Afficher le journal de construction
1.1.0 Disponible Afficher le journal de construction
1.0.5 Disponible Afficher le journal de construction
Liens
Auteur
Licence
Dépend de
Importations
Dernière version

Aperçu

PyShp fournit une prise en charge en lecture et en écriture du format Esri Shapefile. Le format Shapefile est un format de données vectorielles populaire du système d'information géographique créé par Esri. Pour plus d'informations sur ce format, veuillez lire la "Description technique ESRI Shapefile - Juillet 1998" bien rédigée située à l'adresse http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf. Le document Esri décrit les formats de fichier shp et shx. Cependant, un troisième format de fichier appelé dbf est également requis. Ce format est documenté sur le Web sous le nom de "XBase File Format Description" et est un simple format de base de données basé sur des fichiers créé dans les années 1960. Pour plus d'informations sur cette spécification, consultez : http://www.clicketyclick.dk/databases/xbase/format/index.html

Les formats de fichier Esri et XBase sont tous deux très simples dans leur conception et économe en mémoire, ce qui explique en partie pourquoi le format shapefile reste populaire malgré les nombreuses façons de stocker et d'échanger des données SIG disponibles aujourd'hui.

Pyshp est compatible avec Python 2.4-3.x.

Ce document fournit des exemples d'utilisation de PyShp pour lire et écrire des fichiers de formes.

Actuellement, l'exemple de fichier de formes de groupe de blocs de recensement référencé dans les exemples est uniquement disponible sur le site du projet de code google à l'adresse http://code.google.com/p/pyshp. Ces exemples sont simples et vous pouvez également les exécuter facilement sur vos propres fichiers de formes manuellement avec une modification minimale. D'autres exemples pour des sujets spécifiques sont continuellement ajoutés au wiki pyshp sur google code et au blog http://GeospatialPython.com.

Important : Pour plus d'informations sur les projections cartographiques, les fichiers de formes et Python, veuillez visiter : http://code.google.com/p/pyshp/wiki/MapProjections

J'espère sincèrement que cette bibliothèque élimine la distraction banale de la simple lecture et écriture de données, et vous permet de vous concentrer sur la partie stimulante et AMUSANTE de votre projet géospatial.

Exemples

Avant de faire quoi que ce soit, vous devez importer la bibliothèque.

Les exemples ci-dessous utiliseront un fichier de formes créé à partir de l'ensemble de données Blockgroups du U.S. Census Bureau près de San Francisco, Californie et disponible dans le référentiel subversion du site pyshp google code.

Lecture de fichiers de formes

Pour lire un fichier de formes, créez un nouvel objet "Reader" et transmettez-lui le nom d'un fichier de formes existant. Le format shapefile est en fait une collection de trois fichiers. Vous spécifiez le nom de fichier de base du fichier de formes ou le nom de fichier complet de l'un des fichiers de composants du fichier de formes.

OU l'un des 5+ autres formats qui font potentiellement partie d'un fichier de formes. La bibliothèque ne se soucie pas des extensions.

Lecture de fichiers de formes à partir d'objets de type fichier

Vous pouvez également charger des fichiers de formes à partir de n'importe quel objet de type fichier Python en utilisant des arguments de mot-clé pour spécifier l'un des trois fichiers. Cette fonctionnalité est très puissante et permet de charger des shapefiles à partir d'une URL, d'un fichier zip, d'un objet sérialisé ou dans certains cas d'une base de données.

Notez que dans les exemples ci-dessus, le fichier shx ​​n'est jamais utilisé. Le fichier shx ​​est un index d'enregistrements fixes très simple pour les enregistrements de longueur variable dans le fichier shp. Ce fichier est facultatif pour la lecture. S'il est disponible, pyshp utilisera le fichier shx ​​pour accéder aux enregistrements de forme un peu plus rapidement, mais s'en passera très bien.

Lecture de la géométrie

La géométrie d'un fichier de formes est l'ensemble de points ou de formes constitués de sommets et d'arcs implicites représentant des emplacements physiques. Tous les types de fichiers de formes ne stockent que des points. Les métadonnées sur les points déterminent comment ils sont gérés par le logiciel.

Vous pouvez obtenir la liste de la géométrie du fichier de formes en appelant la méthode shape().

La méthode shape renvoie une liste d'objets Shape décrivant la géométrie de chaque enregistrement de forme.

Vous pouvez parcourir la géométrie du fichier de formes en utilisant la méthode iterShapes().

Chaque enregistrement de forme contient les attributs suivants :

  • bbox : si le type de forme contient plusieurs points, ce tuple décrit la coordonnée inférieure gauche (x,y) et la coordonnée du coin supérieur droit créant une boîte complète autour des points. Si le shapeType est un Null (shapeType == 0) alors une AttributeError est levée.
  • pièces : les pièces regroupent simplement des ensembles de points en formes. Si l'enregistrement de forme comporte plusieurs parties, cet attribut contient l'index du premier point de chaque partie. S'il n'y a qu'une partie, une liste contenant 0 est renvoyée.
  • points : l'attribut points contient une liste de tuples contenant une coordonnée (x,y) pour chaque point de la forme.

Pour lire une seule forme en appelant son index, utilisez la méthode shape(). L'index est le nombre de formes à partir de 0. Donc, pour lire le 8ème enregistrement de forme, vous utiliseriez son index qui est 7.

Lecture des enregistrements

Un enregistrement dans un fichier de formes contient les attributs de chaque forme de la collection de géométrie. Les enregistrements sont stockés dans le fichier dbf. Le lien entre la géométrie et les attributs est le fondement des Systèmes d'Information Géographique. Ce lien critique est impliqué par l'ordre des formes et des enregistrements correspondants dans le fichier de géométrie shp et le fichier d'attributs dbf.

Les noms de champs d'un shapefile sont disponibles dès que vous lisez un shapefile. Vous pouvez appeler l'attribut "fields" du fichier de formes en tant que liste Python. Chaque champ est une liste Python avec les informations suivantes :

  • Nom de champ : le nom décrivant les données à cet index de colonne.
  • Type de champ : le type de données à cet index de colonne. Les types peuvent être : Caractère, Nombres, Longs, Dates ou Mémo. Le type "Memo" n'a aucune signification dans un SIG et fait plutôt partie de la spécification xbase.
  • Longueur du champ : la longueur des données trouvées à cet index de colonne. Les anciens logiciels SIG peuvent tronquer cette longueur à 8 ou 11 caractères pour les champs "Caractère".
  • Longueur décimale : nombre de décimales trouvées dans les champs "Number".

Pour voir les champs de l'objet Reader ci-dessus (sf), appelez l'attribut "fields" :

Vous pouvez obtenir une liste des enregistrements du fichier de formes en appelant la méthode records() :

Semblable aux méthodes de géométrie, vous pouvez parcourir les enregistrements dbf à l'aide de la méthode recordsIter().

Chaque enregistrement est une liste contenant un attribut correspondant à chaque champ de la liste des champs.

Par exemple, dans le 4e enregistrement du fichier de formes des groupes de blocs, les 2e et 3e champs sont l'identifiant du groupe de blocs et le nombre de population de 1990 de ce groupe de blocs de San Francisco :

Pour lire un seul enregistrement, appelez la méthode record() avec l'index de l'enregistrement :

Lecture simultanée de la géométrie et des enregistrements

Vous voulez examiner à la fois la géométrie et les attributs d'un enregistrement en même temps. Les méthodes shapeRecord() et shapeRecords() vous permettent de faire exactement cela.

L'appel de la méthode shapeRecords() renverra la géométrie et les attributs de toutes les formes sous forme de liste d'objets ShapeRecord. Chaque instance ShapeRecord a un attribut "shape" et "record". L'attribut shape est un objet ShapeRecord tel que décrit dans la première section "Reading Geometry". L'attribut record est une liste de valeurs de champ comme illustré dans la section "Reading Records".

Lisons la clé du groupe de blocs et la population du 4e groupe de blocs : >>> shapeRecs[3].record[1:3] ['060750601001', 4715]

Lisons maintenant les deux premiers points de ce même enregistrement :

La méthode shapeRec() lit une seule paire forme/enregistrement à l'index spécifié. Pour obtenir le 4e enregistrement de forme à partir du fichier shapfile des groupes de blocs, utilisez le troisième index :

La clé du groupe de blocs et le nombre de population :

Écrire des fichiers de formes

PyShp essaie d'être aussi flexible que possible lors de l'écriture de fichiers de formes tout en maintenant un certain degré de validation automatique pour s'assurer que vous n'écrivez pas accidentellement un fichier invalide.

PyShp peut écrire un seul des fichiers de composants tels que le fichier shp ou dbf sans écrire les autres. Ainsi, en plus d'être une bibliothèque de fichiers de formes complète, il peut également être utilisé comme bibliothèque de base dbf (xbase). Les fichiers Dbf sont un format de base de données commun qui sont souvent utiles en tant que format de base de données simple autonome. Et même les fichiers shp ont parfois des utilisations en tant que format autonome. Certains systèmes SIG basés sur le Web utilisent un fichier shp téléchargé par l'utilisateur pour spécifier une zone d'intérêt. De nombreux pulvérisateurs de produits chimiques pour l'agriculture de précision utilisent également le format shp comme fichier de contrôle pour le système de pulvérisation (généralement en combinaison avec des formats de fichier de base de données personnalisés).

Pour créer un fichier de formes, vous ajoutez une géométrie et/ou des attributs à l'aide des méthodes de la classe Writer jusqu'à ce que vous soyez prêt à enregistrer le fichier.

Créez une instance de la classe Writer pour commencer à créer un fichier de formes :

Définition du type de forme

Le type de forme définit le type de géométrie contenue dans le fichier de formes. Toutes les formes doivent correspondre au paramètre de type de forme.

Les types de formes sont représentés par des nombres compris entre 0 et 31, tels que définis par la spécification du fichier de formes. Il est important de noter que le système de numérotation a plusieurs numéros réservés qui n'ont pas encore été utilisés. Par conséquent, les numéros des types de formes existants ne sont pas séquentiels.

Vous pouvez référencer les types de formes par les nombres ou par les constantes définies par PyShp : shapefile.NULL = 0 shapefile.POINT = 1 shapefile.POLYLINE = 3 shapefile.POLYGON = 5 shapefile.MULTIPOINT = 8 shapefile.POINTZ = 11 shapefile.POLYLINEZ = 13 shapefile.POLYGONZ = 15 shapefile.MULTIPOINTZ = 18 shapefile.POINTM = 21 shapefile.POLYLINEM = 23 shapefile.POLYGONM = 25 shapefile.MULTIPOINTM = 28 shapefile.MULTIPATCH = 31

Il existe trois façons de définir le type de forme : - Définissez-le lors de la création de l'instance de classe. - Définissez-le en attribuant une valeur à une instance de classe existante. - Réglez-le automatiquement sur le type de la première forme en enregistrant le fichier de formes.

Pour définir manuellement le type de forme d'un objet Writer lors de la création du Writer :

ou nous pouvons utiliser les constantes comme expliqué ci-dessus :

Comme vous pouvez le voir, il n'est pas nécessaire de spécifier explicitement l'argument shapeType.

OU vous pouvez le définir après la création du Writer en modifiant la propriété :

Géométrie et équilibrage des enregistrements

Étant donné que chaque forme doit avoir un enregistrement correspondant, il est essentiel que le nombre d'enregistrements soit égal au nombre de formes pour créer un fichier de formes valide. Pour aider à éviter un désalignement accidentel, PyShp dispose d'une fonction "équilibrage automatique" pour s'assurer que lorsque vous ajoutez une forme ou un enregistrement, les deux côtés de l'équation s'alignent. Cette fonctionnalité n'est PAS activée par défaut. Pour l'activer, définissez l'attribut autoBalance sur 1 (True) :

Vous avez également la possibilité d'appeler manuellement la méthode balance() chaque fois que vous ajoutez une forme ou un enregistrement pour vous assurer que l'autre côté est à jour. Lorsque l'équilibrage est utilisé, des formes nulles sont créées du côté de la géométrie ou un enregistrement avec une valeur de "NULL" pour chaque champ est créé du côté des attributs.

L'option d'équilibrage vous donne une flexibilité dans la façon dont vous créez le fichier de formes.

Sans équilibrage automatique, vous pouvez ajouter une géométrie ou des enregistrements à tout moment. Vous pouvez créer toutes les formes, puis créer tous les enregistrements ou vice versa. Vous pouvez utiliser la méthode d'équilibre après avoir créé une forme ou un enregistrement à chaque fois et effectuer des mises à jour ultérieurement. Si vous n'utilisez pas la méthode d'équilibrage et oubliez d'équilibrer manuellement la géométrie et les attributs, le fichier de formes sera considéré comme corrompu par la plupart des logiciels de fichiers de formes.

Avec l'équilibrage automatique, vous pouvez ajouter des formes ou une géométrie et mettre à jour les entrées vides de chaque côté selon vos besoins. Même si vous oubliez de mettre à jour une entrée, le fichier de formes sera toujours valide et géré correctement par la plupart des logiciels de fichiers de formes.

Ajout de géométrie

La géométrie est ajoutée à l'aide de l'une des trois méthodes suivantes : "null", "point", ou "poly". La méthode "null" est utilisée pour les formes nulles, "point" est utilisé pour les formes ponctuelles et "poly" est utilisé pour tout le reste.

Ajout d'une forme Null

Étant donné que les types de forme Null (type de forme 0) n'ont pas de géométrie, la méthode "null" est appelée sans aucun argument.

La liste des formes de l'objet écrivain aura désormais une forme nulle :

Ajout d'une forme de point

Les formes de points sont ajoutées à l'aide de la méthode "point". Un point est spécifié par une valeur x, y et facultative z (élévation) et m (mesure).

Ajout d'une forme poly

Les formes "Poly" peuvent être des polygones ou des lignes. Les polygones Shapefile doivent avoir au moins 4 points et le dernier point doit être le même que le premier. PyShp applique automatiquement les polygones fermés. Une ligne doit avoir au moins deux points. En raison des similitudes entre ces deux types de formes, ils sont créés à l'aide d'une méthode unique appelée "poly".

Ajouter un polygone avec des anneaux

Les polygones sont constitués d'anneaux, ce qui signifie qu'ils sont fermés. Le premier point et le dernier point d'un anneau doivent être identiques. PyShp applique la fermeture de l'anneau si l'anneau est incomplet lorsque vous ajoutez la forme. Les polygones peuvent avoir des anneaux intérieurs qui créent des trous. Les trous sont définis par l'ordre des points. Normalement, les points dans un anneau fonctionnent dans le sens horaire. Si les points tournent dans le sens inverse des aiguilles d'une montre, ils forment un trou. Si vous n'ordonnez pas correctement les points, vous n'aurez que des polygones qui se chevauchent.

Vous pouvez utiliser la méthode "shapefile.signed_area()" pour déterminer si un anneau est dans le sens horaire ou antihoraire. Une valeur >= 0 signifie que l'anneau est dans le sens antihoraire et < 0 signifie que l'anneau est dans le sens horaire. La valeur renvoyée est également l'aire du polygone.

Création de polygones 3D

Les valeurs d'altitude, appelées valeurs "Z", vous permettent de créer des fichiers de formes en 3 dimensions. La valeur z est une valeur supplémentaire spécifiée dans le cadre d'un point.

Les valeurs z sont stockées dans un attribut de forme séparé.

Création d'attributs

La création d'attributs comporte deux étapes. L'étape 1 consiste à créer des champs pour contenir des valeurs d'attribut et l'étape 2 consiste à remplir les champs avec des valeurs pour chaque enregistrement de forme.

Les tentatives suivantes pour créer un fichier de formes complet :

Vous pouvez également ajouter des attributs à l'aide d'arguments de mot-clé où les clés sont des noms de champ.

Noms de fichiers

Les extensions de fichiers sont facultatives lors de la lecture ou de l'écriture de fichiers shapfile. Si vous les spécifiez, Pyshp les ignore de toute façon. Lorsque vous enregistrez des fichiers, vous pouvez spécifier un nom de fichier de base utilisé pour les trois types de fichiers. Ou vous pouvez spécifier un nmae pour un ou plusieurs types de fichiers. Dans ce cas, tous les types de fichiers non attribués ne seront pas enregistrés et seuls les types de fichiers avec des noms de fichiers seront enregistrés. Si vous ne spécifiez aucun nom de fichier (c'est-à-dire save()), un nom de fichier unique est généré avec le préfixe "shapefile_" suivi de caractères aléatoires qui sont utilisés pour les trois fichiers. Le nom de fichier unique est renvoyé sous forme de chaîne.

Enregistrement dans des objets de type fichier

Tout comme vous pouvez lire des fichiers de formes à partir d'objets de type fichier python, vous pouvez également les écrire.

Modification des fichiers de formes

La classe Editor tente de faciliter la modification des fichiers de formes existants en gérant les détails de lecture et d'écriture dans les coulisses.

Ajoutons des formes aux fichiers de formes existants :

Ajouter un point à un fichier de formes de points

Modifiez le point ajouté pour changer la valeur "y" et "z"

Ajoutez une nouvelle ligne à un fichier de formes de ligne :

Ajoutez un nouveau polygone à un fichier de formes de polygones :

Supprimez le premier point de chaque fichier de formes - pour un fichier de formes de points qui est la première forme et enregistrez"


Comment obtenir le nom de la forme

En utilisant DotSpatial, si j'ouvre un Shapefile en tant que IFeatureSet , je peux voir une collection de formes dans le FeatureSet et ces formes ont des collections d'attributs. Mais je ne vois pas de moyen évident de trouver le nom associé à la forme ?

Par exemple, si j'ai le code suivant :

Si je débogue dans ce code en plaçant un point d'arrêt sur l'objet Shape, je peux voir une collection d'attributs. Dans l'exemple que j'utilise, chaque forme a 12 attributs. Je peux voir que l'un de ces attributs est ce que je considérerais comme le nom de la forme (dans cet exemple, je regarde les provinces de l'Équateur), mais je ne sais pas comment associer de manière fiable lequel de ces attributs serait être le nom de la forme, dans ce cas le nom de la province.

Voici un exemple des attributs disponibles que je peux voir pour la première forme :

D'un coup d'œil rapide, je dirais que l'attribut à l'index 4 était celui dont j'avais besoin, mais comment puis-je le découvrir par programme ?


Modifier plus loin

Il semble que, en fouillant davantage dans les données, les étiquettes des attributs pourraient être les noms de colonnes DataTable dans l'IFeatureSet :

Même si. laquelle d'entre elles choisirais-je par programmation si je voulais importer ces formes ? Le seul moyen est-il de permettre à la personne effectuant l'importation de choisir manuellement le bon ?


Reprojeter un fichier de formes de polygones à l'aide de PyShp et PyProj

Dans cet article, j'utiliserai le PyShpbibliothèque avec le PyProjbibliothèque pour reprojeter le limite de l'autorité locales d'Irlande, au format Shapefile, de Mercator transverse irlandais au WGS 84 utilisant Python.

Pour suivre, téléchargez les limites d'administration à partir du Bureau central des statistiques (CSO) et renommez les fichiers en Irlande_LA. Déplacez les fichiers vers le répertoire à partir duquel vous souhaitez travailler.

Vous devrez installer les bibliothèques, vous pouvez utiliser installation facile ou alors pépin en ouvrant le invite de commande fenêtre et entrer

Ouvrir un interactif Python fenêtre et entrez ce qui suit pour vous assurer que vous avez accès aux bibliothèques.

Si aucune erreur n'est renvoyée, vous êtes prêt à partir.

Ma tentative initiale de conversion des données a conduit à cette monstruosité…

et j'ai immédiatement réalisé que plusieurs limites d'autorités locales étaient constituées d'une géométrie en plusieurs parties.

Nous aurions besoin de deux constructions, une pour reconstruire des entités géométriques simples et une pour reconstruire des entités géométriques en plusieurs parties.

Alors allons-y. Dans votre favori Python IDE ouvre un nouveau script, importe les bibliothèques et enregistre-le. Il y a un lien en bas de l'article pour télécharger le code.

Définissez une fonction pour créer un fichier de projection (.prj). Voir l'article sur la génération d'un fichier de projection (.prj) à l'aide de Python pour plus d'informations.

Définissez un chemin vers votre répertoire de travail où le Irlande_LA les fichiers résident. Vous pouvez créer un chemin similaire au mien ci-dessous ou définir le vôtre, assurez-vous simplement que le Shapefile s'y trouve.

Utilisant PyShp créer un Lecteur objet d'accéder aux données du Irlande_LA Fichier de formes.

Créer un Écrivain objet dans lequel écrire des données en tant que nouveau Shapefile.

Définir des variables pour l'accès au domaine les informations du fichier Shapefile d'origine et du nouveau.

Nous allons récupérer toutes les informations de champ de l'original et les copier dans le nouveau. le ‘Drapeau de suppression’ tel que défini dans la norme Shapefile sera transmis (le tuple dans le si déclaration), et nous voulons des données des listes qui suivent le tuple qui définissent le nom du champ, le type de données et la longueur du champ. Fondamentalement, nous reproduisons simplement la structure du champ de l'original dans le nouveau.

Maintenant, nous voulons remplir les champs avec des informations d'attribut. Créez une variable pour accéder aux enregistrements du fichier d'origine.

Copiez les enregistrements de l'original dans le nouveau.

Dans l'extrait ci-dessus, le arguments La variable contient chaque enregistrement sous forme de liste, puis décompresse cette liste en tant qu'arguments dans wgs_shp.record(attr_1, attr_2, attr_3….), qui crée un record dans le dbf déposer.

Nous avons maintenant toutes les données d'attribut copiées. Commençons la quête pour convertir les données de ITM à WGS84! Définissez la projection d'entrée (la projection du fichier d'origine) et une projection de sortie en utilisant PyProj..

Nous devons accéder à la géométrie des entités dans le fichier d'origine, alors donnez-vous-y accès.

Maintenant, nous parcourons chaque entité du jeu de données d'origine, accédons à chaque point qui compose la géométrie, convertissons les coordonnées de chaque point et réassemblons la géométrie transformée dans le nouveau fichier de formes. le si L'instruction gérera la géométrie avec une seule partie constituant la fonction.

le autre L'instruction gère les géométries en plusieurs parties.

Et générez le fichier de projection correspondant.

Enregistrez et exécutez le fichier. Ouvrez le fichier de formes dans un SIG inspecter. Jetez un œil à la table attributaire, bien remplie avec les données. Vous devriez pouvoir configurer le code pour d'autres fichiers de polygones, il suffit de modifier le fichier de formes d'entrée d'origine, de définir les projections (entrée et sortie) et d'enregistrer un nouveau fichier de formes. N'oubliez pas non plus le fichier de projection !

Vous pouvez télécharger le code source de cet article ici. Faites un clic droit sur le lien de téléchargement sur la page, sélectionnez Enregistrer le fichier sous…, avant d'enregistrer, modifiez le .SMS dans le nom de fichier à .py Et enregistrer.

Si quelqu'un voit un moyen de rendre le code plus efficace, veuillez commenter, vos commentaires sont appréciés.


Extensions de fichiers Shapefile

Les fichiers de formes sont un format simple et non topologique pour stocker l'emplacement géométrique et les informations attributaires des entités géographiques. Un fichier de formes est l'un des formats de données spatiales que vous pouvez utiliser et modifier dans ArcGIS.

Le format de fichier de formes définit la géométrie et les attributs des entités référencées géographiquement dans trois fichiers ou plus avec des extensions de fichier spécifiques qui doivent être stockées dans le même espace de travail de projet. Elles sont:

  • .shp : le fichier principal qui stocke la géométrie d'entité requise.
  • .shx : le fichier d'index qui stocke l'index de la géométrie d'entité requise.
  • .dbf : la table dBASE qui stocke les informations attributaires des entités requises.

Il existe une relation un à un entre la géométrie et les attributs, qui est basée sur le numéro d'enregistrement. Les enregistrements d'attributs du fichier dBASE doivent être dans le même ordre que les enregistrements du fichier principal.

Chaque fichier doit avoir le même préfixe, par exemple, roads.shp, roads.shx et roads.dbf.

Lors de l'affichage de fichiers de formes dans ArcCatalog (ou toute application ArcGIS), vous ne verrez qu'un seul fichier représentant le fichier de formes. Cependant, vous pouvez utiliser l'Explorateur Windows pour afficher tous les fichiers associés à un fichier de formes. Lors de la copie de fichiers de formes, il est recommandé de le faire dans ArcCatalog ou à l'aide d'un outil de géotraitement. Cependant, si vous copiez un fichier de formes en dehors d'ArcGIS, veillez à copier tous les fichiers qui composent le fichier de formes.


Chapitres

Auteur : David DiBiase, maître de conférences, John A. Dutton e-Education Institute et directeur de l'éducation, Industry Solutions, Esri. Instructeurs et contributeurs : Jim Sloan, maître de conférences, John A. Dutton e-Education Institute Ryan Baxter, assistant de recherche principal, John A. Dutton e-Education Institute, Beth King, maître de conférences, John A. Dutton e-Education Institute et assistant Gestionnaire de programme pour l'éducation géospatiale en ligne, et Adrienne Goldsberry, maître de conférences, John A. Dutton e-Education Institute College of Earth and Mineral Sciences, The Pennsylvania State University.

Penn State Professional Masters Degree in GIS: Lauréat du prix Sloan Consortium 2009 pour le programme en ligne le plus exceptionnel

Ce module didactique fait partie de l'initiative REL du Penn State College of Earth and Mineral Sciences.

Le Collège des sciences de la terre et des minéraux s'engage à rendre ses sites Web accessibles à tous les utilisateurs, et accueille les commentaires ou suggestions sur les améliorations d'accès. Veuillez envoyer vos commentaires ou suggestions sur l'accessibilité à l'éditeur du site. L'éditeur du site peut également être contacté pour des questions ou des commentaires concernant cette ressource éducative libre.


Considérations relatives au géotraitement pour la sortie du fichier de formes

Ces problèmes (et plus encore) signifient que les fichiers de formes sont un mauvais choix pour la gestion active des bases de données - ils ne gèrent pas le cycle de vie moderne de la création, de l'édition, de la gestion des versions et de l'archivage des données.

Quand dois-je utiliser un fichier de formes ?


  • Lors de l'exportation de données à utiliser dans une application logicielle non-ESRI.
  • Lors de l'exportation de données à utiliser dans ArcView 3 ou ArcInfo Workstation.
  • Lorsque vous devez écrire rapidement des entités et des attributs simples, comme pour les services de géotraitement ArcGIS Server. Mais soyez conscient des limites décrites ci-dessous.

Quand ne dois-je pas utiliser de fichier de formes ?

À quelques exceptions près notées ci-dessous, les fichiers de formes sont acceptables pour stocker une géométrie d'entité simple. Cependant, les fichiers de formes ont de sérieux problèmes avec les attributs. Par exemple, ils ne peuvent pas stocker de valeurs nulles, ils arrondissent les nombres, ils prennent mal en charge les chaînes de caractères Unicode, ils n'autorisent pas les noms de champ de plus de 10 caractères et ils ne peuvent pas stocker à la fois une date et une heure dans un champ. Ce ne sont que les principaux problèmes. De plus, ils ne prennent pas en charge les fonctionnalités trouvées dans les géodatabases telles que les domaines et les sous-types. Donc, à moins que vous n'ayez des attributs très simples et aucune capacité de géodatabase, n'utilisez pas de fichiers de formes.


Composants Shapefile et extensions de fichier

Les fichiers de formes sont stockés dans trois fichiers ou plus qui ont tous le même préfixe et sont stockés dans le même dossier système (espace de travail du fichier de formes). Vous verrez les fichiers individuels lors de l'affichage du dossier dans l'Explorateur Windows, pas dans ArcCatalog.

Extension La description Obligatoire?
.shp Le fichier principal qui stocke la géométrie de l'entité. Aucun attribut n'est stocké dans ce fichier & uniquement la géométrie. Oui
.shx Un fichier compagnon du .shp qui stocke la position des ID de fonction individuels dans le fichier .shp. Oui
.dbf La table dBASE qui stocke les informations attributaires des entités. Oui
.sbn et .sbx Fichiers qui stockent l'index spatial des entités. Non
.atx Créé pour chaque index attributaire dBASE créé dans ArcCatalog. Non
.ixs et .mxs Index de géocodage pour les fichiers de formes en lecture/écriture. Non
.prj Le fichier qui stocke les informations du système de coordonnées. Non
.xml Metadata for ArcGIS—stocke des informations sur le fichier de formes. Non


  • Il existe une limite de taille de 2 Go pour tout fichier de composant de fichier de formes, ce qui se traduit par un maximum d'environ 70 millions d'entités ponctuelles. Le nombre réel d'entités linéaires ou surfaciques que vous pouvez stocker dans un fichier de formes dépend du nombre de sommets dans chaque ligne ou polygone (un sommet équivaut à un point).

  • Les fichiers de formes ne contiennent pas de tolérance XY comme les classes d'entités de géodatabase. La tolérance XY est la distance minimale entre les coordonnées avant qu'elles ne soient considérées comme égales. Cette tolérance XY est utilisée lors de l'évaluation des relations entre les entités au sein de la même classe d'entités ou entre plusieurs classes d'entités différentes. Il est également largement utilisé lors de l'édition d'entités. Si vous effectuez toute sorte d'opération impliquant une comparaison entre des entités, telle que l'utilisation d'outils de superposition, l'outil Découper, l'outil Sélectionner une couche par emplacement ou presque tous les outils qui prennent en entrée deux classes d'entités ou plus, vous devez utiliser la géodatabase classes d'entités (qui ont une tolérance XY) plutôt que des fichiers de formes.

  • Un fichier de formes peut prendre jusqu'à trois à cinq fois plus d'espace qu'une géodatabase fichier ou SDE en raison des méthodes de compression de forme.

  • Les fichiers de formes prennent en charge les multipatchs, mais ne prennent pas en charge les fonctionnalités multipatch avancées suivantes :

  • Coordonnées de la texture
  • Textures et couleur des pièces
  • normales d'éclairage

    • Contrairement à d'autres formats, les attributs numériques sont stockés au format caractère plutôt qu'au format binaire. Pour les nombres réels (c'est-à-dire les nombres contenant des décimales), cela peut entraîner des erreurs d'arrondi. (Cette limitation ne s'applique pas aux coordonnées de forme, uniquement aux attributs.) Le tableau suivant résume la largeur de champ pour chaque type de données.

      Type de données de géodatabaseType de champ dBASELargeur du champ dBASE (nombre de caractères)
      Identifiant de l'objetNombre9
      Entier courtNombre4
      Entier longNombre9
      FlotterFlotter13
      DoubleFlotter13
      TextePersonnage254
      DateDate8

    • La norme de fichier dBASE ne prend en charge que les caractères ANSI dans leurs noms et valeurs de champ. ESRI a ajouté une prise en charge étendue d'Unicode pour les fichiers dBASE afin de vous permettre de stocker les noms et les valeurs des champs Unicode. Mais cette prise en charge supplémentaire réside uniquement dans ArcGIS et non dans les applications non-ESRI. La prise en charge d'Unicode dans dBASE est un effort continu d'ESRI, ce qui signifie que les problèmes continuent d'être détectés et résolus.

    REMARQUE : si vous devez prendre en charge Unicode dans vos noms de champ ou valeurs de champ, nous vous suggérons fortement d'utiliser des géodatabases plutôt que des fichiers de formes.


    • Les noms de champs ne peuvent pas dépasser 10 caractères.
    • La longueur d'enregistrement maximale d'un attribut est de 4 000 octets. The record length is the number of bytes used to define all the fields, not the number of bytes used to store the actual values.
    • The maximum number of fields is 255. A conversion to shapefile will convert the first 255 fields if this limit is exceeded.
    • The dBASE file must contain at least one field. When you create a new shapefile or dBASE table, an integer ID field is created as a default.
    • dBASE files do not support type blob, guid, global ID, coordinate ID, or raster field types.
    • dBASE files have little SQL support aside from a WHERE clause.
    • Attribute indexes are deleted when you save edits, and you must re-create them from scratch.

    • Subtypes
    • Attribute domains
    • Geometric networks
    • Topologies
    • Annotation


    Shapefiles and geoprocessing

    Any geoprocessing tool that outputs a feature class allows you to choose either a shapefile or geodatabase feature class as the output format. Similarly, a tool that outputs a table allows you to choose either a dBASE file (.dbf) or a geodatabase table as the output. You should always be aware of which format you use and the consequences of converting a geodatabase input to a shapefile output.

    Geoprocessing tools auto-generate an output feature class or table for you. This autogenerated output is based on a number of factors as described in Specifying tool inputs and outputs. If your scratch workspace environment is set to a system folder, and not a geodatabase, the auto-generated output features class will be a shapefile or dBASE file, as illustrated below.

    It is suggested that you set your scratch workspace to a file geodatabase so that the auto-generated output is written to a file geodatabase, not a shapefile or .dbf table.

    Because shapefiles write quickly, they are often used to write intermediate data in models since this makes for faster model execution. However, writing to a file geodatabase is almost as fast as writing to a shapefile, so unless execution speed is critical, you should always use a file geodatabase for intermediate and output data. If you do use shapefiles, be aware of their limitations as described above and only use shapefiles for simple features and attributes. An alternative to using shapefiles for intermediate data is to write features to the in_memory workspace.
    Learn more about writing features to the in_memory workspace.


    An effective guide to geographic information systems and remote sensing analysis using Python 3

    • Construct applications for GIS development by exploiting Python
    • This focuses on built-in Python modules and libraries compatible with the Python Packaging Index distribution system - no compiling of C libraries necessary
    • This practical, hands-on tutorial teaches you all about Geospatial analysis in Python

    If you are a Python developer, researcher, or analyst who wants to perform Geospatial, modeling, and GIS analysis with Python, then this book is for you. Familarity with digital mapping and analysis using Python or another scripting language for automation or crunching data manually is appreciated.

    • Automate Geospatial analysis workflows using Python
    • Code the simplest possible GIS in 60 lines of Python
    • Mold thematic maps with Python tools
    • Get hold of the various forms that geospatial data comes in
    • Produce elevation contours using Python tools
    • Create flood inundation models
    • Apply Geospatial analysis to find out about real-time data tracking and for storm chasing

    Geospatial Analysis is used in almost every field you can think of from medicine, to defense, to farming. This book will guide you gently into this exciting and complex field. It walks you through the building blocks of geospatial analysis and how to apply them to influence decision making using the latest Python software.

    Learning Geospatial Analysis with Python, 2nd Edition uses the expressive and powerful Python 3 programming language to guide you through geographic information systems, remote sensing, topography, and more, while providing a framework for you to approach geospatial analysis effectively, but on your own terms. We start by giving you a little background on the field, and a survey of the techniques and technology used. We then split the field into its component specialty areas: GIS, remote sensing, elevation data, advanced modeling, and real-time data.

    This book will teach you everything you need to know about, Geospatial Analysis from using a particular software package or API to using generic algorithms that can be applied. This book focuses on pure Python whenever possible to minimize compiling platform-dependent binaries, so that you don't become bogged down in just getting ready to do analysis. This book will round out your technical library through handy recipes that will give you a good understanding of a field that supplements many a modern day human endeavors.

    This is a practical, hands-on tutorial that teaches you all about Geospatial analysis interactively using Python.


    Section 1: The History and the Present of the Industry

    This section starts by demonstrating common geospatial analysis processes using illustrations, basic formulas, simple code, and Python. Building on that, you'll learn how to play with geospatial data&mdashacquiring data and preparing it for various analyses. After that, you'll gain an understanding of the various software packages and libraries used in the geospatial technology ecosystem. At the end of this section, you'll learn how to evaluate any geospatial tool.

    This section includes the following chapters:

      , Learning about Geospatial Analysis with Python , Learning Geospatial DataChapter 3, The Geospatial Technology Landscape

    About the Author

    Joel Lawhead

    Joel Lawhead is a PMI-certified Project Management Professional, a certified GIS Professional, and the Chief Information Officer of NVision Solutions Inc., an award-winning firm specializing in geospatial technology integration and sensor engineering for NASA, FEMA, NOAA, the US Navy, and many other commercial and non-profit organizations. Joel began using Python in 1997 and started combining it with geospatial software development in 2000. He has authored multiple editions of Learning Geospatial Analysis with Python and QGIS Python Programming Cookbook, both from Packt. He is also the developer of the open source Python Shapefile Library (PyShp) and maintains a geospatial technical blog, GeospatialPython, and Twitter feed, @SpatialPython.


    Voir la vidéo: Python GIS - Open and Display a Shapefile with Geopandas