• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      ARCGIS中應用Python腳本進行空間數據批量處理的研究與實現

      2012-08-15 00:48:29河南省基礎地理信息中心
      河南科技 2012年21期
      關鍵詞:腳本語言批處理批量

      河南省基礎地理信息中心 石 晶

      河南省遙感測繪院 郭子珍

      河南省基礎地理信息中心 李小勇

      ARCGIS 是美國環(huán)境系統(tǒng)研究所ESRI(Environment system Research Institute)推出的一套完整的軟件產品,旨在構建完善的GIS(Geographic Information System)系統(tǒng)。

      利用ARCGIS進行空間數據執(zhí)行空間分析、建模、數據處理任務過程中,幾乎所有操作都會涉及重復的工作,例如數據格式轉換,裁切拼接,投影變換等。如果采用人工處理,效率低并且容易出錯,為了保證數據質量,減少重復勞動,需要創(chuàng)建可自動執(zhí)行批量處理的方法。

      空間數據的地理處理是以數據變換的框架為基礎。典型的地理處理工具會在ArcGIS 數據集(如要素類、柵格或表)中執(zhí)行操作,并最終生成一個新數據集。每個地理處理工具都用于對地理數據執(zhí)行一種非常重要的小操作,例如將數據集從一個地圖投影中投影到另一個地圖投影中、向表中添加字段或在要素周圍創(chuàng)建緩沖區(qū)。在ArcGIS 中包含了數百個此類地理處理工具。

      在軟件編程領域中,語言可基本分為兩類:系統(tǒng)語言和腳本語言。系統(tǒng)語言是諸如C++和.NET,用于通過計算機的低級圖元和原始資源從底層開發(fā)應用程序。腳本語言(例如Python和Perl)用于將多個應用程序組合到一起,該語言使用計算機內置的高級功能,回避了系統(tǒng)語言編程程序必須處理的具體細節(jié)。與系統(tǒng)語言相比,腳本語言更加易學易用,對編程有基本的了解便足以很好地使用它們。

      一、空間數據

      與空間位置有關的地理數據,按組織形式分為矢量數據和柵格數據兩大類。在ARCGIS中,常用的矢量數據有:Coverage,Shapefile 和Geodatabase,這幾種都是ARCGIS 的原生數據格式,在ARCGIS中使用最多。

      二、Python簡介

      Python是一種不受局限、跨平臺的開源編程語言,它功能強大且簡單易學。因而得到了廣泛應用和支持。ArcGIS 從9.0 開始中引入了Python。此后,Python被視為可供地理處理用戶選擇的腳本語言并得以不斷發(fā)展。Python的部分優(yōu)勢為:易于學習,非常適合初學者,也特別適合專家使用;可伸縮程度高,適于大型項目或小型的一次性程序(稱為腳本);可移植,跨平臺;可嵌入(使ArcGIS可腳本化);穩(wěn)定成熟;用戶社區(qū)規(guī)模大。

      Python已延伸到ArcGIS中,成為了一種用于進行數據分析、數據轉換、數據管理和地圖自動化的語言,有助于提高工作效率。

      三、空間數據批處理

      在ARCGIS的地理處理框架中,腳本與模型都可用來創(chuàng)建新工具。模型是使用可視化編程語言(模型構建器)創(chuàng)建的;而腳本是使用基于文本的語言和文本編輯器創(chuàng)建的。和模型一樣,使用分布向導來將腳本引入至自定義工具箱中,然后該腳本就會成為您可在模型或其他腳本中使用的另一個工具。系統(tǒng)工具中有多個都是腳本。從技術角度而言,編寫一個腳本但不將其引入工具箱,此時,該腳本便不屬于工具,而僅是磁盤上的一個獨立腳本,在PythonWin下可以運行。

      ARCTOOLBOX的“BATCH”可以進行批處理,但是如果源數據本身不在同一個文件夾下,仍然需要手動一條一條選擇,很不方便。使用PYTHON 編寫腳本進行批處理是行之有效的方法。日常中需要處理的數據目錄格式一般為:D:項目圖幅名層名。批處理時一般需要把項目名稱文件夾下所有圖幅運行一遍。

      對于批處理非常重要的一點是遍歷目錄下所有待處理數據有兩種基本的方法。

      1.利用Python現成的函數,os模塊中walk()可以獲得一個文件夾下的所有目錄名,子目錄名,以及所有文件名。語法如下:

      for pathroot,dirnames,filename in os.walk(“D:\workspace”)

      其中pathroot 返回所有目錄的路徑名,dirnames 返回所有的子目錄名,filenames返回所有文件名。

      2.另外利用Geoprocessor Programming Model 中的Lists,語法如下:

      Import arcgisscripting

      gp=arcgisscripting.create()

      workspaces = gp.listworkspaces(“*”,“Folder”)#獲得項目名稱下的所有圖幅目錄。

      fcs=gp.ListFeatureClasses()#獲得圖幅目錄下所有要素類。

      例子1:批量裁切矢量數據。

      import arcgisscripting,sys,os

      gp =arcgisscripting.create()

      gp.workspace = sys.argv[1]#工作目錄

      clipFeatures = sys.argv[2]#用來裁切的矢量數據集

      outWorkspace = sys.argv[3]#輸出目錄

      clusterTolerance = float(sys.argv[4])#容限值

      try:

      #獲得目錄下所有數據集

      fcs = gp.ListFeatureClasses()

      #循環(huán)所有數據集

      fcs.Reset()

      fc = fcs.Next()

      while fc:

      try:

      outFeatureClass = outWorkspace+"/"+fc

      gp.Clip_analysis(fc,clipFeatures,outFeatureClass,clusterTolerance)

      fc = fcs.Next()

      except:

      fc = fcs.Next()

      except:

      gp.AddMessage(gp.GetMessages(2))

      print gp.GetMessages(2)

      例子2:多幅圖多圖層批量拼接shape數據。

      import arcgisscripting,sys,os

      gp = arcgisscripting.create(9.3)

      gp.workspace = gp.GetParameterAsText(0)

      try:

      ws = gp.workspace

      workslist = gp.listworkspaces("*","Folder")

      print workslist

      for layer in ["resa","cpta","boua","brga","hfca","hyda","lfca","lrda","rfca","tera","vega"]:

      i=0

      while i<len(workslist):

      works = workslist[i]

      out_feat_class = layer+".shp"

      if gp.exists(works+"\"+layer+".shp"):

      if not gp.exists(out_feat_class):

      gp.CreateFeatureclass(ws,layer,"POLYGON",works+"\"+layer+".

      print works+"\"+layer+".shp"

      print out_feat_class

      try:

      gp.Append_management(works+"\"+layer+".shp",out_feat_class,"NO_TEST")

      i=i+1

      except:

      i=i+1

      continue

      else:

      i=i+1

      except:

      gp.AddMessage(gp.GetMessages(2))

      print gp.GetMessages(2)

      如果用戶常用ARCTOOLBOX進行數據處理,可以將以上代碼獲得參數的語句改為gp.workspace=gp.GetParameterAsText(0),注意從“0”開始,這樣在ArcToolbox 中添加新Toolbox,在Toolbox下添加Script,指向已經寫好的腳本文件。上述例子就可以在ARCGIS的Arctoolbox中使用。

      以上例子均在ARCGIS9.3、Python2.5 中調試通過。另外筆者還編寫了批量變換投影信息,批量按圖號分帶,批量轉換數據格式等多個腳本程序。

      綜上,Python 編寫地理批量處理工具簡捷、實用,方便解決工作中的實際問題。掌握Python對日常數據處理工作有很大幫助。

      猜你喜歡
      腳本語言批處理批量
      批量提交在配置分發(fā)中的應用
      科學家(2021年24期)2021-04-25 12:55:27
      一種面向SSC的電信增值業(yè)務的生成方法及實現
      基于Unity3D的坦克大戰(zhàn)游戲設計與實現
      淺析計算機技術在flash動畫中的應用
      淺議高校網銀批量代發(fā)
      基于SiPESC平臺的Python擴展模塊開發(fā)
      基于PSD-BPA的暫態(tài)穩(wěn)定控制批處理計算方法的實現
      基于AUTOIT3和VBA的POWERPOINT操作題自動批量批改
      考慮價差和再制造率的制造/再制造混合系統(tǒng)生產批量研究
      批處理天地.文件分類超輕松
      鹤庆县| 茌平县| 婺源县| 新余市| 中方县| 博白县| 定远县| 韶关市| 平阴县| 麻栗坡县| 寿宁县| 元谋县| 青河县| 洛浦县| 合水县| 托克托县| 乐安县| 台东县| 泸定县| 灵寿县| 泰顺县| 乌拉特中旗| 荣成市| 景谷| 平罗县| 五家渠市| 黄陵县| 隆化县| 阿拉善右旗| 佛山市| 衡东县| 竹山县| 宁晋县| 牡丹江市| 威海市| 阿克| 兰溪市| 孝感市| 岳阳市| 即墨市| 康定县|