亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向Geodatabase的柵格數(shù)據(jù)批量加載插件開發(fā)

        2019-02-12 10:20:14王育紅劉康晨
        關(guān)鍵詞:功能

        王育紅,劉康晨

        (江蘇師范大學(xué) 地理測(cè)繪與城鄉(xiāng)規(guī)劃學(xué)院,江蘇 徐州 221116)

        0 引 言

        1999年, 美國(guó)ESRI公司發(fā)布了當(dāng)時(shí)代表最高技術(shù)水平的全系列GIS平臺(tái)——ArcGIS。Geodatabase則是伴隨ArcGIS而生的、 采用對(duì)象關(guān)系數(shù)據(jù)庫(kù)技術(shù)的新一代空間數(shù)據(jù)模型。 相對(duì)于早期的Shapefile與Coverage空間數(shù)據(jù)模型, Geodatabase具有一體化、 智能化等優(yōu)勢(shì), 能夠更清晰、 準(zhǔn)確地反映、 描述現(xiàn)實(shí)實(shí)體的靜態(tài)屬性與動(dòng)態(tài)行為特征[1]。 經(jīng)過多次的技術(shù)革新和版本升級(jí), 目前Geodatabase已具備統(tǒng)一集中管理矢量、 柵格、 DEM、 TIN、 網(wǎng)絡(luò)、 時(shí)態(tài)、 常規(guī)屬性表格、 音視頻等多種數(shù)據(jù)的強(qiáng)大能力, 并廣泛應(yīng)用于眾多領(lǐng)域和部門[2-3]。

        為滿足不同的應(yīng)用需要,Geodatabase針對(duì)柵格數(shù)據(jù)提供了5種不同的存儲(chǔ)與管理機(jī)制。其中:柵格數(shù)據(jù)集用來直接存儲(chǔ)原始格式的柵格數(shù)據(jù);柵格目錄和鑲嵌數(shù)據(jù)集作為特殊形式的關(guān)系表,主要來存儲(chǔ)記錄多幅柵格數(shù)據(jù)及其相關(guān)的屬性信息;要素類與表則通過其中自定義的柵格型屬性列(字段)來進(jìn)一步存儲(chǔ)記錄相關(guān)的柵格數(shù)據(jù),以豐富擴(kuò)展空間和非空間對(duì)象主體記錄的信息內(nèi)容、增加直觀認(rèn)識(shí)。對(duì)于前3種主體型存儲(chǔ)方式,可通過ArcMAP應(yīng)用程序提供的“導(dǎo)入柵格數(shù)據(jù)集”、“加載柵格數(shù)據(jù)集”等功能將外部原始柵格數(shù)據(jù)批量加載到所建Geodatabase中。但對(duì)于后兩種輔助型存儲(chǔ)方式,目前尚沒有批量加載工具,只能根據(jù)表或要素類中已有的數(shù)據(jù)記錄,人工逐條加載與之相關(guān)的柵格數(shù)據(jù),人機(jī)交互頻繁、效率低、易出錯(cuò)。針對(duì)這一不足,本文在總結(jié)分析ArcGIS平臺(tái)功能定制擴(kuò)展方法的基礎(chǔ)上,采用插件技術(shù)設(shè)計(jì)開發(fā)了一個(gè)面向Geodatabase表與要素類的柵格數(shù)據(jù)批量加載ArcMAP插件。

        1 ArcGIS定制開發(fā)技術(shù)

        為方便在已有功能基礎(chǔ)上量身定制開發(fā)出更個(gè)性、更簡(jiǎn)潔、更智能、更高效的功能或系統(tǒng),最大限度地滿足不同用戶的應(yīng)用需要,不同版本的ArcGIS平臺(tái)適時(shí)提供了多項(xiàng)定制擴(kuò)展開發(fā)技術(shù),如圖1所示。

        1.1 ArcObjects

        ArcObjects(AO)是基于Microsoft COM技術(shù)所構(gòu)建的一系列可重用COM組件集, 幾乎提供了ArcGIS全部的底層功能。 基于AO的開發(fā),早期主要有3種方式[4-5]: 利用ArcGIS內(nèi)嵌的VBA腳本語(yǔ)言直接對(duì)ArcGIS桌面應(yīng)用(如ArcMap)功能進(jìn)行擴(kuò)展開發(fā)[6-7]; 利用支持COM技術(shù)的編程語(yǔ)言(如VB、.Net、C++等), 在AO組件基礎(chǔ)上進(jìn)一步包裝其自身的dll組件, 經(jīng)編譯注冊(cè)后將其功能添加到ArcGIS系統(tǒng)或其他應(yīng)用程序中; 采用高級(jí)編程語(yǔ)言通過引用AO類庫(kù)及其包含的MapControl、 PageLayoutControl等可視化控件開發(fā)具有單獨(dú)界面、 可獨(dú)立運(yùn)行的GIS應(yīng)用程序。

        圖1 不同版本ArcGIS支持的定制開發(fā)技術(shù)Fig.1 Customizing and development technology in ArcGIS

        1.2 ArcEngine

        ArcEngine(即ArcGIS Engine, AE)是ESRI公司對(duì)AO核心組件進(jìn)行再封裝之后對(duì)外發(fā)布的一個(gè)獨(dú)立產(chǎn)品和開發(fā)工具包,其組件接口、方法、屬性與AO相同,但功能稍弱于AO。AE主要用來開發(fā)獨(dú)立GIS應(yīng)用或嵌入式GIS應(yīng)用,如將GIS功能嵌入到Mirosoft Word和Excel等已有應(yīng)用程序中。利用AE開發(fā)的應(yīng)用程序可以脫離ArcGIS產(chǎn)品(如Desktop),只依賴于ArcGIS Engine Runtime獨(dú)立運(yùn)行,而AO程序則必須依賴于ArcGIS產(chǎn)品才能運(yùn)行[8-9]。

        1.3 ModelBuilder

        ModelBuilder是一個(gè)用來創(chuàng)建、編輯和管理模型的應(yīng)用程序,也可以將其視為用于構(gòu)建工作流的可視化編程語(yǔ)言。ModelBuilder主要用于對(duì)復(fù)雜地理處理流程進(jìn)行簡(jiǎn)化,無需編碼,僅通過拖拽、連線、參數(shù)設(shè)置等方式就可以將已有地理處理工具串聯(lián)起來擴(kuò)展形成一個(gè)新的地理處理工具(模型或工作流),該工具可以進(jìn)一步嵌入到新模型中,并可以發(fā)布為地理處理服務(wù)供Web應(yīng)用調(diào)用[10-11]。因此,ModelBuilder所建模型具有可重用、易共享等特點(diǎn)。

        1.4 Addin

        Addin(與Add-in、Addon、Add-on、Plugin、Plug-in等詞同義)通常譯作插件,俗稱外掛,是一種遵循一定接口規(guī)范編寫出來的程序,主要用來改變宿主軟件的功能和性能[12-13]。這里的宿主軟件是指插件依附于其上,發(fā)揮功能的目標(biāo)程序。ArcGIS目前支持兩種桌面插件擴(kuò)展開發(fā)技術(shù)[14]:面向C#、VB、.Net和Java高級(jí)編程語(yǔ)言的Addin技術(shù);面向Python腳本語(yǔ)言的Addin技術(shù)。前者基于AO組件進(jìn)行擴(kuò)展開發(fā),支持的可擴(kuò)展元素較多;后者基于ArcPY站點(diǎn)包進(jìn)行擴(kuò)展開發(fā),不需要了解復(fù)雜的AO組件,代碼數(shù)量少,不需要編譯,但編碼不易調(diào)試、可擴(kuò)展元素較少。

        1.5 ArcGIS Runtime

        ArcGIS Runtime是一款基于服務(wù)架構(gòu)的輕量級(jí)全新開發(fā)產(chǎn)品集合,可用來在不同平臺(tái)設(shè)備上(如Window、 Linux、 Mac、 iOS、 Android等)通過不同編程語(yǔ)言(C++、 Java、 C#、 Qt等)開發(fā)離線或在線的制圖應(yīng)用及地理分析應(yīng)用,并且支持按需部署,無需注冊(cè)安裝。與AO、AE技術(shù)相比,ArcGIS Runtime具有跨平臺(tái)、易部署、顯示效率高、與WebGIS無縫集成等特點(diǎn)。

        2 柵格數(shù)據(jù)批量加載插件開發(fā)

        基于對(duì)以上各種擴(kuò)展開發(fā)方式的分析,以及已有開發(fā)經(jīng)驗(yàn),筆者采用C# 2010編程語(yǔ)言與Addin技術(shù)對(duì)ArcMAP 10.2柵格數(shù)據(jù)加載功能進(jìn)行擴(kuò)展, 設(shè)計(jì)實(shí)現(xiàn)了一個(gè)工具欄插件——iLoader,如圖2所示。

        圖2 iLoader插件Fig.2 Addin of iLoader

        2.1 插件功能原理

        首先,從“目標(biāo)表”組合框中選擇ArcMAP文檔中具有柵格型字段(以存儲(chǔ)柵格數(shù)據(jù))的表或要素類,并根據(jù)需要在“匹配字段”組合框中選擇“目標(biāo)表”的一個(gè)字符型字段用于后期的查詢比較;然后,選擇指定文件夾內(nèi)的部分或全部柵格圖像文件;最后,依次解析所選柵格圖像文件的文件名,在“目標(biāo)表”中查詢“匹配字段”取值等于該文件名的記錄,如果返回結(jié)果非空,則將該柵格圖像文件賦給返回記錄的柵格字段,直到處理完全部所選柵格文件為止。

        2.2 插件實(shí)現(xiàn)過程

        (1)創(chuàng)建項(xiàng)目:在Visual Studio 2010中,根據(jù)ESRI提供的ArcGIS Desktop Add-ins模板創(chuàng)建一個(gè)名稱為“iLoader”的ArcMAP add-in項(xiàng)目,向該項(xiàng)目中添加組成該插件的相應(yīng)元素并設(shè)置名稱、圖片等參數(shù),主要包括2個(gè)組合框元素、2個(gè)按鈕元素、1個(gè)可??看翱谠睾?個(gè)工具欄元素。前5個(gè)是基本交互類元素,最后1個(gè)是容器類元素, 用來存放前4個(gè)元素??赏?看翱谏显偬砑右粋€(gè)DataGridView控件,用來記錄柵格文件加載結(jié)果。

        (2)編寫代碼:在上述前5個(gè)擴(kuò)展元素對(duì)應(yīng)的類文件中輸入相應(yīng)代碼,通過ArcMAP、Addin、thisAddin、IFeatureLayer、ITable、IQueryFilter、IRasterDataset、IRasterValue、IRowBuffer等對(duì)象或接口,實(shí)現(xiàn)擴(kuò)展元素之間的交互以及表、要素類的查詢與修改。

        (3)編譯調(diào)試:第一次編譯調(diào)試Addin程序時(shí),應(yīng)先將其附加到已啟動(dòng)的ArcMAP主程序上。在關(guān)閉主程序之后,重新啟動(dòng)Addin程序,并將其添加到ArcMAP中,則可以開始反復(fù)多次的調(diào)試糾正工作。在確保運(yùn)行正確無誤后,就可對(duì)外發(fā)布、安裝編譯生成的esriAddIn文件。該文件是一個(gè)包含配置文件、程序集和資源文件的zip壓縮包,通過雙擊就可以安裝部署到需要的計(jì)算機(jī)上,也可通過ArcMap的“加載項(xiàng)管理器”進(jìn)行查看和卸載所安裝的Addin程序。

        2.3 主要功能實(shí)現(xiàn)代碼

        (1)獲取ArcMAP文檔中的表或要素類。

        //獲取表。

        IStandaloneTableCollection iSTC;

        iSTC=ArcMap.Document.FocusMap as IStandaloneTableCollection;

        IStandaloneTable iSTable;

        iSTable=iSTC.getStandaloneTable(i);

        ITable iTable=iSTable.Table;

        //獲取要素類對(duì)應(yīng)的表。

        IFeatureLayer iFlayer;

        iFlayer=ArcMap.Document.FocusMap.getLayer(i)as IFeatureLayer;

        if (iFlayer !=null)

        {

        ITable iTable=(ITable) iFlayer.FeatureClass;

        //如果iFlayer為Null,則不是要素類。

        }

        (2)獲取插件包含的擴(kuò)展元素。

        //獲取類名為“C2ComBox”組合框。

        C2ComBox cBox2;

        cBox2=AddIn.FromID(ThisAddIn. IDs.C2ComBox);

        //獲取類名為“C5DWnd”的可停靠窗口。

        UID uID=new UIDClass();

        uID=ThisAddIn.IDs.C5DWnd.ToUID();

        var dWnd=ArcMap.DockableWindowManager. GetDockableWindow(uID);

        //獲取停靠窗口上的DataGridView控件。

        DataGridView dGV;

        dGV=AddIn.FromID< C5DWnd.AddinImpl> (Th-isAddIn.IDs.C5DWnd).DataGrid;

        (3)判斷Geodatabase類型。

        Geodatabase有個(gè)人、文件和ArcSDE三種類型,不同類型的Geodatabase其查詢語(yǔ)法不同,因此在對(duì)表或要素類進(jìn)行查詢前,應(yīng)先判斷其所在數(shù)據(jù)庫(kù)的類型,以便輸入符合語(yǔ)法的查詢語(yǔ)句。

        //將表接口變量iSTable轉(zhuǎn)化為數(shù)據(jù)集接口。

        IDataset iDSet=iSTable as IDataset;

        //獲取數(shù)據(jù)集所在工作空間。

        IWorkspace iWSpace=iDSet.Workspace;

        //判斷工作空間的后綴名,并設(shè)置相應(yīng)的表達(dá)式。

        string wsName=iWSpace.PathName.Substring (iWSpace.PathName.Length-4)

        string SQLExp="";

        if (wsName==".mdb")

        {

        //個(gè)人地理數(shù)據(jù)庫(kù)查詢語(yǔ)句一般形式

        SQLExp="[字段名]='字段值'";

        }

        else if (wsName==".gdb")

        {

        //文件地理數(shù)據(jù)庫(kù)查詢語(yǔ)句一般形式

        SQLExp="字段名='字段值'";

        }

        else

        {

        //個(gè)ArcSDE地理數(shù)據(jù)庫(kù)查詢語(yǔ)句一般形式

        SQLExp=@"""字段名""='字段值'";

        }

        (4)查詢記錄,并修改柵格字段的值。

        //將一般形式的查詢語(yǔ)句轉(zhuǎn)換為具體的查詢語(yǔ)句。

        SQLExp=SQLExp.Replace(“字段名”, mFldName);//mFldName為所選匹配字段名稱。

        SQLExp=SQLExp.Replace(“字段值”,imageName);//imageName為不包括擴(kuò)展名的所選圖像文件名稱。

        IQueryFilter iQFilter=new QueryFilterClass();

        iQFilter.WhereClause=SQLExp;

        int rowCount=iTable.RowCount(iQFilter);

        if (rowCount> 0)

        {

        IWorkspaceFactory iWF;

        iWF=new RasterWorkspaceFactoryClass();

        IRasterWorkspace iRW=iWF.OpenFromFile (imagePath, 0) as IRasterWorkspace;//imagePath為所選柵格圖像文件的路徑目錄。

        IRasterDataset iRD=iRW.OpenRasterDataset (imageNameExt);//imageNameExt為包括擴(kuò)展名的所選圖像文件名稱。

        IRasterValue iRV=new RasterValueClass();

        iRV.RasterDataset=iRD;

        IRowBuffer iRB=iTable.CreateRowBuffer();

        //iTable為所選的表或要素類轉(zhuǎn)化后的表。

        iRB.setValue(rFldIndex, iRV);

        //rFldIndex為所選表中柵格字段的索引值。

        iTable.UpdateSearchedRows(iQFilter, iRB);

        Marshal.ReleaseComObject(iQFilter);

        }

        3 應(yīng)用與驗(yàn)證

        本插件已在江蘇師范大學(xué)Geodatabase建設(shè)中得到應(yīng)用,主要用來加載建筑物、景觀等要素類中所需的平面或全景柵格數(shù)據(jù)。這兩個(gè)要素類(可儲(chǔ)存幾何圖形的特殊表)的數(shù)據(jù)組織結(jié)構(gòu)形式分別見表1和表2。

        表1 建筑物要素類數(shù)據(jù)組織結(jié)構(gòu)Table 1 Data structure of building features

        表2 景觀要素類數(shù)據(jù)組織結(jié)構(gòu)Table 2 Data structure of landscape features

        對(duì)于上述要素類,主要采用如下方式采集加載所需數(shù)據(jù):首先,利用ArcGIS的“加載數(shù)據(jù)”功能加載通過實(shí)地測(cè)量獲得的AutoCAD地圖數(shù)據(jù),即要素類所需的幾何圖形與屬性數(shù)據(jù);然后,通過實(shí)地拍照方式采集各要素相關(guān)的柵格圖像數(shù)據(jù),并進(jìn)行拼接、編輯、按要素名稱命名等處理;最后,利用所開發(fā)的iLoader插件工具批量加載各要素所需的柵格數(shù)據(jù)。

        為驗(yàn)證本插件的優(yōu)越性,筆者以上述兩個(gè)要素類為例,對(duì)柵格數(shù)據(jù)人工和批量?jī)煞N加載方式進(jìn)行了對(duì)比實(shí)驗(yàn)分析,具體結(jié)果見表3。

        表3 人工與批量加載對(duì)比實(shí)驗(yàn)結(jié)果Table 3 Test results of two uploading methods

        相對(duì)于人工手動(dòng)逐項(xiàng)加載方式,本文所開發(fā)的批量加載方式具有交互少、效率高等明顯優(yōu)勢(shì),加載效率至少可提高50倍以上。

        4 結(jié)束語(yǔ)

        作為一個(gè)全系列、多層次、跨平臺(tái)、可伸縮的GIS產(chǎn)品平臺(tái),ArcGIS力爭(zhēng)為各類用戶提供全面的解決方案,雖然新技術(shù)、新方法、新工具層出不窮,但遇到特殊情況時(shí)這些并非是萬能的,在實(shí)際應(yīng)用中常常需要用戶進(jìn)行針對(duì)性的整合、擴(kuò)展與改造。本文針對(duì)Geodatabase表與要素類加載柵格數(shù)據(jù)的不足,采用Addin技術(shù)設(shè)計(jì)開發(fā)了一個(gè)批量加載插件,進(jìn)一步驗(yàn)證了Addin技術(shù)易創(chuàng)建、易安裝、易共享、更安全的特征,大大提高了加載效率。

        猜你喜歡
        功能
        拆解復(fù)雜功能
        鐘表(2023年5期)2023-10-27 04:20:44
        也談詩(shī)的“功能”
        基層弄虛作假的“新功能取向”
        深刻理解功能關(guān)系
        鉗把功能創(chuàng)新實(shí)踐應(yīng)用
        關(guān)于非首都功能疏解的幾點(diǎn)思考
        基于PMC窗口功能實(shí)現(xiàn)設(shè)備同步刷刀功能
        懷孕了,凝血功能怎么變?
        媽媽寶寶(2017年2期)2017-02-21 01:21:24
        “簡(jiǎn)直”和“幾乎”的表達(dá)功能
        中西醫(yī)結(jié)合治療甲狀腺功能亢進(jìn)癥31例
        99久久精品国产亚洲av天| 亚洲av无码不卡久久| 97超级碰碰人妻中文字幕 | 六月婷婷久香在线视频| 亚洲精品有码在线观看| 一本大道综合久久丝袜精品| 国产一区二区三区不卡在线观看| 少妇高潮流白浆在线观看| 亚洲一区日韩无码| 中文字幕精品永久在线| 日本熟女人妻一区二区| 日韩人妻无码精品久久久不卡| 国产曰批免费视频播放免费s| 国产在线一区二区视频免费观看| 麻豆精品一区二区三区| 亚洲成在人线av品善网好看| 波多野结衣中文字幕在线视频| 亚洲精品日本久久久中文字幕| 亚洲视频免费一区二区| 亚洲 自拍 另类小说综合图区| 午夜一级在线| 亚洲女同恋中文一区二区| 老熟妇乱子交视频一区| 丁香花在线影院观看在线播放| 一区二区三区日本大片| 日韩激情视频一区在线观看| 精品国产综合区久久久久久| 日韩精品成人区中文字幕| 欧洲女人性开放免费网站| 在线精品日韩一区二区三区| 蜜桃视频网址在线观看| 成人麻豆日韩在无码视频| 欧美白人最猛性xxxxx| 日产精品一区二区免费| 人妻免费一区二区三区免费| 国产精品亚洲一区二区三区在线| 亚洲精品中文字幕不卡在线| 精品人妻一区二区三区狼人| 婷婷久久香蕉五月综合加勒比| 国产在线一区观看| 黄色中文字幕视频网站|