2010-10-25 13 views
4

J'essaye d'automatiser diverses tâches dans ArcGIS Desktop (en utilisant ArcMap en général) avec Python, et j'ai toujours besoin d'un moyen d'ajouter un fichier de forme à la carte actuelle. (Et puis faire des trucs, mais c'est une autre histoire).Comment ajouter un fichier de formes dans ArcGIS via un script python?

Le meilleur que je peux faire à ce jour est d'ajouter un fichier de couche à la carte actuelle, en utilisant les éléments suivants (« addLayer » est un objet de fichier de couche):

def AddLayerFromLayerFile(addLayer): 
import arcpy 
mxd = arcpy.mapping.MapDocument("CURRENT") 
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] 
arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE") 
arcpy.RefreshActiveView() 
arcpy.RefreshTOC() 
del mxd, df, addLayer 

Cependant, mes données brutes va toujours être des fichiers de forme, donc je dois être en mesure de les ouvrir. (Equitemently: convertir un fichier de forme en un fichier de calque sans l'ouvrir, mais je préférerais ne pas le faire).

+0

Ce code ressemble à travailler ... Pouvez-vous clarifier votre question? – garnertb

+0

Le code ajoute un fichier de couches. Je veux ajouter un fichier de forme. –

Répondre

4

La variable "theShape" est le chemin du fichier de forme à ajouter.

import arcpy 
import arcpy.mapping 
# get the map document 
mxd = arcpy.mapping.MapDocument("CURRENT") 

# get the data frame 
df = arcpy.mapping.ListDataFrames(mxd,"*")[0] 

# create a new layer 
newlayer = arcpy.mapping.Layer(theShape) 

# add the layer to the map at the bottom of the TOC in data frame 0 
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM") 

# Refresh things 
arcpy.RefreshActiveView() 
arcpy.RefreshTOC() 
del mxd, df, newlayer 
+3

Salut, j'ai essayé ceci mais continue à obtenir des exceptions de type : Object: CreateObject Layer source de données invalide "Il fonctionne avec les fichiers .lyr mais pas .shp ?? –

0

Récemment, je débattais avec une tâche similaire, et d'abord utilisé la méthode d'identification du document cartographique, identifiant la trame de données, la création d'une couche et en ajoutant la couche au document cartographique. Il est intéressant de noter que tout ceci peut être accompli en utilisant ce qui suit, à condition qu'il soit appelé depuis le document cartographique actuel.

# import modules 
import arcpy 

# create layer in TOC and reference it in a variable for possible other actions 
newLyr = arcpy.MakeFeatureLayer_managment(
    in_features, 
    out_layer 
)[0] 

Make Feature Layer nécessite deux entrées, les fonctions d'entrée et la couche de sortie. Les entités en entrée peuvent être n'importe quel type de classe d'entités ou de couche. Cela inclut les fichiers de formes. Le calque de sortie est le nom du calque à afficher dans la table des matières.

En outre, Make Feature Layer peut accepter une clause where pour créer une requête de définition au moment de la création. C'est typiquement comme cela que je l'implémente, quand j'ai besoin de créer beaucoup de couches avec différentes requêtes de définition rapidement. Enfin, dans l'extrait ci-dessus, bien que cela ne soit pas nécessaire, j'ai montré comment remplir une variable avec le résultat de la sortie de l'outil afin que la couche puisse être manipulée dans la table des matières en utilisant arcpy.mapping si nécessaire plus tard dans le script. Chaque outil renvoie un objet résultat. La sortie de l'objet résultat peut être accédée en utilisant la méthode getOutput, mais on peut également y accéder en utilisant l'index de la propriété de résultat qui vous intéresse, dans ce cas la sortie située à l'index 0.