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

基于ArcPy的GIS數(shù)據(jù)批處理程序教學(xué)實驗設(shè)計

2021-08-18 23:19:36谷正楠張震
電腦知識與技術(shù) 2021年18期
關(guān)鍵詞:開發(fā)

谷正楠 張震

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

關(guān)鍵詞:ArcPy;GIS數(shù)據(jù);批處理;程序設(shè)計;開發(fā)

中圖分類號:G642? ? ? ? 文獻標(biāo)識碼:A

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

開放科學(xué)(資源服務(wù))標(biāo)識碼(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開發(fā)是地理信息科學(xué)專業(yè)重要的專業(yè)基礎(chǔ)課程[1-2],以往的授課多以ArcGIS Engine教學(xué)為主,學(xué)生編程基礎(chǔ)薄弱,會對開發(fā)產(chǎn)生畏難情緒[3],而Python語言簡單易學(xué)且編程靈活[4],有助于學(xué)生輕松上手。ArcPy是基于ArcGIS的Python站點包,通過調(diào)用ArcPy,可以開發(fā)出大量的用于處理GIS數(shù)據(jù)的實用程序[5],既可以解決傳統(tǒng)的ArcMap軟件處理GIS數(shù)據(jù)效率低、處理速度慢且容易出錯等問題[6-7],又可以培養(yǎng)學(xué)生對于GIS開發(fā)的積極性,加深學(xué)生對開發(fā)的認(rèn)識,鍛煉學(xué)生的開發(fā)能力。因此,在傳統(tǒng)ArcGIS Engine教學(xué)前,引入基于ArcPy的GIS數(shù)據(jù)批處理實驗,有助于提高學(xué)生對開發(fā)的自信,拓寬學(xué)生對開發(fā)的視野,為以后的編程學(xué)習(xí)奠定基礎(chǔ)。

本文設(shè)計基于ArcPy的GIS數(shù)據(jù)批處理程序教學(xué)實驗,旨在讓學(xué)生學(xué)習(xí)和掌握Python和ArcPy程序設(shè)計的基礎(chǔ)知識與GIS二次開發(fā)技術(shù)相關(guān)的理論知識,并引導(dǎo)學(xué)生在以后的學(xué)習(xí)中自主開發(fā)實用的批處理程序。

2 ArcPy簡介

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

3 GIS數(shù)據(jù)批處理實驗方案設(shè)計

3.1 實驗設(shè)計思路

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

3.1.1 柵格數(shù)據(jù)裁剪思路

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

首先指導(dǎo)學(xué)生打開ArcToolbox中的柵格裁剪工具,查看“幫助”,復(fù)制下面這一行代碼:

arcpy.Clip_management(

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

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

所有參數(shù)設(shè)置完成后,運行代碼,即可得到柵格數(shù)據(jù)的處理結(jié)果,如圖1所示:

該方法雖然能夠正確實現(xiàn)柵格數(shù)據(jù)裁剪,但每次都需要重新寫入代碼,耗時耗力。因此,引導(dǎo)學(xué)生將“幫助”文檔里的所有代碼復(fù)制到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為設(shè)置工作空間,即將其路徑設(shè)置為待處理柵格數(shù)據(jù)的存儲路徑,并將Clip_management( )函數(shù)的七個參數(shù)按照前文所述的步驟進行修改。值得注意的是,每次運行代碼時都需要去查找矢量數(shù)據(jù)的矩形范圍,很不便捷。

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

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")

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

常規(guī)思路:循環(huán)與if語句相結(jié)合,通過對擴展名進行篩查的方式獲取目標(biāo)數(shù)據(jù)。

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

3.1.2 批處理思路

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

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

for raster in rasters:

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

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( )函數(shù),該函數(shù)可以將文件名與擴展名分離出來,從而實現(xiàn)為每一個輸出影像不重復(fù)命名。

3.1.3 程序界面設(shè)計

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

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

3.2 學(xué)生實驗實施與效果

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

結(jié)果表明,通過本次實驗,多數(shù)學(xué)生已經(jīng)認(rèn)識到了ArcPy功能的強大以及批處理程序設(shè)計的便捷,實現(xiàn)了對ArcPy的入門,并有興趣繼續(xù)學(xué)習(xí)程序設(shè)計,以便在未來的學(xué)習(xí)中可以解決更多問題。

4 結(jié)束語

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

參考文獻:

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

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

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

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

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

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

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

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

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

【通聯(lián)編輯:王力】

猜你喜歡
開發(fā)
軟件開發(fā)信息管理系統(tǒng)的設(shè)計與實現(xiàn)
淺談動力總成騾子車開發(fā)方法
汽車科技(2016年5期)2016-11-14 08:04:56
高中歷史教學(xué)中對歷史圖片的開發(fā)及實際應(yīng)用
考試周刊(2016年85期)2016-11-11 01:57:37
在線投稿與編輯系統(tǒng)的設(shè)計與開發(fā)
河南方言文化資源的保護及其開發(fā)利用的研究
遵義紅色旅游開發(fā)對策研究
基于J2EE和Ionic的ITer學(xué)習(xí)APP設(shè)計與開發(fā)
單片機在電子技術(shù)中的應(yīng)用和開發(fā)
主站蜘蛛池模板: 99久久国产综合精品2020| 美女无遮挡免费视频网站| 日韩毛片免费观看| 亚洲an第二区国产精品| 午夜日b视频| 亚洲人成亚洲精品| 1024你懂的国产精品| 国产爽歪歪免费视频在线观看 | 亚洲制服丝袜第一页| 99久久人妻精品免费二区| 亚洲狼网站狼狼鲁亚洲下载| 亚洲精品视频免费| 日韩一区二区三免费高清 | 国产H片无码不卡在线视频| 91口爆吞精国产对白第三集| 久久久久88色偷偷| 久久永久精品免费视频| 九色91在线视频| 日日拍夜夜操| 91亚洲免费视频| 中文字幕在线一区二区在线| 青青草一区| 亚洲人成网站观看在线观看| 日本成人不卡视频| 伊人丁香五月天久久综合 | 欧美激情视频在线观看一区| 免费Aⅴ片在线观看蜜芽Tⅴ| 99九九成人免费视频精品| 日本免费a视频| 亚洲精品中文字幕午夜| 国产人前露出系列视频| 久久中文字幕2021精品| 欧美在线精品怡红院| 亚洲成人免费看| 亚洲欧洲自拍拍偷午夜色无码| 高清码无在线看| 日本在线亚洲| 综合色亚洲| 一级黄色欧美| 国产欧美自拍视频| 91九色最新地址| 69av在线| 亚洲黄色激情网站| 亚洲色无码专线精品观看| 在线观看热码亚洲av每日更新| 亚洲人成网线在线播放va| 国产视频大全| 国产精品香蕉在线| 亚洲中文精品久久久久久不卡| 91精品国产91久久久久久三级| 亚洲国内精品自在自线官| 国产幂在线无码精品| 999精品色在线观看| 日韩精品成人在线| 日韩第一页在线| 日韩欧美色综合| 99久久国产综合精品2023| 一级做a爰片久久毛片毛片| 中文字幕有乳无码| 亚洲精品无码久久久久苍井空| 强奷白丝美女在线观看 | 亚洲人成网址| 制服丝袜亚洲| 中文字幕 91| 国产永久在线观看| 2019国产在线| 五月婷婷综合在线视频| 精品综合久久久久久97超人| av在线无码浏览| 91小视频在线播放| 一本久道久综合久久鬼色 | 欧美三级视频网站| 成年片色大黄全免费网站久久| 97se亚洲综合| 色综合中文| 日本一区二区不卡视频| 亚洲娇小与黑人巨大交| 日韩欧美亚洲国产成人综合| 自偷自拍三级全三级视频| 国产成人精品免费av| 亚洲av无码专区久久蜜芽| 国产精品护士|