999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ArcPy的GIS數據批處理程序教學實驗設計

2021-08-18 23:19:36谷正楠張震
電腦知識與技術 2021年18期
關鍵詞:開發

谷正楠 張震

摘要:針對以往GIS設計與開發課程教學中,學生對于編程語言畏難的問題,本文設計一個基于ArcPy的GIS數據批處理程序教學實驗,以批量裁剪柵格數據為例,詳細闡述了程序設計的具體思路及過程,旨在為學生自主設計實用的批處理程序提供參考,同時提高學生對GIS開發的自信,培養學生對GIS開發的興趣,加深學生對GIS開發的認識,強化學生的GIS開發能力,為以后的編程學習奠定基礎。

關鍵詞:ArcPy;GIS數據;批處理;程序設計;開發

中圖分類號:G642? ? ? ? 文獻標識碼:A

文章編號:1009-3044(2021)18-0114-03

開放科學(資源服務)標識碼(OSID):

Teaching Experimental Design of GIS Data Batch Processing Program Based on ArcPy

GU Zheng-nan, ZHANG Zhen

(School of Geomatics, Anhui University of Science and Technology, Huainan 232001, China)

Abstract:For the current problem that students were afraid of programming language in the past teaching of GIS design and development courses, this article designs a teaching experiment of GIS data batch processing program based on ArcPy. Taking batch cropping of raster data as an example, the specific ideas of program design are explained in detail. The purpose of this process is to provide a reference for students to design practical batch processing programs independently, and at the same time improve students confidence in GIS development, cultivate students interest in GIS development, deepen students understanding of GIS development, and strengthen students GIS development capabilities. Lay the foundation for future programming learning.

Key words:ArcPy; GIS data; batch processing; program design; development

1 引言

GIS開發是地理信息科學專業重要的專業基礎課程[1-2],以往的授課多以ArcGIS Engine教學為主,學生編程基礎薄弱,會對開發產生畏難情緒[3],而Python語言簡單易學且編程靈活[4],有助于學生輕松上手。ArcPy是基于ArcGIS的Python站點包,通過調用ArcPy,可以開發出大量的用于處理GIS數據的實用程序[5],既可以解決傳統的ArcMap軟件處理GIS數據效率低、處理速度慢且容易出錯等問題[6-7],又可以培養學生對于GIS開發的積極性,加深學生對開發的認識,鍛煉學生的開發能力。因此,在傳統ArcGIS Engine教學前,引入基于ArcPy的GIS數據批處理實驗,有助于提高學生對開發的自信,拓寬學生對開發的視野,為以后的編程學習奠定基礎。

本文設計基于ArcPy的GIS數據批處理程序教學實驗,旨在讓學生學習和掌握Python和ArcPy程序設計的基礎知識與GIS二次開發技術相關的理論知識,并引導學生在以后的學習中自主開發實用的批處理程序。

2 ArcPy簡介

ArcPy是繼承ArcGIS 9中arcgisscripting模塊的基礎上,在ArcGIS 10中引入Python站點包發展而成[8-9]。它的出現為用戶在ArcGIS平臺上更便捷的使用 Python 語言操作提供了可能。通過調用ArcPy站點包,不僅可以訪問所有地理處理工具(包括擴展模塊),還可以調用多種有用的模塊、函數和類,便于快速查詢和批量處理GIS 數據。

3 GIS數據批處理實驗方案設計

3.1 實驗設計思路

實驗設計以柵格數據批量裁剪為例,通過詳細演示實驗步驟,引導學生根據實驗設計方案,選擇ArcToolbox中其他工具完成實驗。采用由淺入深的教學方法,詳細介紹柵格數據批量裁剪的思路,該思路對學生理解其他工具批處理操作具有重要的指導意義。

3.1.1 柵格數據裁剪思路

“幫助”是學習GIS開發最好的資料,在實驗中輔導學生根據“幫助”依次完成操作。雖然本課程的授課學生都具有ArcGIS操作的基礎,但缺乏對ArcGIS“幫助”中代碼的使用意識。本實驗以柵格初級裁剪為例引導學生查看“幫助”。

首先指導學生打開ArcToolbox中的柵格裁剪工具,查看“幫助”,復制下面這一行代碼:

arcpy.Clip_management(

"c:/data/image.tif","1952602 294196 1953546 296176",? ? "c:/data/clip.gdb/clip01","#","#","NONE","NO_MAINTAIN_EXTENT")

并將其拷貝到ArcMap的Python窗口中。根據“幫助”文檔:第一個參數和第四個參數分別是輸入的柵格數據和矢量數據,需要將其更改為自己的存儲路徑及數據名稱;第二個參數是裁剪范圍的坐標,按照X-Minimum,Y-Minimum,X-Maximum,Y-Maximum的順序存儲,打開ArcMap中的Clip工具,按照步驟將矢量數據導入便可以看到矢量數據的矩形范圍,按照順序更改該參數的數值;第三個參數是數據裁剪后的輸出路徑及數據名稱,同樣將其更改為自己的存儲路徑及保存名稱;第五個參數是設置缺失值,可以將其設置為0,也可以保持默認(#為默認值)設置;第六個參數是選擇裁剪的幾何形狀,有兩個值可選擇,NONE代表按照輸入數據的最小矩形范圍裁剪,ClippingGeometry代表按照輸入矢量數據的幾何形狀進行裁剪,這里選擇ClippingGeometry方式裁剪;第七個參數是選擇是否要調整裁剪范圍,同樣有兩個值可選擇,MAINTAIN_EXTENT代表按照矩形范圍進行裁剪,NO_MAINTAIN_EXTENT代表調整為按照輸入矢量數據的幾何形狀進行裁剪,這里選擇 NO_MAINTAIN_EXTENT。需要注意的是,即使第六個參數選擇的是ClippingGeometry,若第七個參數選擇MAINTAIN_EXTENT,結果也將是按照矩形范圍進行裁剪。

所有參數設置完成后,運行代碼,即可得到柵格數據的處理結果,如圖1所示:

該方法雖然能夠正確實現柵格數據裁剪,但每次都需要重新寫入代碼,耗時耗力。因此,引導學生將“幫助”文檔里的所有代碼復制到IDLE的腳本文件里:

import arcpy

arcpy.env.workspace = "C:/Workspace"

arcpy.Clip_management(

"c:/data/image.tif","1952602 294196 1953546 296176",? ? "c:/data/clip.gdb/clip01","#","#","NONE","NO_MAINTAIN_EXTENT")

其中,arcpy.env.workspace為設置工作空間,即將其路徑設置為待處理柵格數據的存儲路徑,并將Clip_management( )函數的七個參數按照前文所述的步驟進行修改。值得注意的是,每次運行代碼時都需要去查找矢量數據的矩形范圍,很不便捷。

接下來引入Describe( )函數的概念,指導學生在“幫助”中找到Describe( )函數。ArcPy中的Describe( )函數可以訪問不同數據集和數據集的不同屬性對象,包括輸入數據集的數據類型、空間參考、要素范圍以及屬性字段等。基于此,通過該函數的extent屬性來訪問輸入矢量數據的矩形范圍。修改后的代碼為:

import arcpy

arcpy.env.workspace = " D:/data"

clipFeature = "D:/data/clip.shp"

raster = "D:/data /image.tif"

outraster = " D:/result.gdb/clip"

desc = arcpy.Describe(clipFeature)

extent = desc.extent

arcpy.Clip_management(

raster , str(extent), outraster, clipFeature , "#","ClippingGeometry" ,"NO_MAINTAIN_EXTENT")

同時思考:如何基于以上程序,對多幅影像實現批量裁剪?

常規思路:循環與if語句相結合,通過對擴展名進行篩查的方式獲取目標數據。

ArcPy提供的思路:利用ArcPy中提供的一系列列表函數。

3.1.2 批處理思路

首先在“幫助”文檔里找到ArcPy提供的函數,打開列表數據(Listing data),瀏覽Arcpy提供的九個列表函數。列表函數可以根據指定條件進行搜索,列出所有符合條件的數據,并以列表的形式返回。如處理矢量數據可以采用ListFeatureClasses( )函數,處理字段類型數據可以采用ListFields( )函數,處理文件類型的數據可以采用ListFiles( )函數等。這里處理的數據為柵格數據,故采用ListRasters( )函數,同樣將下面的代碼復制到腳本文件里:

rasters = arcpy.ListRasters("*", "GRID")

for raster in rasters:

ListRasters( )函數包括wild_card和raster_type兩個參數,分別代表文件名稱和類型。將上面代碼的文件類型更改為tif,即可列出文件夾中所有.tif格式的柵格數據,再結合for循環,即可實現數據的批處理。修改后的代碼為:

import arcpy

import os

arcpy.env.workspace = " D:/data"

clipFeature = "D:/data/clip.shp"

rasters = arcpy.ListRasters("*", "tif")

for raster in rasters:

outraster= "D:/result.gdb/" + os.path.splitext(raster)[0] + "_clip"

desc = arcpy.Describe(clipFeature)

extent = desc.extent

arcpy.Clip_management(

raster , str(extent), outraster, clipFeature , "#","ClippingGeometry" ,"NO_MAINTAIN_EXTENT")

這里用到了os包提供的splitext( )函數,該函數可以將文件名與擴展名分離出來,從而實現為每一個輸出影像不重復命名。

3.1.3 程序界面設計

將編寫完成后的程序打包為ArcGIS中地理處理工具形式的Toolbox,便于下次處理數據時直接使用。同時注意,上述代碼都是直接指定路徑的,若想實現與用戶的交互操作,還需要引入GetParameterAsText( )函數,該函數可以以字符串的形式獲取輸入數據和輸出數據的路徑。因此完成代碼的最后一步是要將上述代碼的所有路徑更改為arcpy.GetParameterAsText(i)(i按照先后順序賦為0,1,2…),然后在ArcMap中新建一個Toolbox,并將腳本文件導入Toolbox,設置相應參數。最后設計的程序界面如圖2所示:

根據該程序,裁剪柵格數據(.tif格式)時,只需要輸入柵格數據的存儲路徑、裁剪范圍(.shp文件)并選擇裁剪結果的保存路徑即可。

3.2 學生實驗實施與效果

本實驗的最終目的是幫助學生快速理解在ArcGIS平臺中Python和ArcPy的開發方式、掌握ArcPy批處理程序并提高學生的GIS開發能力。基于此,在對2017級地理信息科學專業的學生進行基于ArcPy的GIS數據批處理程序教學實驗設計的課程后,讓學生根據上述實驗,在ArcToolbox中選擇任意工具(不得重復選擇)設計批處理程序并撰寫實驗報告。

結果表明,通過本次實驗,多數學生已經認識到了ArcPy功能的強大以及批處理程序設計的便捷,實現了對ArcPy的入門,并有興趣繼續學習程序設計,以便在未來的學習中可以解決更多問題。

4 結束語

本文基于ArcPy站點包,設計了一個批量裁剪柵格影像的程序,通過該程序可以使學生更直觀、清楚的了解到基于ArcPy設計批處理程序處理GIS數據的快速、高效,也可以培養學生對于程序設計的興趣。同時,本程序設計的方法、思想也同樣適用于基于ArcPy的其他批處理程序設計,可以為學生自主開發批處理程序提供參考,提高學生的GIS開發能力。

參考文獻:

[1] 姜建武,李景文,陸妍玲,等.普通本科GIS專業技術開發類課程教學探討[J].中國教育技術裝備,2019(6):95-97.

[2] 馬曉哲,張曉萱,耿文均.高校GIS專業軟件開發課程教學現狀及革新[J].高師理科學刊,2019,39(6):98-101.

[3] 胡最.地方高校GIS專業程序設計技能培養[J].地理空間信息,2020,18(12):58-62,7.

[4] 楊彩云,詹國華.引導性問題案例在Python數據分析基礎課程的教學[J].計算機教育,2021(1):154-157,162.

[5] 周崴,徐東炯,沈麗娟.基于Python和ArcPy的專題圖批量制作方法[J].測繪與空間地理信息,2020,43(10):17-20.

[6] 曹斌.基于ArcPy的矢量數據批處理方法研究[J].科技創新與應用,2017(21):90,92.

[7] 段春華,高磊.基于ArcPy的圖斑影像批量截圖方法研究[C]//江蘇省測繪地理信息學會2020年學術年會論文集.南京,2020:113-115.

[8] 邱世平,潘立仁,韋建飛.基于ArcGIS數據驅動頁面與Python腳本語言的專題圖批量出圖技術研究[J].林業調查規劃,2020,45(2):15-20.

[9] 杜寧,劉國棟.基于Arcpy與ModelBuilder批量提取柵格數據屬性表模型實驗的分析[J].重慶建筑,2020,19(3):13-14.

【通聯編輯:王力】

猜你喜歡
開發
軟件開發信息管理系統的設計與實現
淺談動力總成騾子車開發方法
汽車科技(2016年5期)2016-11-14 08:04:56
高中歷史教學中對歷史圖片的開發及實際應用
考試周刊(2016年85期)2016-11-11 01:57:37
在線投稿與編輯系統的設計與開發
河南方言文化資源的保護及其開發利用的研究
遵義紅色旅游開發對策研究
基于J2EE和Ionic的ITer學習APP設計與開發
單片機在電子技術中的應用和開發
主站蜘蛛池模板: 最新国产在线| 热re99久久精品国99热| 国产女人喷水视频| 永久成人无码激情视频免费| 亚洲福利视频一区二区| 亚洲国产综合精品一区| 国产亚洲精品自在久久不卡| 天堂亚洲网| 午夜无码一区二区三区| 欧美va亚洲va香蕉在线| 国产99欧美精品久久精品久久| 91精品情国产情侣高潮对白蜜| 999精品色在线观看| 亚洲IV视频免费在线光看| 91色在线视频| 欧美日韩v| 中国一级特黄大片在线观看| 国产aaaaa一级毛片| 波多野结衣一区二区三区四区| 三上悠亚一区二区| 亚洲一区二区三区在线视频| 久久男人视频| 久久精品这里只有国产中文精品| h视频在线播放| 67194亚洲无码| 97色伦色在线综合视频| 日韩在线成年视频人网站观看| 国产成人精品一区二区不卡| 色亚洲成人| 婷婷丁香色| 亚洲一级毛片免费看| 毛片一级在线| 国产亚洲欧美在线专区| 国产精品妖精视频| 久久精品人人做人人爽电影蜜月| 欧美.成人.综合在线| 91丝袜在线观看| 亚洲成肉网| 国产爽歪歪免费视频在线观看 | 最新日本中文字幕| 欧美一区中文字幕| 欧美三级日韩三级| 老色鬼欧美精品| 国产人人干| 欧美一级夜夜爽www| 久久这里只有精品国产99| 青草视频久久| 免费jizz在线播放| 制服丝袜国产精品| 亚洲男人的天堂视频| 华人在线亚洲欧美精品| 福利一区三区| 福利小视频在线播放| 国产精品一区二区在线播放| 中文字幕人妻av一区二区| 亚洲国产精品不卡在线| 激情五月婷婷综合网| 国产精品无码AV中文| 9丨情侣偷在线精品国产| 欧洲日本亚洲中文字幕| 又黄又爽视频好爽视频| 无码av免费不卡在线观看| 青青草原国产免费av观看| 91区国产福利在线观看午夜 | 欧美伦理一区| 美女毛片在线| 免费在线成人网| 久久久久人妻精品一区三寸蜜桃| 国产精品xxx| 亚洲高清在线天堂精品| 全裸无码专区| 亚洲国模精品一区| 国产精品微拍| 99re热精品视频中文字幕不卡| 91在线日韩在线播放| 天堂在线www网亚洲| 全部无卡免费的毛片在线看| 日本欧美视频在线观看| 99re精彩视频| 日韩不卡免费视频| 国产国产人免费视频成18| 久草性视频|