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

4 投票
2 回答
17013 浏览
提问于 2025-04-16 06:04

我正在尝试用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 个回答

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]

创建要素图层需要两个输入,一个是输入要素,另一个是输出图层。输入要素可以是任何类型的要素类或图层,包括形状文件。输出图层是指在目录中显示的图层名称。

此外,创建要素图层时可以接受一个条件语句,这样在创建时就可以设置一个定义查询。通常我在需要快速创建很多不同定义查询的图层时会这样做。

最后,在上面的代码片段中,虽然不是必须的,但我演示了如何用工具输出的结果填充一个变量,这样如果后面需要在脚本中使用arcpy.mapping对图层进行操作,就可以在目录中进行处理。每个工具都会返回一个结果对象。你可以通过getOutput方法访问这个结果对象的输出,也可以通过你感兴趣的结果属性的索引来访问,在这个例子中,输出位于索引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

撰写回答