Scripts Python 2.7 pour ArcGIS for Desktop, Study notes of Computer Numerical Control

Ce document propose un ensemble de scripts Python exclusivement dédiés au développement d'outils pour ArcGIS for Desktop.

Typology: Study notes

2015/2016

Uploaded on 07/08/2024

ourika-machines
ourika-machines 🇲🇦

5

(1)

1 / 23

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
ENSG/DCAIG 2016 Alain Brucelle
Bibliothèque de scripts Python 2.7
pour ArcGIS 10.3.1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Partial preview of the text

Download Scripts Python 2.7 pour ArcGIS for Desktop and more Study notes Computer Numerical Control in PDF only on Docsity!

Introduction

Ce document propose un ensemble de scripts Python exclusivement dédiés au développement

d'outils pour ArcGIS for Desktop.

Ces scripts ont été optimisés pour les versions ArcGIS 10.3.1 et Python 2.7.

ArcGIS et le langage Python sont en perpétuelle évolution. Chaque nouvelle version du

langage Python et/ou du logiciel ArcGIS for Desktop peuvent rendre certains scripts de

géotraitement encore plus performants (fonctions python plus puissantes, site-package arcpy

plus riche, nouveaux outils, etc…). Cela implique une veille technique et syntaxique qui

permettra, si nécessaire, de mettre à jour certains de ces scripts afin qu’ils collent au mieux

aux versions les plus récentes.

Les scripts présents dans ce document sont volontairement écrits sans commentaires pour une

lecture 'brute' afin de réduire le nombre de lignes de code. Seules, les informations d’en-tête

sont gardées.

Les utilisateurs confirmés pourront exploiter ce document afin d'en extraire des procédures

sans les réécrire et les intégrer dans leurs propres développements d'outils scripts.

De plus, dans un souci pédagogique, tous les utilisateurs, même débutants, peuvent accéder

aux sources de ces scripts dans lesquels des informations supplémentaires expliquant la

fonction de chaque ligne de code sont décrites sous forme de commentaires détaillés. Un

répertoire contenant toutes ces sources est fourni avec ce document.

Une boite à outil contenant les outils liés à chacun de ces scripts est disponible dans ce même

répertoire. Les scripts ne peuvent fonctionner qu'à partir de ces outils en les exécutants depuis

ArcCatalog ou ArcMap. Il faudra simplement ne pas oublier de refaire les liens respectifs via

les propriétés de ces outils dans l'environnement ArcMap ou ArcCatalog (chaque script doit

pointer vers l'outil qui lui correspond).

Au fur et à mesure des expériences de chacun (enseignants, étudiants et autres utilisateurs), ce

document pourra évoluer de 2 façons :

  • Amélioration/optimisation des scripts existants,
  • Création de nouveaux scripts.

Tous les cas de figure ne sont évidemment pas envisagés ici. Vous trouverez une source

importante d’explications et des exemples d’autres scripts dans l’aide 'ArcGIS for Desktop'

installé automatiquement avec le logiciel ArcGIS pour la version 10.3.1 :

  • Chapitre : Géotraitement => Python
  • Chapitre : Géotraitement => ArcPy

Dans ce document, l'environnement de programmation (IDE) utilisé pour Python est

'PyScripter'. Cet IDE gratuit que l'on trouve facilement sur Internet est simple à installer et à

utiliser. Il est stable et performant. C'est l'IDE utilisé dans le cadre de l'enseignement Python

et arcpy à l'ENSG au DCAIG (Département de Cartographie et Analyse de l'Information

Géographique).

Récupération et affichage des géométries d’entités

Afficher les coordonnées (x, y) des entités de type point ou multi-­‐point

Ce script permet de récupérer les coordonnées de chaque point ou multi-point d’une classe

d’entités. L’identifiant et les coordonnées (x, y) de chaque point ou multi-point s’afficheront

dans la fenêtre de déroulement du programme. La valeur d'un champ de chaque point pourra

éventuellement aussi être affichée si l'utilisateur choisi ce champ dans l'outil script (ce choix

est facultatif).

_# -­‐-­‐ coding utf8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 01 _Lire_XY_Point_Multipoint_201 6 .py

Auteur : Alain Brucelle

Date : 03/10/

Objet : Lecture et affichage des coordonnées (x, y) et éventuellement d'une

valeur d'un champ (facultatif) de chaque point ou multipoint d'une

classe d'entités

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy fcIn = arcpy.GetParameterAsText( 0 ) champ = arcpy.GetParameterAsText( 1 ) dscFC = arcpy.Describe(fcIn) if champ: listJetons = ["OID@", "Shape@XY", champ] else : listJetons = ["OID@", "Shape@XY"] if dscFC.shapeType == "Point": arcpy.AddMessage(u"\n\nAffichage de chaque entité point :") with arcpy.da.SearchCursor(fcIn, listJetons) as curseur: for row in curseur: x, y = row[ 1 ] if champ: arcpy.AddMessage(u"\nPoint ID {0} : {3}\n -­‐ X : {1}\n -­‐ Y : {2}" .format(row[ 0 ], x, y, row[ 2 ])) else : arcpy.AddMessage(u"\nPoint ID {0} :\n -­‐ X : {1}\n -­‐ Y : {2}" .format(row[ 0 ], x, y)) elif dscFC.shapeType == "Multipoint": arcpy.AddMessage(u"\n\nAffichage de chaque entité multipoint :") listJetons[ 1 ] = "Shape@" with arcpy.da.SearchCursor(fcIn, listJetons) as curseur: for row in curseur: if champ: arcpy.AddMessage("\nMultipoint ID {0} : {1}\n".format(row[ 0 ], row[ 2 ])) else : arcpy.AddMessage("\nMultipoint ID {0} :\n".format(row[ 0 ])) for pnt in row[ 1 ]: arcpy.AddMessage(" -­‐ X : {0}\n -­‐ Y : {1}\n".format(pnt.X, pnt.Y)) arcpy.AddMessage(u"\n-­‐-­‐ Il n'y a plus d'entités : processus terminé -­‐-­‐\n")

Afficher les coordonnées (x, y) des entités de type polygone ou polyline

Ce script permet de récupérer les coordonnées de chaque point composant chaque entité de

type polygone ou polyline simple ou multi-partie d’une classe d’entités. L’identifiant de

chaque entité et de chaque partie d’entités ainsi que la liste des coordonnées (x, y) de leurs

points s’affichent dans la fenêtre de déroulement du programme.

Concernant les polygones multi-parties, une information supplémentaire indique si une ou

plusieurs parties de l’entité est une surface intérieure (un trou).

_# -­‐-­‐ coding utf8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 02 _Lire_XY_Polygone_polyline_201 6 .py

Auteur : Alain Brucelle

Date : 03 / 10 /201 6

Objet : Lecture et affichage des coordonnées X et Y des géométries

de type polyline ou polygone (troué ou non)

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy fcIn = arcpy.GetParameterAsText( 0 ) with arcpy.da.SearchCursor(fcIn, ["OID@", "Shape@ "]) as rows: for row in rows: arcpy.AddMessage(u"\nEntité {0}:".format(row[ 0 ])) idPart = 0 for part in row[ 1 ]: arcpy.AddMessage(" Partie {0}:".format(idPart)) idSurfInt = 0 for point in part: if point: arcpy.AddMessage(" X : {0}, Y : {1}" .format( round (point.X, 2 ), round (point.Y, 2 ))) else : arcpy.AddMessage(" Surface interne {0}:".format(idSurfInt)) idSurfInt += 1 idPart += 1 arcpy.AddMessage(u"\n-­‐-­‐ Il n'y a plus d'entités : processus terminé -­‐-­‐\n")

Création d’entités dans une classe d'entités de type multipoint

Ce script crée une classe d’entités de type multipoint dans laquelle sont ajoutés des points

simples ou multipoints dont les coordonnées sont lues à partir d’une variable de type liste. Un

multipoint est un ensemble de points référencé par un seul identifiant (une seule ligne) dans la

table.

_# -­‐-­‐ coding utf 8 -­‐-­‐

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 0 4 _Créer_Multipoint_201 6 .py

Date : 03 / 10 /201 6

Nom : Alain Brucelle

Objet : Création d'une classe d'entités "MULTIPOINT" contenant des points

indépendants et/ou des point groupés

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_

import arcpy arcpy.env.overwriteOutput = True fcOut = arcpy.GetParameterAsText( 0 ) prj = arcpy.GetParameterAsText( 1 ) rep = os.path.split(fcOut)[ 0 ] nFcOut = os.path.split(fcOut)[ 1 ] arcpy.CreateFeatureclass_management(rep, nFcOut, "MULTIPOINT", "", "", "", prj) listMPt = [[[ 1 , 1 ],[ 2 , 1 ],[ 4 , 1 ]],[[ 3 , 1 ]],[[ 5 , 1 ]]] point = arcpy.Point() array = arcpy.Array() with arcpy.da.InsertCursor(fccOut, ["SHAPE@"]) as rows: for row in listMPt: for coord in row: point.X, point.Y = coord[ 0 ], coord[ 1 ] array.add(point) multiPoint = arcpy.Multipoint(array) rows.insertRow([multiPoint]) array.removeAll()

Création d’entités dans une classe d'entités de type polyline

Ce script crée une classe d’entités de type polyline dans laquelle sont ajoutées des polylines

simples ou multi-parties construites à partir des coordonnées de point stockées dans une

variable de type liste. Une polyline multi-partie est un groupe de polylines référencé par un

seul identifiant (une seule ligne) dans la table.

_# -­‐-­‐ coding: utf8 -­‐-­‐

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 0 5 Créer_Polyline 2016 .py

Date : 03 / 10 /201 6

Nom : Alain Brucelle

Objet : Création de polylines simples et/ou multi-­‐parties

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_

import arcpy, os arcpy.env.overwriteOutput = True fcOut = arcpy.GetParameterAsText( 0 ) prj = arcpy.GetParameterAsText( 1 ) rep = os.path.split(fcOut)[ 0 ] fcOut = os.path.split(fcOut)[ 1 ] arcpy.CreateFeatureclass_management(rep, fcOut, "POLYLINE", "", "", "", prj) listPlg = [[[[ 1 , 11 ],[ 1 , 19 ],[ 9 , 19 ],[ 9 , 11 ]]], [[[ 11 , 11 ],[ 11 , 19 ],[ 19 , 19 ],[ 19 , 11 ]]], [[[ 1 , 1 ],[ 1 , 8 ],[ 8 , 1 ]], [[ 2 , 9 ],[ 9 , 9 ],[ 9 , 2 ]]], [[[ 11 , 1 ],[ 11 , 9 ],[ 19 , 9 ],[ 19 , 1 ]], [[ 12 , 3 ],[ 12 , 8 ],[ 17 , 8 ]], [[ 13 , 2 ],[ 18 , 7 ],[ 18 , 2 ]]]] point = arcpy.Point() array = arcpy.Array() pArray = arcpy.Array() with arcpy.da.InsertCursor(fcOut, ["SHAPE@"]) as rows: for row in listPlg: for part in row: for coord in part: point.X, point.Y = coord[ 0 ], coord[ 1 ] array.add(point) pArray.add(array) array.removeAll() polylines = arcpy.Polyline(pArray) rows.insertRow([polylines]) pArray.removeAll()

Sélections d’entités

Sélection selon les attributs avec récupération de la sélection dans une classe d’entités

Ce script permet de sélectionner certaines entités d’une classe d’entités répondant à une

requête attributaire. Les entités sélectionnées sont ensuite redirigées vers une nouvelle classe

d’entités. Bien que ce script semble simple, il est très important de le proposer dans cette

bibliothèque du fait qu'il est un passage obligé dans le traitement de données qui répondent à

une requête attributaire. Ceci évite de traiter l'ensemble des données.

_# -­‐-­‐ coding utf 8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 07 Sélection_par_attribut 2016 .py

Date : 03 /10/

Auteur : Alain Brucelle

Objet : Sélection selon des attributs (requête attributaire) qui permet

d'isoler dans une couche les entités sélectionnées par la requête.

Cette couche est ensuite récupérée dans une classe d'entités par copie.

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy arcpy.env.overwriteOutput = True fcIn = arcpy.GetParameterAsText( 0 ) fcOut = arcpy.GetParameterAsText( 1 ) reqSQL = arcpy.GetParameterAsText( 2 ) lyrOut = "Couche_Temp" arcpy.MakeFeatureLayer_management(fcIn, lyrOut, reqSQL) arcpy.CopyFeatures_management(lyrOut, fcOut)

Sélection selon l’emplacement avec récupération de la sélection dans une classe d’entités

Ce script permet de sélectionner certaines entités d’une classe d’entités répondant à une

requête spatiale. Les entités sélectionnées sont ensuite redirigées vers une nouvelle classe

d’entités. Comme le script précédent, ce script semble simple. Mais pour les mêmes raisons, il

est très important de le proposer dans cette bibliothèque du fait qu'il est un passage obligé

dans tout traitement sur des données qui répondent à une requête spatiale. Ceci évite de traiter

l'ensemble des données.

_# -­‐-­‐ coding utf 8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 08_Sélection_par_emplacement_2015.py

Date : 03 / 10 /201 6

Auteur : Alain Brucelle

Objet : Sélection selon l’emplacement (requête spatiale) qui permet d'isoler

dans une couche les entités sélectionnées par la requête spatiale.

Cette couche est ensuite récupérée dans une classe d'entités par copie.

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy arcpy.env.overwriteOutput = True fcCible = arcpy.GetParameterAsText( 0 ) reqSp = arcpy.GetParameterAsText( 1 ) fcSource = arcpy.GetParameterAsText( 2 ) dist = arcpy.GetParameterAsText( 3 ) typSel = arcpy.GetParameterAsText( 4 ) fcOut = arcpy.GetParameterAsText( 5 ) lyrCible = "Couche_Temp" arcpy.MakeFeatureLayer_management(fcCible, lyrCible) listTrue = ["INTERSECT","INTERSECT_3D","WITHIN_A_DISTANCE","WITHIN_A_DISTANCE_3D", "CONTAINS","WITHIN","COMPLETELY_WITHIN","HAVE_THEIR_CENTER_IN"] if reqSp in listTrue: arcpy.SelectLayerByLocation_management(lyrCible, reqSp, fcSource, dist, typSel) else : arcpy.SelectLayerByLocation_management(lyrCible, reqSp, fcSource, "", typSel) arcpy.CopyFeatures_management(lyrOut, fcOut)

Lister les classes d’entités d’une géodatabase

Ce script permet d’afficher dans un premier temps la liste de tous les éléments d’une

géodatabase (classe d’entités, tables, etc.) et dans un deuxième temps la liste des seules

classes d’entités de type 'point' de cette même géodatabase.

_# -­‐-­‐ coding utf 8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 10 _Lister_des_classes_d_entités_201 6 .py

Date : 03 / 10 /201 6

Auteur : Alain Brucelle

Objet : Lister les classes d’entités d'une géodatabase avec ou sans filtre

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy, os rep = arcpy.GetParameterAsText( 0 ) repSplit = os.path.split(rep)[ 1 ] arcpy.env.workspace = rep # -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ arcpy.AddMessage(u"\nClasses d’entités de '{0}' :".format(repSplit)) for fc in arcpy.ListFeatureClasses(): arcpy.AddMessage(fc) # -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ arcpy.AddMessage(u"\nClasses d’entités de type 'Point' de '{0}' :".format(repSplit)) for fc in arcpy.ListFeatureClasses("", "Point"): arcpy.AddMessage(fc) arcpy.AddMessage("\n")

Lister les champs d’une classe d’entités

Ce script permet d’afficher dans un premier temps la liste de tous les champs d’une classe

d’entités et dans un deuxième temps la liste des seuls champs de type 'String' de cette même

classe d’entités.

_# -­‐-­‐ coding utf 8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 11 _Lister_des_champs_201 6 .py

Date : 03/10/

Auteur : Alain Brucelle

Objet : Lister les champs d'une classe d'entités avec ou sans filtre

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy, os fcIn = arcpy.GetParameterAsText( 0 ) fcSplit = os.path.split(fcIn)[ 1 ] # -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ arcpy.AddMessage(u"\nChamps de la classe d’entités {0}".format(fcSplit)) for field in arcpy.ListFields(fcIn): arcpy.AddMessage(field.name) # -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ arcpy.AddMessage(u"\nChamps ('String') de la classe d’entités {0}".format(fcSplit) for field in arcpy.ListFields(fcIn, "", "String"): arcpy.AddMessage(field.name) arcpy.AddMessage("\n")

Écrire du contenu dans un fichier texte

Ce script permet de créer un fichier texte (.txt) et d’y écrire plusieurs lignes de texte.

_# -­‐-­‐ coding utf8 -­‐-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐

Script : 1 3 _Écrire_fichier_texte_201 6 .py

Date : 04/10/

Auteur : Alain Brucelle

Objet : Écrire du contenu (des éléments d’une liste) dans un fichier texte

#-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐_ import arcpy, os, codecs ficTxt = arcpy.GetParameterAsText( 0 ) listVille = [u"Villes\t\tDépt\r\n\r\n", u"Paris\t\t75\r\n", u"Marseille\t13\r\n", u"Lyon\t\t69\r\n"] ficTxtW = codecs.open(ficTxt, "w", "utf8") # -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ ficSplit = os.path.split(ficTxt)[ 1 ] arcpy.AddMessage(u"\nÉcriture dans le fichier texte '{0}' :\n".format(ficSplit)) for ligne in listVille: arcpy.AddMessage(u"\nÉcriture de la chaine : '{0}'".format(ligne)) ficTxtW.writelines(ligne) ficTxtW.close()

Décrire tout type d’objets

La fonction 'Describe' (arcpy.Describe()) retourne un objet contenant la description d’une

donnée et de ses multiples propriétés telles que le type de donnée, les champs, les indexes,

etc. Ces propriétés sont dynamiques : elles peuvent varier selon le type de données à décrire.

Ainsi, différentes propriétés peuvent être disponibles selon le cas.

Les propriétés de la fonction 'Describe' sont organisées en une série de groupes de propriétés.

N'importe quel jeu de données peut récupérer les propriétés d'au moins un de ces groupes. Par

exemple, si l’on utilise la fonction 'Describe' pour décrire une classe d’entités de géodatabase,

on peut accéder à certaines de ses propriétés à partir des groupes de propriétés ' GDB

FeatureClass ', ' FeatureClass ', ' Table ' et ' Dataset '.

Toutes données, indépendamment de leur type, récupèrent systématiquement les propriétés

génériques à partir du groupe de propriétés ' Describe Object '.

Note : Dans certains cas, l'objet retourné par la fonction 'Describe' n’aura pas toutes ses

propriétés disponibles. Par exemple, la description d’une couche dans la table des matières

d’ArcMap ne donnera pas l’ensemble des propriétés de cette couche. Celles-ci ne seront

disponibles qu’à partir d’un fichier de couche (' .lyr ').

Si l’on essaie d'accéder à une propriété que l’objet 'Describe' n'a pas, il retournera une erreur

ou une valeur vide (' None ', ' 0 ' ou ' - 1 ', ou une chaine vide). Si l’on n’est pas certains de

l’existence d'une propriété, on peut utiliser la fonction de vérification de Python ' hasattr() '.

La fonction 'Describe' est décrite dans l’aide 'ArcGis 10. 3. 1 ' au chapitre :

Géotraitement => ArcPy => Fonctions arcPy => Describing data

Les pages suivantes montrent 3 exemples de scripts exploitant la fonction 'arcpy.Describe'

pour 3 types de données différentes.

Pour bien s'approprier cette fonction et exploiter ses diverses propriétés, il ne faut pas hésiter

à la tester à partir de plusieurs autres types de données (dossiers, fichiers, classes d'entités,

projections, couches, etc…).