Suite

Utiliser des itérateurs dans ArcGIS ModelBuilder ?

Utiliser des itérateurs dans ArcGIS ModelBuilder ?


J'ai un problème avec un modèle de processus que je construis.

Le processus est le suivant;

Une série de fichiers img flottants sont itérés et convertis en fichiers raster .img

Ces fichiers sont ensuite exécutés dans la calculatrice raster et enregistrés en tant que fichier %Name%_100.img

Le 100Les fichiers .img sont ensuite exécutés via un outil mathématique Int et enregistrés avec le suffixe _Int_100.img

ok donc voici le peu sur lequel le modèle tombe - je dois découper ces fichiers Int_100.img en utilisant leurs fichiers de formes respectifs, c'est-à-dire que riverbody1A_Int_100.img doit être découpé avec le fichier riverbody1A.shp correspondant (également l'utilisation des fonctionnalités d'entrée pour le paramètre de découpage a besoin à utiliser) et la même chose pour chaque fichier parcouru tout au long du processus.

Ces fichiers découpés sont ensuite convertis de raster en polygone

Est-ce quelque chose qui peut être fait avec des itérateurs et un constructeur de modèles ?

Suis-je sur la bonne voie ou dois-je recommencer ?

Le principal problème que je semble avoir est que les modèles imbriqués avec des itérateurs semblent simplement itérer leurs fichiers en même temps, au lieu d'itérer un fichier par exécution du modèle entier

Est-ce un bug ou est-ce que je n'utilise tout simplement pas les itérateurs et les modèles imbriqués de la bonne façon ?


Génération d'une grille d'échantillonnage régulière dans ArcGIS – un outil ArcToolbox

J'ai pris un workflow que j'ai développé il y a quelques années et je l'ai converti en un outil ArcToolbox (et un modèle ModelBuilder). Cet outil devrait fonctionner pour n'importe quel niveau de licence d'ArcGIS (Basic, Standard, Advanced). J'ai développé l'outil à l'aide d'ArcGIS 10.2.2, mais j'ai enregistré des versions pour ArcGIS 9.3, 10.0 et 10.1 et versions ultérieures.

L'outil contient une documentation (aide) intégrée, ainsi qu'un texte de métadonnées (description de l'élément). Assurez-vous de régler votre Actuel et Rayure Paramètres d'environnement de l'espace de travail sous Géotraitement > Environnements… avant d'essayer d'utiliser l'outil.

Voici des liens pour télécharger différentes versions de l'outil Ceux-ci sont partagés à partir de Google Drive, alors recherchez le lien de téléchargement en haut de la fenêtre de votre navigateur après avoir cliqué sur l'un des liens ci-dessous.

Les retours (critiques positifs ou constructifs) sur cet outil seront appréciés.


Contexte

Physarum polycéphale Schwein. est un membre de l'ordre des Physarales de la classe des Myxomycètes, un groupe d'organismes eucaryotes ressemblant à des champignons, communément appelés moisissures visqueuses. Comme tous les autres membres de ce groupe, le cycle de vie de P. polycephalum se caractérise par un stade trophique (alimentation) multinucléé distinctif appelé plasmodium. Le plasmodium de P. polycephalum se produit sur le matériel végétal en décomposition et les organes de fructification des champignons en décomposition du bois dans la nature et a une couleur jaune vif [1]. La vitesse de croissance rapide, l'absence de parois cellulaires et la facilité avec laquelle le plasmodium de P. polycephalum peut être cultivé l'ont amené à être largement utilisé en biologie cellulaire et en recherche comportementale.

Recherche qui implique une détermination de la croissance de P. polycephalum la croissance sur milieu solide est généralement réalisée en mesurant l'étendue de l'expansion plasmodiale à partir du point d'inoculation à l'aide d'une règle [2-6]. Bien qu'il s'agisse d'une méthode pratique qui nécessite très peu d'efforts, la croissance plasmodiale est souvent de forme irrégulière, ce qui rend toute détermination de la taille réelle plutôt difficile. Moins fréquemment, le plasmodium dans une culture particulière est collecté et séché pour la détermination de la croissance plasmodiale en pesant la matière sèche sur une petite balance. La valeur ainsi obtenue est rapportée au poids de cellules sèches (DCW) de la culture. Cette méthode est plus précise qu'une mesure effectuée à la règle, mais les cultures doivent être interrompues afin de collecter la biomasse totale du plasmodium [7].

En règle générale, les logiciels de système d'information géographique (SIG) ont été utilisés dans des applications scientifiques, d'ingénierie et commerciales à des échelles spatiales liées à des méthodes courantes d'observation de localisation (par exemple, les systèmes de positionnement global ainsi que l'imagerie aéroportée et par satellite). Cependant, l'extension du SIG à des échelles plus fines a produit des innovations telles que l'analyse topographique 3D des dents de primate (par exemple, Zuccotti et al. [8]). Dans une application microbiologique rare, Yang et al. [9] ont utilisé le SIG pour mesurer la croissance fongique. Les cultures mycéliennes des champignons cultivés ont été photographiées et la croissance fongique a été déterminée sur la base de la proportion du nombre de pixels du mycélium divisé par la somme du nombre de pixels du mycélium et du substrat. Notre approche comparable, également basée sur le nombre de pixels, représente une nouvelle application du SIG pour étudier la croissance d'un plasmodium. Les estimations aériennes relativement précises (c'est-à-dire comparées à l'utilisation d'une règle) sont facilitées par (a) la capture par appareil photo numérique d'images 2D à résolution spatiale fine de plasmodes et (b) l'extraction basée sur le SIG des étendues surfaciques de motifs visuellement uniques dans l'imagerie.

Basé à l'origine sur les travaux de Ball et Hall [10], le clustering ISODATA est couramment disponible dans les logiciels SIG et utilisé pour permettre la classification (ou l'étiquetage catégorique des pixels) des images acquises à partir de diverses caméras et d'autres types de capteurs. ISODATA est bien adapté pour regrouper (ou grouper) des pixels de différentes couleurs trouvés dans une image typique capturée par un appareil photo numérique d'une boîte de Pétri. Par exemple, les différentes intensités de la couleur jaune du plasmodium, le substrat brut clair, les parois en plastique de la boîte et les matériaux de fond sont chacun candidats pour un cluster, en fonction du paramétrage d'ISODATA. La proportion de pixels de plasmodium jaune, par rapport au nombre total de pixels dans la boîte de Pétri, peut être multipliée par la surface de la boîte de Pétri pour obtenir une surface systématique du plasmodium au moment de l'acquisition de la photo. De plus, cette approche est particulièrement utile pour tout projet ayant pour objectif de suivre la croissance d'un plasmodium particulier au fil du temps ou de comparer la croissance des plasmodes entre différentes cultures.

Les objectifs du projet rapportés ici étaient d'abord d'évaluer la faisabilité de l'utilisation d'un logiciel SIG comme nouvelle approche pour mesurer la croissance des plasmodes, puis de déterminer la corrélation (le cas échéant) entre les zones de pixels des plasmodes et leurs incréments de poids de cellules sèches (DCW). .


Le modèle ne se terminera pas

Le générateur de modèles est très intéressant pour moi car il est essentiellement censé être une représentation sous forme d'organigramme d'un programme informatique composé d'arcpy qui permet aux non-programmeurs d'écrire des programmes SIG. Pourtant, j'ai l'impression qu'une boucle for semble beaucoup moins déroutante que les itérateurs dans le constructeur de modèles de toute façon

Je suis d'accord, chaque fois que je commence à faire apparaître des itérateurs dans des modèles, je finis généralement par passer à python. Je trouve que le comportement des constructeurs de modèles commence à devenir erratique.

Essayer de comprendre comment utiliser les itérateurs est ce qui m'a poussé à apprendre arcpy.

Je suis assez à l'aise avec Python et arcpy, mais honnêtement, les itérateurs de Model Builder m'intimident en quelque sorte.

Je suis d'accord avec tout le monde ci-dessus, exportez simplement le modèle dans un script et écrivez votre itérateur en python.

Le modèle commence correctement à créer un dossier, puis à créer 6 géodatabases. La prochaine fonction que j'aimerais qu'il fasse est de préformer un clip itératif (entouré de noir) sur plusieurs classes d'entités. Je souhaite que ces entités découpées soient placées dans la géodatabase "1_ExportedFromS".

J'ai une ligne de précondition de la géodatabase "1_ExportedFromS" pour Itérer les classes d'entités. Est-ce correct? il me manque autre chose ?

De l'aide serait grandement appréciée!!

Essayez de placer votre itérateur dans un modèle distinct, puis de déposer tout ce modèle dans votre modèle existant.

quel format sont vos fichiers d'entrée (OLMBMaster_BAC et TrackingPolygon) ? s'ils entrent sous forme de fichiers de formes, et non de classes d'entités, c'est peut-être ce qui génère une erreur.

Où est-ce qu'il fait erreur ou échoue? J'imagine que cela ressemble à son découpage, mais vous ne voyez pas les sorties dans votre géodatabase, ou il n'a qu'un seul fichier de sortie au lieu de tous.

Sur la base de l'image et de votre description, vous pouvez confondre une condition préalable ? Une condition préalable ne connecte pas les pièces sauf en passant une valeur vraie ou fausse pour continuer le modèle.

Je ne vois pas comment votre géodatabase 1_FromExported_S est connectée à l'itérateur ou à son clip de sortie. Normalement, s'il est connecté, il aura une ligne de flèche pleine montrant la connexion. Les objets peuvent avoir des connexions et des conditions préalables en même temps. Dans l'état actuel des choses, il semble que votre modèle voit que la nouvelle géodatabase en cours de création dit qu'elle est bonne, puis itère vos fichiers sans connexion visible, car la condition préalable ne se soucie que de la réussite de l'étape précédente, mais n'a pas besoin d'être connecté. Si vous n'avez pas défini de dossier/base de données de sortie pour vos fichiers de clips, il se peut qu'ils soient enregistrés dans un espace de travail temporaire/par défaut ou dans la mémoire. Quoi qu'il en soit, il les créera au mauvais endroit s'il semble que cela ressemble à de l'écrêtage. Vous l'appelez peut-être via des variables dans le modèle, mais cela n'a pas été mentionné ou affiché.

Alors, comment le modèle sait-il qu'il faut placer votre sortie de découpage dans la nouvelle géodatabase ?

Est-ce que c'est dur tapé dans votre ligne de fichier de sortie de la fonction de clip ? Étant donné que la fonction de découpage n'a pas d'entrées séparées telles que 'Output Workspace' et 'Output File', vous ne pouvez pas simplement connecter la géodatabase... elle attend un nom de fichier avec un chemin complet. Vous devriez pouvoir utiliser des variables dans le modèle pour saisir dynamiquement l'emplacement et le nom de la base de données et ajouter le fichier créé à partir de l'itérateur à la fin en utilisant une autre variable dans le modèle pour le fichier de sortie.. regardez dans 'Model Builder Only Tools >> Parse Path' récupérera les informations de fichier uniques à chaque itération. Si vous avez tapé dur votre nom de sortie, l'itérateur écrasera probablement tous les fichiers portant le même nom lorsqu'il les rencontrera, à moins que vous n'en fassiez une variable et dynamique.

J'espère avoir compris le problème et aidé, n'hésitez pas à faire un suivi, bonne chance !


Stage BGIS - Devon Energy

Professionnel de l'analyse d'affaires – SIG – Solutions géospatiales

· Contrat de 6 mois pour stage.

o Scripts Python étendus pour automatiser les flux de travail nouveaux et préexistants.

o Création de cartes numériques, y compris l'exportation vers ArcReader pour l'analyse des cessions d'autres départements.

o Utilisation de Python pour corriger les chemins des ensembles de données en mosaïque raster interrompus lors de la restructuration du réseau.

o Recréer et documenter le workflow pour tronquer, importer et mettre à jour les données dans SDE à partir d'un hôte de données externe.

o À l'aide de FME, recréez et documentez le flux de travail pour extraire les fichiers Shape d'un fichier d'archive fourni par un fournisseur, écrivez dans le SDE de test, vérifiez, puis écrivez dans le SDE de production.

o Utilisez FME pour parcourir plus de 300 dossiers et plus de 500 Go de données, identifier les fichiers et les emplacements Garmin GDB dans un fichier de limite de cession provenant du SDE, découper des zones et écrire dans de nouveaux GDB.

o Utiliser FME pour identifier des photographies aériennes des zones de cession avec des noms de fichiers désignés à partir du système d'arpentage des terres du Dominion, filtrer et identifier si les fichiers resteraient avec Devon ou déplacés avec les fichiers de cession, et déplacer toutes les données pour la procédure de cession.

o Utilisation de Global Energy Mapper pour créer des images mosaïquées de la terre nue et de la fonction de remplissage LiDAR.


Résultats

Mes résultats sont que le belvédère 3 a la plus grande surface totale de champ de vision et que le point de vue 7 a la plus petite surface de champ de vision. Le point 3 a un champ de vision d'une superficie totale de 156 441 669 hectares et permet de voir l'extrême est de l'autre côté de la rivière Connecticut. Le point 7 a un bassin visuel d'une superficie totale de 2 969 089 hectares (Figures 12-13)



Figure 12 : Cabanon pour le belvédère 3, superficie totale 156 441 669 hectares Figure 13 : Cabanon pour le belvédère 7, superficie totale 2 969 089 hectares


Se familiariser avec ArcGIS : Modelbuilder

Se familiariser avec ArcGIS ModelBuilder enseigne aux lecteurs comment développer des workflows de géotraitement réutilisables et exécuter des programmes en tant que modèles. Rédigé pour les utilisateurs SIG intermédiaires et avancés, Apprendre à connaître ArcGIS ModelBuilder est le premier livre de référence et classeur exclusivement pour ModelBuilder, une technologie de programmation visuelle disponible dans le logiciel ArcGIS«. Se familiariser avec ArcGIS ModelBuilder présente des concepts de base et plus complexes et démontre les meilleures pratiques à travers des exercices pratiques.

Le livre, divisé en sept chapitres traitant des bases des modèles, des modèles interactifs, du flux de contrôle, de l'environnement de modélisation, des entrées multiples, des itérations de modèles, des scripts Python et de la documentation des modèles de construction, favorise une connaissance complète de ModelBuilder. Les lecteurs peuvent utiliser les concepts enseignés dans le livre pour adapter les outils, les scripts et les applications de ModelBuilder à leurs propres domaines d'expertise.

Comme les autres livres de la série Apprendre à connaître d'Esri Press, Apprendre à connaître ArcGIS ModelBuilder est conçu pour aider les étudiants en classe ainsi que les autodidactes.

Тзывы - аписать отзыв

Авторе (2011)

David W. Allen est le gestionnaire SIG de la ville d'Eless, au Texas. Il enseigne au Tarrant County College depuis 1999, où il a aidé à fonder l'un des premiers programmes d'études en SIG au Texas et à établir une norme d'État pour les programmes d'études en SIG. Il est l'auteur de Tutoriel SIG 2 : classeur d'analyse spatiale (Esri Press, 2010) et co-auteur de Tutoriel SIG 3 : classeur avancé (Esri Press, 2010).


Méthodologie

La première partie de ce projet consistait à générer des couches cartographiques qui déterminent la distance euclidienne autour des emplacements des propriétaires de chats, des parcs urbains et des habitants de la ville qui aiment les écureuils. La deuxième étape consistait à reclasser chacune de ces couches, afin qu'elles puissent être comparées avec précision. Les couches ont été reclassées en 10 intervalles égaux, avec les distances euclidiennes pour les parcs de la ville et les amoureux des écureuils par ordre décroissant (par exemple, il est préférable d'être plus proche de ces emplacements), et les propriétaires de chats par ordre croissant (par exemple, il est préférable de être plus éloigné de ces emplacements). Une fois l'étape de reclassification terminée, l'outil Superposition pondérée pourrait être appliqué pour générer une seule couche de carte pour illustrer les emplacements de chemin les plus préférables dans l'ensemble, compte tenu des couches utilisées. L'emplacement des propriétaires de chats a été fixé à 50 % de poids, tandis que les autres couches ont été fixées à 25 % de poids chacune (étant donné que l'évitement des chats est une menace plus importante que de ne pas trouver un refuge pendant le voyage). Une fois que cet outil de superposition pondérée a été appliqué, l'étape d'itérateur pourrait être appliquée pour déterminer le meilleur chemin de chaque colonie d'écureuils au lieu d'accouplement. Les figures 3, 4 et 5 fournissent des exemples des résultats des outils Distance euclidienne, Reclassification et Superposition pondérée (respectivement).

Figure 4 : Distance euclidienne reclassée des propriétaires de chats, où le brun a une valeur faible de 1 et le violet a la valeur la plus élevée de 10.

Diverses méthodes ont été tentées tout au long de ce projet pour parcourir avec succès les sept points de données de la colonie d'écureuils. Initialement, la fonction d'itérateur de sélection de fonction du générateur de mode a été appliquée au fichier de formes de points de colonie d'écureuils, mais sans succès. Pour une raison encore indéterminée, le modèle n'a pas parcouru les sept points lors de l'application des outils Distance de coût et Chemin de coût, et a simplement créé sept des mêmes chemins qui mènent tous au premier point de données. À défaut d'utiliser la fonction d'itération, le Model Builder a été exporté vers un script Python, où l'on espérait qu'une fonction en Python pourrait effectuer l'itération à la place. Un curseur de recherche a été utilisé pour effectuer cette itération (un peu) avec succès, qui parcourt chaque élément d'une classe d'entités. Initialement, une instruction « while » était utilisée, mais elle a ensuite été remplacée par une instruction « for », qui semblait faire les deux la même chose, mais la syntaxe était plus facile à lire et à suivre. Ces étapes ont abouti à sept fichiers raster, illustrant les chemins de chaque colonie d'écureuils jusqu'au lieu d'accouplement. L'outil Raster vers Polyine a été appliqué dans la boucle pour créer des classes d'entités polylignes afin de mettre en évidence les chemins de chaque colonie à l'emplacement final.

Un autre problème a été rencontré dans la boucle, où le curseur de recherche a parcouru avec succès les points de la colonie d'écureuils pour générer les noms de variables appropriés (et a pu identifier et imprimer correctement chaque numéro d'identification), mais le même problème s'est produit que celui avec le modèle Itérateur de générateur (c'est-à-dire créé uniquement des distances de coût et des chemins de coût pour le premier point de données). Pour contourner ce problème, l'outil d'analyse de sélection a été utilisé pour générer sept classes d'entités, chacune avec un point de la classe d'entités de la colonie d'écureuils d'origine. Les numéros d'identification de chaque point ont été spécifiés et saisis manuellement dans le script (car le problème d'itération ne semblait pas non plus être résolu dans cet outil). Une fois ces sept classes d'entités à un point créées, les outils Distance de coût, Chemin de coût et Raster vers polyligne leur ont été appliqués, et sept chemins différents ont été créés pour chaque colonie d'écureuils. Cette méthode, bien qu'efficace pour une classe d'entités avec seulement sept points de données, serait peu pratique pour une entité avec, par exemple, 1000 points de données. Il serait souhaitable de déterminer pourquoi les problèmes se sont produits avec le curseur de recherche et les itérations ayant échoué, en particulier pour les ensembles de données plus volumineux.

A l'origine, il était prévu de déterminer la longueur de chaque chemin entre chaque colonie d'écureuils et le lieu de reproduction. Cependant, les chemins résultant de cette analyse étaient composés de nombreuses polylignes, en particulier à proximité immédiate du lieu de reproduction, ainsi une seule longueur de chemin pouvait pas être facilement extraits sans un degré élevé de manipulation des données. Ainsi, au lieu de cela, la distance euclidienne entre chaque colonie d'écureuils et le terrain d'accouplement a été déterminée à l'aide de l'outil Générer une table proche dans la boucle for ci-dessus, les sept fichiers ont été fusionnés en dehors de la boucle, puis exportés en tant que fichier csv dans une autre boucle.

Le modèle original de Model Builder exporté vers un script Python a généré une table de proximité et une distance de coût, un chemin de coût et une couche de polyligne uniquement pour la première colonie d'écureuils, qui a ensuite été étendue dans le script Python. L'outil de fusion a été appliqué à toutes les colonies d'écureuils et exporté vers le script Python, et s'est exécuté tel quel. La génération de table proche a été appliquée uniquement à la première colonie du modèle, puis étendue dans le script Python pour inclure les autres colonies. Pour exécuter l'analyse de sélection, le format du script arcpy a été trouvé en ligne à partir des pages d'aide d'ArcGIS et le script a été écrit à partir de zéro. Une fois le script Python d'origine exporté, les boucles et les variables supplémentaires ont été écrites, ainsi que le code pour créer un fichier csv. Le modèle Model Builder utilisé pour créer le script Python initial est illustré à la figure 6.


Votre Réponse


StackExchange.ready(function() <
var optionscanal = <
balises : "".split(" "),
identifiant : "79"
>
initTagRenderer("".split(" "), "".split(" "), channelOptions)

StackExchange.using("externalEditor", function() <
// Obligé de déclencher l'éditeur après les extraits, si les extraits sont activés
if (StackExchange.settings.snippets.snippetsEnabled) <
StackExchange.using("extraits", function() <
createEditor()
>)
>
sinon <
createEditor()
>
>)

fonction createEditor() <
StackExchange.prepareEditor( <
heartbeatType : "réponse",
autoActivateHeartbeat : faux,
convertImagesToLinks : faux,
noModals : vrai,
showLowRepImageUploadWarning : vrai,
réputationToPostImages : null,
bindNavPrevention : vrai,
suffixe : "",
ImageUploader : <
brandingHtml : "Propulsé par u003ca href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml : "Contributions des utilisateurs sous licence u003ca href="https://creativecommons.org/licenses/by-sa/3.0/" u003ecc by-sa 3.0 avec attribution requiseu003c/au003e u003ca href="https://stackoverflow.com/ legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls : vrai
>,
à la demande : vrai,
removeSelector : ".discard-answer"
,immédiatementShowMarkdownHelp:true
>)

Merci d'avoir répondu à l'échange de pile des systèmes d'information géographique !


  • Demander de l'aide, des éclaircissements ou répondre à d'autres réponses.
  • Faire des déclarations basées sur des opinions les étayer avec des références ou une expérience personnelle.

Pour en savoir plus, consultez nos conseils pour rédiger de bonnes réponses.

Certaines de vos réponses passées n'ont pas été bien reçues et vous risquez d'être bloqué.


Itérer une chaîne à plusieurs valeurs

J'ai un problème étrange avec Iterate Multivalue dans Model Builder. Le modèle est partiellement basé sur l'exemple Génération d'une liste de choix à valeurs multiples.

Ce que j'essaie de faire, c'est d'afficher la liste des calques filtrés où l'utilisateur pourra en sélectionner certains. Pour cela, j'utilise Script Tool avec 1 paramètre de chaîne multivaleur d'entrée et 1 paramètre multivaleur dérivé n'importe quelle valeur.
Ensuite, les noms de couches sélectionnés (variable à valeurs multiples) sont utilisés dans Itérer plusieurs valeurs, où chaque valeur itérée est utilisée dans Calculer la valeur. Les calques sont filtrés dans ToolValidator.

Maintenant, le problème est qu'Iterate Multivalue n'itère pas les valeurs. Au lieu de cela, il exécute une seule boucle et transmet une valeur qui est une chaîne avec tous les noms de calques sélectionnés séparés par un point-virgule.

Code UpdateParameters de ToolValidator

Sous-modèle qui utilise plusieurs valeurs transmises depuis le modèle principal avec l'outil de script.

Voici la sortie de l'outil

Quelqu'un a-t-il une explication à ce comportement étrange ? Qu'est-ce que je fais mal?