使用Python / ArcPy将shapefile或要素类添加为ArcGIS Desktop中的图层吗?


20

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

到目前为止,我能做的最好的就是使用以下命令将图层文件添加到当前地图(“ 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

但是,我的原始数据始终是shapefile,因此我需要能够打开它们。(等效地:无需打开即可将shapefile转换为图层文件,但我不希望这样做)。

Answers:


30

这是我发现有效的方法:

import arcpy
from arcpy import env

# 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(path_to_shapefile_or_feature_class)

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

该代码将新图层放入的数据框(变量df)是地图文档中的第一个数据框。还要注意,此代码将数据添加为TOC底部的新层。您还可以使用其他排列选项,即“ AUTO_ARRANGE”和“ TOP”。


2
指定数据框的另一种选择是使用活动数据框:df = mxd.activeDataFrame而不是df = arcpy.mapping.ListDataFrames(mxd)[0]-而且,您在listdataframe调用中不需要“ *” 。
jbalk

10

制作要素层(数据管理) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

我只是在ArcMap的Python窗口中尝试过,它直接添加到了我的地图中(我不必获取数据框并调用AddLayer)。

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') 替代文字


在立即窗口中效果很好...但是当我在脚本文件中尝试相同的代码并运行它时,什么也没发生!(代码运行时没有错误消息,但是ToC中什么都没有出现。)此外,如果我从ToC中删除了该层,然后再次尝试在立即窗口中运行代码,则会收到“文件已存在”类型的错误。“测试”图层文件保存在哪里?
汤姆W

您安装了SP1吗?
詹森·谢里尔

1
@Tom W:我几乎是一个使用python和arcpy的菜鸟。但是我不认为是物理创建图层文件。如果要使用图层文件,则必须制作该文件并将图层名称作为参数传递:arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') 如果您不想保存图层,而只是希望它消失了,arcpy.Delete_management('test')
杰·康明斯

@汤姆·W:重新阅读您的评论。您是否正在尝试从单独的python shell(而非直接窗口)向ArcMap添加图层?我认为您无法做到这一点(但我对此无权……也许可以)。
杰·康明斯

1
@Tom W:我知道该层错误,这就是为什么我要确保安装了SP1的原因。要将您要描述的图层添加到目录中,您需要您的脚本具有一个派生的输出要素图层,并将该值设置为您制作的图层的名称。ArcMap中的GP工具试图保护TOC免受GP工具中的虚假层(临时FC等)影响,因此您需要在脚本工具的参数中定义新要素图层完成后将保留在TOC中。图层位于磁盘上的位置可能是FC的数据源,因此,要素类的名称与工作空间上的图层相同。
詹森·谢勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.