GIS_Arcpy.mapping在制圖自動化中的使用||| 今天學(xué)習(xí)了在ArcGIS10中如何使用Python實(shí)現(xiàn)制圖自動化的課程。學(xué)完課程之后發(fā)現(xiàn),其實(shí)很多在我目前的應(yīng)用水平上還用不上這么高級的東西。其實(shí)也能,我做的一些組圖就可以。但是這畢竟僅僅是修改一些參數(shù)。如果想深入使用,還需要進(jìn)一步學(xué)習(xí)一些其他的函數(shù)功能。 現(xiàn)在對課程中所涉及到的Python程序和相應(yīng)的函數(shù)做一個(gè)總結(jié),為以后的學(xué)習(xí)提供參考,同時(shí)也復(fù)習(xí)相關(guān)的內(nèi)容。 主要內(nèi)容是將如何使用ArcPy Mapping這個(gè)模塊。模塊的主要作用是使地圖的管理和輸出自動化。也就是說通過Python編程來流暢操作大量數(shù)據(jù)的制圖和輸出過程,而不需要手動單獨(dú)操作。例如,更新或者修正數(shù)據(jù)源, 打開和分析地圖文件并且更新元數(shù)據(jù)等。 1. 管理地圖和圖層 arcpy.mapping 這可以理解為一個(gè)編程環(huán)境,也可以理解為一個(gè)總的函數(shù)功能,下面有許多子功能。通過使用它,可以用來調(diào)用地圖數(shù)據(jù)的各個(gè)屬性以及制圖元素(layer, layout element) 2. 第一步:設(shè)定工作圖層 (where to run your script, or can be understood as which map document you will work with) 基本代碼: “mxd = arcpy.mapping.MapDocument (“current”)” 這個(gè)代碼命名了一個(gè)新變量 “mxd”,然后使用MapDocument這一函數(shù)將current,也就是當(dāng)前的圖層賦值給這個(gè)變量。 如果不想用當(dāng)前圖層,可以使用目標(biāo)圖層的地址,代替current 例如: “mxd = arcpy.mapping.MapDocument(r“C:\Maps\city.mxd”)” 這里要注意的是要在地址前面加上個(gè)字母“r”。原因是“\”在python中有特殊的含義,加上r后可以使python忽略這一符號,而將其按地址來讀取。 MapDocument是一個(gè)對象函數(shù),他將是變量能夠處理地圖的屬性。通常,使用這個(gè)函數(shù)對變量賦值是編程的第一行,因?yàn)檫@將使得變量可以使用arcpy.mapping中的許多子函數(shù)。下面將看到。而通常最后兩行是保存和刪除變量(del mxd)。刪除的原因有兩個(gè),一個(gè)是避免之后如果對不同的地圖文件使用變量名,有可能引起錯誤。另外,如果想給目前的地圖文件附以其他名,需要從當(dāng)前變量名中解放出來。 使用arcpy.mapping的目的是使編程簡單。在用他調(diào)用地圖文件(map document)的時(shí)候,需要先建立好地圖文件,包括里面的指北針等,都需要先建立好。 3. 修改名字: “mxd.author=”GIS Department””修改之后,可以在data frame的屬性表中看到效果。 “mxd.save()” 4. 修改地址和數(shù)據(jù)源(layer data sources) “path = “C:\Student\Mapscripting2\”” (這相當(dāng)于建立了一個(gè)新的變量,用該代替具體的地址,作用后面會體現(xiàn)) “mxd.replaceWorkspaces(path+r”\cityof\Westerville.mdb”, “ACCESS_WORKSPACE”, path+r”\westervill.gdb”, “FILEGDB_WORKSPACE”)” (這個(gè)函數(shù)有四個(gè)必須的參數(shù),old_workspace_path, old_workspace_type, new_workspace_path, new_workspace_type) 這里就體現(xiàn)了使用path這個(gè)新參數(shù)的意義,如果新的工作區(qū)域和就得工作區(qū)域不在一個(gè)文件夾里面,需要兩個(gè)path variable. “mxd.saveACopy(“C:\Student\Mapscripting\newname.mxd”)” 這里面有兩種不同的保存選擇,上面是直接保存,這個(gè)是保存一個(gè)新的。 5. 修改屬性(properties) 顯示Dataframe里面圖層的列表: “ListDataFrames”返回一個(gè)所有DataFrame里面圖層的Python列表。 “mxd = arcpy.mapping.MapDocument(“Current”)” “df = arcpy.mapping.ListDataFrames(mxd)[1]” “print df.name” 后面的1是一個(gè)從0開始技術(shù)的指數(shù),表示的是所需要參數(shù)的個(gè)數(shù),比如是第二個(gè),那就用1. 這個(gè)是將DataFrame命名,但是如果是Dataframe中的某一個(gè)圖層,需要用到: “ListLayers” 她有三個(gè)參數(shù):map_document, {wildcard}, {data_frame} 比如,為了將West這一Dataframe中的df這一圖層賦值給Lyr; “lyr=arcpy.mapping.ListLayers(mxd,””,df)” 關(guān)閉圖層: lyr.visible=False 為了看到執(zhí)行的效果,需要使用:arcpy.RefreshActiveView()和arcpy.RefreshTOC() 6. For loop應(yīng)用 如果不知道某一個(gè)圖層所在的DataFrame,就用一個(gè)循環(huán)來解決; “for lyr in arcpy.mapping.ListLayers(mxd):” “if lyr.name==”Hydrography”” “l(fā)yr.name=”Lakes””
|
|