使用arcpy.mapping模塊批量出圖

     出圖是項目裏常見的任務,有的項目甚至會要上百張圖片,因此批量出圖工具頗有必要。arcpy.mapping就是ArcGIS裏的出圖模塊,能快速完成一個出圖工具。app

         arcpy.mapping模塊裏經常使用的類有MapDocument、DataFrame、Layer、DataDrivenPages和TextElement。函數

         MapDocument類是地圖文檔(.mxd文件)對應的類。初始化參數是一個字符串,通常是.mxd文件的路徑:工具

         mxd=arcpy.mapping.MapDocument(r"F:\GeoData\ChinaArea\ChinaVector.mxd")spa

         DataFrame類用於操做地圖內的Data Frame(即下圖的Layers),可以控制地圖的範圍、比例尺等。用arcpy.mapping.ListDataFrames(map_document, {wildcard})函數獲取。code

         df= arcpy.mapping.ListDataFrames(mxd)[0]blog

        

         Layer類用於操做具體的圖層。可以控制圖斑的樣式、可見性等。能夠用.lyr文件的路徑初始化,也能夠經過arcpy.mapping.ListLayers(map_document_or_layer, {wildcard}, {data_frame})函數獲取。排序

         lyr1=arcpy.mapping.Layer(r" F:\GeoData\ChinaArea\Province.lyr")圖片

         df.addLayer(lyr1)utf-8

         lyr2=arcpy.mapping.ListLayer(mxd,"",df)[0]element

         DataDrivenPages類須要配合ArcMap中的Data Driven Pages工具使用。用於一個矢量文件內的所有或部分圖斑每一個出一張圖的狀況。

         TextElement類用於操做地圖上的文字,好比圖名、頁數。經過arcpy.mapping.ListLayoutElements (map_document, {element_type}, {wildcard})函數獲取。

         txtElm=arcpy.mapping.ListLayoutElements(mxd,"TEXT_ELEMENT")[0]

         常見的出圖模式有兩種:一是一個矢量文件裏每一個圖斑出一張圖,二是一個文件夾下每一個矢量文件出一張圖。

每一個圖斑出一張圖:

         這種狀況有Data Driven Pages工具配合最好。打開ArcMap的Customize->Toolbars->Data Driven Pages,設置好圖層、名稱字段、排序字段、顯示範圍和比例尺,保存地圖。

# coding:utf-8

import arcpy

 

mxd=arcpy.mapping.MapDocument(r"F:\GeoData\ChinaArea\ChinaVector.mxd")

for pageNum in range(1,mxd.dataDrivenPages.pageCount):

         mxd.dataDrivenPages.currentPageID=pageNum

         mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)

         print mapName

         arcpy.mapping.ExportToPNG(mxd,r"F:\GeoData\ChinaArea\Province\\"+mapName+".png")

print 'ok'

 

一個文件夾下的每一個矢量文件出一張圖:

         

# coding:utf-8

import arcpy

import os

 

def GetShpfiles(shpdir):

         shpfiles=[]

         allfiles=os.listdir(shpdir)

         for file in allfiles:

                   if os.path.isfile(file):

                            if file.endswith('.shp'):

                                     shpfiles.append(file)

                   else:

                            shpfiles.extend(GetShpfiles(file))

         return shpfiles

 

allshps=GetShpfiles(r"F:\GeoData\ChinaArea\Province")

mxd=arcpy.mapping.MapDocument(r"F:\GeoData\ChinaArea\ChinaVector.mxd")

lyr=arcpy.mapping.ListLayer(mxd)[0]

for shp in allshps:

         paths=os.path.split(shp)

         print paths[1]

         lyr.replaceDataSource(paths[0],"SHAPEFILE_WORKSPACE",paths[1])

         arcpy.mapping.ExportToPNG(mxd,r"F:\GeoData\ChinaArea\Province\\"+paths[1]+".png")

print 'ok'

更多功能見ArcMap幫助文檔Geoprocessing->ArcPy->Mapping Module。

相關文章
相關標籤/搜索