如何通过python脚本在ArcGIS中添加shapefile?

时间:2010-10-25 19:02:29

标签: python arcgis arcpy

我正在尝试使用Python自动执行ArcGIS Desktop中的各种任务(通常使用ArcMap),并且我一直需要一种方法来将形状文件添加到当前地图。 (然后做一些事情,但这是另一个故事)。

我能做的最好的事情是将图层文件添加到当前地图,使用以下内容(“addLayer”是图层文件对象):

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

但是,我的原始数据总是形状文件,所以我需要能够打开它们。 (相当于:将形状文件转换为图层文件,无需打开它,但我不想这样做。)

2 个答案:

答案 0 :(得分:6)

变量“theShape”是要添加的形状文件的路径。

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

答案 1 :(得分:1)

最近我遇到了类似的任务,最初使用识别地图文档的方法,识别数据框,创建图层并将图层添加到地图文档中。有趣的是,只要在当前地图文档中调用它,就可以使用以下方法完成。

# 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需要两个输入,输入功能和输出层。输入要素可以是任何类型的要素类或图层。这包括shapefile。输出图层是要在内容列表中显示的图层的名称。

此外,Make Feature Layer可以接受where子句以在创建时创建定义查询。当需要快速创建具有不同定义查询的大量图层时,这通常是我实现它的方式。

最后,在上面的代码片段中,虽然没有必要,但我演示了如何使用工具输出的结果填充变量,以便可以使用arcpy.mapping在内容列表中操作图层,如果以后需要的话在脚本中。每个工具都返回一个结果对象。可以使用getOutput方法访问结果对象输出,但也可以使用您感兴趣的结果属性的索引来访问它,在这种情况下,输出位于索引0处。