arcpy的mapping模塊常見屬性方法總結
1.如何獲取當前地圖文檔:
方式:mxd = mapping.MapDocument("CURRTENT")引用本地或者網絡文檔(arcpy.mapping.Document("文件路徑"))
2.如何獲取當前圖層的圖層列表:
Eg:import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
layers = mapping.ListLayers(mxd)
for lys in layers:
print(lys.name)
3. 如何限制圖層列表:
Eg: import arcpy.mapping as mapping
mxd = mapping,.MapDocument("CURRENT")
# 獲取地圖文檔的數據框列表,搜索"數據框_name"的指定數據框
for df in mapping.ListDataFrames(mxd):
if df.name =="數據框_name":
layers = mapping.ListLayers(mxd, 'Burg*', df)
# for 循環,輸出地圖文檔中的每個圖層名稱
for layer in layers:
print(layer.name)
4.如何縮放到圖層:
DataFrame.zoomToSelectedFeatures(): 縮放至所有選擇要素的范圍(來自數據框的所有圖層)該方法就是縮放至所選要素
getSelectedExtent(): 該方法是Layer對象的,也是縮放至所選記錄的范圍。並且返回一個Extent()對象,可以作為參數傳給DataFeame.panToExtent()方法。
Eg: import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
df = mapping.ListDataFrames(mxd,"數據框_name")[0]
layer = mapping.ListLayers(mxd,"數據框中圖層_name*",df)[0]
df.extent = layer.getSelectedExtent()
5.如何改變地圖范圍:
DataFrame 類的extent屬性可以設置地圖的范圍
Eg: impot arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
for df in mapping.ListDataFrames(mxd):
if df.name == '數據框_name':
layers = mapping.ListLayers(mxd, '數據框中指定圖層_name',df)
for layer in layers:
query in layers:
layer.definitionQuery = query
df.extent = layer.getExtent()
6.添加圖層和插入圖層:
添加圖層:df = mapping.ListDataFremes(定義的地圖文檔量)[0]
layer = mapping.Layer(r"引用圖層文件.lyr文件的路徑")
mapping.AddLayer(df, layer, "AUTO_ARRANGE")
插入圖層: df = mapping.ListDataFrames(mxd, "數據框_name")[0]
refayer = mapping.Layers(mxd, "數據框中指定圖層_name", df)[0]
inseryLayer = mapping.Layer(r"待插入的圖層路徑")
mappin.InsertLayer(df, refLayer, insertLayer, "BEFORE或者AFTER")
7.如何查找地圖文檔或者圖層文件丟失的數據源:
Eg: mxd = mapping.mapDocument(r"地圖文檔的路徑")
listBrokenDS = mapping.ListBrokenDataSources(mxd) # 獲取丟失數據源的圖層列表
for layer in listBrokenDS:
print(layer.name)
8.使用MapDocument.findAndReplaceWorkspacePaths()查找全局,用以查找丟失的數據源:
mxd.findAndReplaceWorkspacePaths(r"數據源路徑1", r"數據源路徑2")
mxd.saveAcopy(r"保存地圖文檔路徑")
拓展:MapDocument.replaceWorkspacex()類似上法,本方法不允許用戶從一種工作空間類型轉換成另一種工作空間(上法則可以)