Suite

Affichage de la table attributaire des entités sélectionnées à l'aide d'ArcPy ?


Existe-t-il un moyen d'afficher la table attributaire des entités sélectionnées à l'aide d'arcpy ? Peut-être dans le module de cartographie ?

J'aimerais pouvoir sélectionner certaines entités, puis disposer d'un bouton de complément qui affiche la table attributaire uniquement pour les entités sélectionnées.

Je comprends que cela semble rudimentaire pour les gens du SIG, mais j'essaie de répondre aux besoins d'une demande de travail spécifique.

Je suis capable de le faire maintenant en utilisant tkinter et en n'affichant que les attributs nécessaires, mais c'est un peu compliqué et n'est pas stable. Je sais, le problème de stabilité est un problème connu avec l'utilisation de tkinter en parallèle avec ArcGIS. Donc… j'espère pouvoir afficher la table attributaire d'une manière automatisée "petit bouton soigné avec le logo de l'entreprise".


Je ne sais pas comment faire cela en Python autre que d'utiliser ArcObjects directement via COM Interop - loin d'être l'approche la plus agréable. C'est beaucoup plus facile à faire dans .NET, mais pour plus de simplicité, vous voudrez le SDK et il n'est pas disponible au téléchargement - je pense qu'il est fourni avec le support d'installation d'ArcGIS Desktop Et certainement avec une licence EDN, bien sûr, mais j'espère qu'une licence Desktop de base l'inclura.

Pour ce faire dans .NET, vous devrez créer un complément avec un bouton. Dans le bouton, vous devrez obtenir les entités sélectionnées et les couches les contenant, puis créer une fenêtre de table, lui attribuer la couche et l'application, puis afficher la fenêtre. Il s'agit d'environ 60 lignes de code à écrire après avoir généré tout le reste à partir des modèles ESRI. Si vous n'avez pas le SDK, vous pouvez toujours le faire, mais je pense que le développement de compléments a besoin du SDK, vous devrez donc suivre la route de l'extension ArcObjects (étendre ICommand, etc.) sans aucun des modèles pour vous aider.

Si vous pouvez suivre la route du complément, le code suivant ouvrira la table attributaire de toutes les couches de la carte qui ont des sélections et les configurera toutes pour afficher uniquement leur sélection lors de l'appel de ShowTableWindowForAllSelected() :

IEnumerable privé GetFeatureClassesWithSelectedFeatures() { IEnumFeature selection = ArcMap.Document.ActiveView.FocusMap.FeatureSelection as IEnumFeature; selection.Reset(); Fonctionnalité iFonctionnalité ; Lister classes = nouvelle liste(); while((feature = selection.Next()) != null) { IFeatureClass fClass = feature.Class as IFeatureClass; if(fClass != null && !classes.Contains(fClass)) { classes.Add(fClass); } } renvoie les classes ; } IEnumerable privé GetFeatureLayersWithSelectedFeatures() { // obtenir un énumérateur uniquement pour les couches d'entités UID uid = new UIDClass(); uid.Value = typeof(IFeatureLayer).GUID.ToString("B"); IEnumLayer layerEnum = ArcMap.Document.ActiveView.FocusMap.get_Layers(uid: uid); //chargez-les dans un dictionnaire avec leur classe d'entités layerEnum.Reset(); Couche ILayer ; dictionnaire calques = nouveau dictionnaire(); while((layer = layerEnum.Next()) != null) { IFeatureLayer fLayer = (IFeatureLayer)layer; layer.Add(fLayer, fLayer.FeatureClass); } // obtenir des classes d'entités avec les entités sélectionnées et les joindre aux couches d'entités dans la carte IEnumerable fClasses = GetFeatureClassesWithSelectedFeatures(); IEnumerable couchesWithSelectedFeatures = couches.Join(fClasses, layerEntry => layerEntry.Value, fClass => fClass, (layerEntry, fClass) => layerEntry.Key).Distinct() return couchesWithSelectedFeatures; } private void ShowTableWindowForAllSelected() { ITableWindow2 attrWindow = null; //ITableWindow2 windowFinder = new TableWindowClass(); IEnumerable couches = GetFeatureLayersWithSelectedFeatures(); foreach(IFeatureLayer couche en couches) { //attrWindow = windowFinder.FindViaLayer(couche); if(foundWindow == null) { foundWindow = new TableWindowClass(); foundWindow.Layer = couche; foundWindow.Application = ArcMap.Application; foundWindow.TableSelectionAction = esriTableSelectionActions.esriSelectFeatures; foundWindow.ShowAliasNamesInColumnHeadings = true; } if(!foundWindow.IsVisible) foundWindow.Show(true); // cela semble devoir être fait après que la fenêtre soit visible ou qu'elle se comporte un peu étrangement foundWindow.ShowSelected = true; } }

Si vous souhaitez utiliser les fenêtres d'attributs existantes au lieu d'en ouvrir de nouvelles à chaque pression sur le bouton, décommentez les deux lignes à l'aide de 'windowFinder'.


Problèmes avec les outils de somme pondérée et de superposition pondérée

Je ne peux pas exécuter une somme pondérée ou une superposition car je reçois le message que je n'ai pas défini la taille de la cellule, mais je l'ai en fait définie. Voici le python pour l'ensemble de mon processus (copié à partir d'un modèle) - et vous pouvez voir que je l'ai défini. Quelqu'un d'autre a-t-il ce problème?

. # Processus : le crime appelle la densité du noyau

. arcpy.gp.KernelDensity_sa(PolytoPointCensus, "ZCrimeCalls", ZCrimeCalls, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. # Processus : Densité du noyau de pauvreté

. arcpy.gp.KernelDensity_sa(PolytoPointCensus__3_, "ZPovRate", ZPoverty_Rate, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. # Processus : Densité du noyau de logements sociaux

. arcpy.gp.KernelDensity_sa(PolytoPointCensus__2_, "ZPublicHousing", ZPublic_Housing, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. arcpy.env.mask = "Limite municipale de Little Rock"

. arcpy.gp.WeightedSum_sa("C:SpatialAnalysisClassProjectLR911Calls.gdbCrimeCalls VALUE 0.33C:SpatialAnalysisClassProjectLR911Calls.gdbPovertyRate VALUE 0.33C:SpatialAnalysisClassProjectLR911Calls.gdbPat. VALEUR 0.33", Weighte_ZCri1)

Erreur d'exécution Traceback (appel le plus récent en dernier) : Fichier "<string>", ligne 36, dans <module> Fichier "c:program files (x86)arcgisdesktop10.4arcpyarcpygeoprocessing\_base.py", ligne 506 , dans <lambda>, renvoie lambda *args : val(*gp_fixargs(args, True)) ExecuteError : ERROR 010050 : la taille de la cellule n'est pas définie. Échec de l'exécution (WeightedSum).

par DanPatterson_Re fatigué

Le modèle est un peu en panne, ce qui se produit lorsque vous exportez un modèle vers un script sans réorganiser les paramètres et les fonctions. Je pense que le problème réside vers le bas du script. Je commenterais ces lignes vers le bas

et déplacez-le vers le haut sous . importer arcpy . arcpy.env.cellSize = "50"

Je ne suis pas si doué en python. mais comme ça ? Si c'est le cas, il a toujours échoué Il échoue également lorsque j'exécute les outils autonomes. Et merci pour ta réponse !

. # Processus : le crime appelle la densité du noyau

. arcpy.gp.KernelDensity_sa(PolytoPointCensus, "ZCrimeCalls", ZCrimeCalls, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. # Processus : Densité du noyau de pauvreté

. arcpy.gp.KernelDensity_sa(PolytoPointCensus__3_, "ZPovRate", ZPoverty_Rate, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. # Processus : Densité du noyau de logements sociaux

. arcpy.gp.KernelDensity_sa(PolytoPointCensus__2_, "ZPublicHousing", ZPublic_Housing, "50", "5280", "SQUARE_MAP_UNITS", "DENSITÉS", "PLANAIRE")

. arcpy.env.mask = "Limite municipale de Little Rock"

. arcpy.gp.WeightedSum_sa("C:SpatialAnalysisClassProjectLR911Calls.gdbCrimeCalls VALUE 0.33C:SpatialAnalysisClassProjectLR911Calls.gdbPovertyRate VALUE 0.33C:SpatialAnalysisClassProjectLR911Calls.gdbPat. VALEUR 0.33", Weighte_ZCri1)

Erreur d'exécution Traceback (appel le plus récent en dernier) : fichier "<string>", ligne 35, dans <module> Fichier "c:program files (x86)arcgisdesktop10.4arcpyarcpygeoprocessing\_base.py", ligne 506 , dans <lambda>, renvoie lambda *args : val(*gp_fixargs(args, True)) ExecuteError : ERROR 010050 : la taille de la cellule n'est pas définie. Échec de l'exécution (WeightedSum).

par DanPatterson_Re fatigué

la densité du noyau a besoin de nombres, par exemple KernelDensity ( "rec_sites.shp" , "NONE" , 45 , 1200 , "SQUARE_KILOMETERS" )

Quelle version d'arcmap ? comparez votre syntaxe avec celle du fichier d'aide. Je commencerais par votre syntaxe arcpy trouvée dans les fichiers d'aide et sauterais la sortie du modèle.

J'ai utilisé la syntaxe du fichier d'aide et j'ai à peu près la même chose. Je me demande si quelqu'un d'autre rencontre des problèmes pour exécuter l'outil de somme pondérée. Peux-tu essayer? J'utilise 10.4

. WSumTableObj = WSTable([[inRaster1, "VALEUR", 0,33], [inRaster2, "VALUE", 0,33],


Voir la vidéo: la table attributaire. ArcGIS. arcgis الدرس 05 احتراف (Octobre 2021).