Des exemples basés sur l'industrie de l'utilisation d'ArcPy en Python pour le géotraitement?

12

Certains étudiants m'ont demandé récemment quels types d'opérations les analystes / développeurs SIG essayent généralement d'automatiser en utilisant Python avec le géotraitement dans ArcGIS et le package de site ArcPy. Je suppose qu'il pourrait être utile de savoir lors de la recherche de certains exercices à faire pour être sûr que ce que vous créez est pertinent pour l'industrie et pourrait être réutilisé plus tard déjà sur le lieu de travail.

La réponse la plus simple serait de "lire l'aide d'Esri et de parcourir les exemples", mais je cherchais des scénarios plus spécifiques à mettre en œuvre. Ainsi, le partage de flux de travail comme «nous obtenons un fichier .zip avec des fichiers de formes, nous utilisons Python pour le décompresser, les projetons tous dans le système de coordonnées X, les charge dans une géodatabase ArcSDE, accorde aux utilisateurs l'accès à ces données» est le bienvenu. N'hésitez pas à fournir une description concise du flux de travail, aucun détail extrême n'est requis.

Alex Tereshenkov
la source

Réponses:

10

Pour moi, comme votre question le suggère, j'utilise beaucoup Python pour automatiser le traitement par lots en particulier mais aussi pour créer des calculs spécialisés répétables. Ces jours-ci, je n'utilise pas ArcPy parce que je ne peux pas me permettre les licences ESRI en tant que consultant SIG indépendant. J'utilise beaucoup GDAL / OGR, Shapely, PostGIS, Numpy et SciPy, bien que tout dans ma liste puisse être fait avec ArcPy (et une partie l'était). Les exemples comprennent:

  1. Dériver des statistiques zonales pour l'ensemble du Royaume-Uni qui nécessite d'abord de mosaïquer des tuiles raster de 20 km de deux types de données différents, d'effectuer des "cartes" sur ces rasters, de fusionner la zone équivalente de tuiles polygonales vectorielles de 10 km, de calculer les statistiques zonales du résultat du la cartographie raster et la jonction du tableau de statistiques aux données vectorielles d'origine avant de les exporter vers des fichiers de formes dans une structure de répertoires logiques et de les graver sur CD pour le client.
  2. Effectuer des calculs de visibilité séquentiels tous les 100 m le long d'une route ou d'une piste, puis attribuer les résultats du calcul en tant que valeurs M dans les données d'itinéraire.
  3. Processus automatisé de création de modèles de paysage 3D en mosaïquant / fusionnant des tuiles de données raster et vectorielles, découpant à la zone requise puis convertissant en un format 3D propriétaire (non SIG). J'utilise beaucoup la petite bibliothèque Python que j'ai développée pour cela dans mon travail indépendant.
  4. Un énorme projet sur lequel j'ai travaillé dans une équipe a utilisé ArcPy pour créer des processus par lots pour convertir ou dériver de nouvelles données à partir de données SIG dans un format avec des fonctionnalités qui pourraient être utilisées par un générateur de ressources de jeu informatique procédural. Les scripts de géotraitement ont été appelés par un «pilote-esclave» de traitement par lots également écrit en Python et fonctionnant via Django.
  5. Python est très utile même pour de petites tâches, en particulier en cas de répétition (par exemple, traitement par fonctionnalité). Model Builder d'ArcGIS est beaucoup amélioré avec les contrôles de flux fournis dans la version 10, mais même ainsi, il est souvent impossible de fournir le contrôle nécessaire et / ou il est plus rapide et plus simple d'écrire le processus dans ArcPy que d'essayer de contraindre Model Builder.
  6. J'ai créé un outil en Python pour effectuer une analyse des chemins balayés (pour calculer si un très long véhicule peut suivre un itinéraire donné et où la remorque sera susceptible de se coincer dans les virages serrés entre les bâtiments. Ceci est un autre spécialiste à parcourir en freelance arsenal.
  7. Générer une sortie depuis Mapnik
  8. Avant qu'ArcGIS ne devienne multithread, j'ai utilisé Python pour me permettre de générer des sous-processus qui pouvaient parfois accélérer des calculs longs et lents sans que la surcharge d'ArcMap n'encombre la mémoire.

Python dans le géotraitement commercial est excellent parce que vous avez toute la vitesse et la brièveté des scripts fournis par Python et la vitesse de traitement du code de style C compilé car, alors que Python est interprété, il appelle principalement du code de style C compilé sous le capot. Python fournit la colle qui peut contenir de nombreuses tâches de géotraitement séquentielles et la liste ci-dessus n'est qu'un petit aperçu de certaines des raisons pour lesquelles je l'utilise personnellement. Dans le `` Good Old Days '', nous configurions un fichier de surveillance et demandions à ArcInfo d'enregistrer notre entrée de ligne de commande, puis de nettoyer l'AML (qui se souvient du langage de macro Arc!) Pour créer un processus réutilisable d'appels de géotraitement collés avec l'AML. Ce n'est pas si différent de nos jours, sauf que nous utilisons Python ou C # comme colle.

2 tours
la source
1
Assez drôle, je viens de répondre à cette question ( gis.stackexchange.com/questions/52478/… ) - qui donne un autre exemple d'utilisation de Python comme méthode pour vaincre les fuites de mémoire ArcGIS!
MappaGnosis
+1, j'aimerais particulièrement voir un sujet de blog GIS.SE sur # 4.
blah238
1
Bien que la société soit maintenant disparue et que je sois partie il y a quelque temps, une autre société a acheté l'IP, donc je ne sais pas à quel point je pourrais être explicite. Quoi qu'il en soit, vous pouvez obtenir des indices sur le côté multitraitement de ma réponse dans le lien dans mon commentaire ci-dessus. Je pense que je peux également ajouter que notre ferme de géotraitement avait une machine à 16 cœurs, deux serveurs à 8 cœurs et environ une douzaine de PC à double cœur «retirés», tous gérés par le pilote esclave. ESRI a même envoyé des gars pour venir voir ce que nous avions fait parce que nous n'utilisions pas ArcServer pour cela. Nous avons fait fonctionner les machines si fort que deux ont même pris feu!
MappaGnosis
7

Par où commencer ... Je suis un grand partisan de Python dans l'entreprise, même si je travaille maintenant dans un gouvernement supérieur. Voici quelques exemples de tâches pour lesquelles j'ai utilisé Python:

  1. Déplacement des données. Des tâches assez simples comme déplacer régulièrement des données peuvent être automatisées très facilement avec Python, en particulier avec le shutilmodule prêt à l'emploi.
  2. Exportation de classes de fonctions hors d'une base de données ArcSDE et dans des fichiers de formes pour la consommation par d'autres logiciels. ArcSDE (ou une autre base de données relationnelle) est souvent l'enregistrement principal d'une organisation, mais tous les progiciels ne peuvent pas être connectés à une base de données. De nombreux packages consomment toujours de bons fichiers de formes et, en utilisant arcpy, il est facile de les exporter tous les soirs afin que vos utilisateurs puissent avoir des données à jour.
  3. Création d'ensembles de données spatiales à partir d'ensembles de données disparates. Tout le monde dans l'entreprise utilise (et abuse souvent) d'Excel pour conserver ses données. Avec arcpy(ou d'autres méthodes Pythonic), il est facile de prendre ces données tabulaires qui ont un composant spatial et de créer rapidement un ensemble de données spatiales à partir de celui-ci. Il en va de même pour les fichiers texte. J'ai récemment créé un outil ArcToolbox pour un client qui lit les fichiers texte dans un format propriétaire XYZ et crée des polylignes compatibles ZM (ne peut pas vraiment partager beaucoup plus que celui-là).
  4. Traduire les données SIG afin qu'elles puissent être introduites dans un logiciel qui n'a aucune idée de ce qu'est "spatial". J'écris actuellement des outils qui prennent des jeux de données SIG (rasters, vecteurs) et poussent les données dans un programme de modélisation 3D via son API Python. Ce package 3D ne peut pas du tout fonctionner avec les formats de données spatiales, mais il peut fonctionner avec les valeurs de texte et les attributs derrière les données spatiales. Pour cela, j'utilise arcpyextraire les informations de la géodatabase et les pousser vers des fichiers texte ou vers un fichier de configuration XML.
  5. Récupération des données. Vous avez un site Web avec les tableaux de données dont vous avez besoin? Utilisez beautifulsouppour l'extraire. Vous avez un site FTP avec des centaines ou des milliers de fichiers à récupérer? Utilisez urllib2ou ftplibpour les télécharger facilement.

Ce ne sont que quelques exemples. Ce qui est génial avec Python dans l'entreprise, c'est que même sans les droits d'administrateur complets sur votre machine, ce qui est souvent le cas, vous pouvez toujours accomplir beaucoup. Combinez cela avec la courbe d'apprentissage douce et la lisibilité de Python, et vous avez un excellent outil d'automatisation pour le GIS Tech / Analyst qui n'a pas beaucoup d'expérience en programmation.

Chad Cooper
la source
6

Je travaille pour une municipalité et le gang SIG apporte son soutien à nos différents services (Génie, Inspections des bâtiments, Règlement, Parcs, Incendie, etc.).

  1. Mise à jour des informations de colis et d'adresse civique. Nous avons des scripts assez longs qui manipulent à la fois les données spatiales et les données d'attribut, ce qui implique l'utilisation de divers outils de géotraitement pour effectuer des tâches spatiales ainsi que pour se connecter à des bases de données relationnelles pour récupérer des informations qui sont ensuite jointes à nos données spatiales.
  2. Outils personnalisés. Nous avons créé des outils personnalisés à l'aide du nouvel assistant de complément Python pour certains membres de notre personnel non SIG. Certains de nos employés doivent lire des données spatiales et effectuer des manipulations de base. Nous avons conçu des barres d'outils qui leur permettent de faire tout ce qu'elles doivent faire sans entrer dans les tripes de l'environnement ArcGIS.

Comme d'autres l'ont dit, ce ne sont que quelques exemples.

dchaboya
la source