版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
GIS工程設(shè)計開發(fā)綜合實習(xí)、黃長青——基于C#.NET和AO/AE的GIS設(shè)計與開發(fā)GIS工程設(shè)計開發(fā)綜合實習(xí)、黃長青——基于C#.NET和AO2Part5:ArcGISEngine二次開發(fā)入門2Part5:ArcGISEngine二次開發(fā)入門3ArcGISEngine二次開發(fā)入門5.1ArcGISEngine簡介5.2ArcGISEngine開發(fā)起步
5.3屬性查詢5.4空間查詢5.5BaseCommand開發(fā)實例5.6BaseTool開發(fā)實例5.7通過代碼添加圖層5.8構(gòu)建一個簡單的GIS應(yīng)用5.9問題解決方法及幫助文檔的使用3ArcGISEngine二次開發(fā)入門5.1Arc5.1ArcGISEngine簡介ArcGISEngine的功能十分強大。作為ArcGISEngine開發(fā)者,您可以實現(xiàn)以下列出的和其他更多的功能,這包括:用多個圖層來顯示地圖,例如道路、水系、邊界等地圖的漫游和縮放地圖上要素的確認地圖上要素的查詢和定位根據(jù)屬性值顯示注記根據(jù)航片或者衛(wèi)片顯示圖像繪制幾何圖形,例如點、線、弧、多邊形添加描述性的文字5.1ArcGISEngine簡介ArcGISEn沿著線選擇或者選擇矩形、某一范圍內(nèi)、多邊形等內(nèi)部的要素選擇距離在某一范圍內(nèi)的要素利用SQL語言來尋找和選擇要素利用專題地圖來渲染要素,如唯一值法、分級法和點狀密度法動態(tài)顯示實時地圖或者時序數(shù)據(jù)根據(jù)地理編碼來尋找位置轉(zhuǎn)換您地圖的坐標系根據(jù)幾何操作來生成緩沖區(qū)、計算差值,或者進行求交、求并等運算編輯要素形狀或者旋轉(zhuǎn)地圖創(chuàng)建并更新要素的幾何形狀及其屬性沿著線選擇或者選擇矩形、某一范圍內(nèi)、多邊形等內(nèi)部的要素編輯要素(EditingFeatures)ArcGISEngine開發(fā)包讓您構(gòu)建出能創(chuàng)建、修改和刪除geodatabase中矢量要素或者shapefile文件的應(yīng)用程序。標準的ArcGISEngineRuntime能夠讓編輯shapefile文件或者personalgeodatabase中簡單要素的程序運行。然而,要構(gòu)建企業(yè)級geodatabase的全部功能,就需要ArcGISEngineRuntime中的GeodatabaseUpdate選項。編輯要素(EditingFeatures)ArcGISE空間建模和分析空間建模和通過增加ArcGISEngineRuntime中的Spatial選項,您能夠擴展ArcGISEngine的功能。這個選項(Spatial選項)能提供一系列強勁的空間建模和分析功能。您能夠創(chuàng)建、查詢、表達和分析基于象元的柵格數(shù)據(jù),能夠集成柵格和矢量數(shù)據(jù)進行分析,能夠從已有數(shù)據(jù)挖掘出新的信息,能夠從多層數(shù)據(jù)中查詢信息,能夠在ArcGISEngine應(yīng)用程序中完美集成基于象元的柵格數(shù)據(jù)和矢量數(shù)據(jù)??臻g建模和分析空間建模和通過增加ArcGISEngine三維可視化等ArcGISEngineRuntime中的3D選項讓您通過使用Scene和Globe控件來有效的表達和分析區(qū)域及全球數(shù)據(jù)。例如,您能夠:顯示Scene和Globe文檔展示交互性的透視圖,包括漫游、縮放、旋轉(zhuǎn)、傾斜、模擬飛行以便于表達和分析顯示真實世界的表面要素,例如樓房展示視域和可見范圍分析、場景高度內(nèi)插、剖面分析和最短距離分析三維可視化等ArcGISEngineRuntime中的3這個例子將引導(dǎo)您創(chuàng)建第一個簡單的地圖顯示程序,并添加基本的縮放和漫游功能。如果您之前沒有接觸過ArcGISEngine的開發(fā),那么這個例子是您邁入ArcGISEngine二次開發(fā)大門的極好例子,如果您之前沒有接觸C#.NET,也無需擔(dān)心,這個例子將從零開始引導(dǎo)您一步一步完成任務(wù)。5.2ArcGISEngine開發(fā)起步——第一個簡單的地圖顯示程序這個例子將引導(dǎo)您創(chuàng)建第一個簡單的地圖顯示程序,并添加基本的縮首先打開MicrosoftVisualStudio2005,點擊菜單欄中的“文件”—>“新建項目”,在彈出的對話框中選擇新建一個C#的Windows應(yīng)用程序,之后更改項目名稱為“MapView”,更改文件的路徑為個人實習(xí)文件夾,點擊“確定”即可。創(chuàng)建一個新的工程圖23新建項目對話框首先打開MicrosoftVisualStudio20點擊編譯器最左側(cè)的“工具箱”,在彈出的選擇項中找到“ArcGISWindowsForms”項,單擊其中的MapControl,之后在Form1的空白處單擊鼠標左鍵不放并拖拽鼠標,直到調(diào)整MapControl到合適的大小再松開鼠標(您也可以直接在工具箱中雙擊MapControl,該控件則會自動加入到Form1中)。用同樣的方法,再將LicenseControl添加到Form1中。添加控件及引用圖24工具箱點擊編譯器最左側(cè)的“工具箱”,在彈出的選擇項中找到“ArcG如果您在工具箱中找不到MapControl,則請依次嘗試以下兩種解決方案。首先單擊工具欄,待工具箱彈出之后,在工具箱的任意位置上單擊鼠標右鍵,從彈出菜單中選擇“重置工具箱”。如果這一步操作之后仍然無法看到MapControl,則請滑動工具欄右側(cè)的滾動條至最底部,找到“常規(guī)”選項卡,然后在“常規(guī)”選項卡上單擊鼠標右鍵,在彈出菜單中單擊“選擇項(I)…”,在彈出的對話框中找到“AxLicenseControl”和“AxMapControl”,將這兩項前的復(fù)選框打上勾,最后點擊確定即可(如果在“.NETFramework組件”這個面板中找不到這兩項,則選擇“COM組件”面板,在“ESRILicenseControl”和“ESRIMapControl”前面打勾)。圖25重置工具箱如果您在工具箱中找不到MapControl,則請依次嘗試以下圖26選擇項…圖27選擇工具箱項圖26選擇項…圖27選擇工具箱項圖28選擇工具箱項圖28選擇工具箱項添加好MapControl和LicenseControl之后,調(diào)整Form1和MapControl的位置與大小,如下圖所示:圖29窗體布局添加好MapControl和LicenseControl之后在MapControl上單擊鼠標右鍵,選擇“屬性”,則會彈出MapControl的屬性設(shè)置面板,在之前也介紹過,通過這個面板可以完成許多簡單的工作。如圖所示,點擊“Map”面板,之后點擊按鈕,在彈出的對話框中選擇下圖所示的路徑(注:筆者的ArcGIS安裝在D盤,若您的ArcGIS裝在別的盤符,請做相應(yīng)修改),再在此路徑下選擇“States”,點擊“Open”。之后在MapControl的屬性頁上點擊“確定”即可。添加地圖圖30文件添加路徑在MapControl上單擊鼠標右鍵,選擇“屬性”,則會彈出至此,我們已經(jīng)完成了一個最簡單的地圖顯示程序,下面一起來看一下成果吧。點擊“啟動調(diào)試”按鈕(或者在“調(diào)試”菜單下選擇相應(yīng)命令,或者按鍵盤的F5鍵),可以得到如下的運行結(jié)果。圖31“啟動調(diào)試”按鈕至此,我們已經(jīng)完成了一個最簡單的地圖顯示程序,下面一起來看一圖32初次運行結(jié)果圖32初次運行結(jié)果我們沒有書寫任何代碼,就得到了一個最簡單的地圖顯示程序。但這個程序還不能與用戶交互,下一步我們需要添加一些代碼,讓程序能響應(yīng)用戶的鼠標,完成放大和全圖顯示的功能。添加基本的代碼圖33MapControl控件支持的所有方法我們沒有書寫任何代碼,就得到了一個最簡單的地圖顯示程序。但這雙擊MapControl控件,可以進入代碼編輯界面。從窗口上方的下拉列表框中,我們能夠看到MapControl能夠響應(yīng)的所有事件(關(guān)于每個事件的詳細使用方法等請參見幫助系統(tǒng),第六章對幫助系統(tǒng)有更加詳細的介紹)。雙擊MapControl進入代碼編輯界面的時候,默認的是“OnMouseDown”事件,下一步就需要在這個事件中添加響應(yīng)鼠標的相關(guān)代碼。請您在PrivateSubAxMapControl1_OnMouseDown函數(shù)中添加如下代碼:
if(e.button==1)this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();elseif(e.button==2)this.axMapControl1.Extent=this.axMapControl1.FullExtent;雙擊MapControl控件,可以進入代碼編輯界面。從窗口上再次運行程序,鼠標左鍵在地圖上拉框可以實現(xiàn)地圖的放大功能,而右鍵單擊地圖則會還原地圖的全圖顯示。圖34任意比例尺放大功能再次運行程序,鼠標左鍵在地圖上拉框可以實現(xiàn)地圖的放大功能,而如果將代碼替換如下,則能實現(xiàn)左鍵放大,右鍵漫游的功能。if(e.button==1)this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();elseif(e.button==2)this.axMapControl1.Pan();如果將代碼替換如下,則能實現(xiàn)左鍵放大,右鍵漫游的功能。下面我們依次來看看這些代碼都代表什么意思。首先看來第一段:if(e.button==1)this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();elseif(e.button==2)this.axMapControl1.Extent=this.axMapControl1.FullExtent;這個代碼是一個IfElse條件語句,關(guān)于“e”的詳細定義及其中包含的各參數(shù),請參考幫助中與“IMapControlEvents2,OnMouseDownEventHandlerdelegate”關(guān)鍵字相關(guān)的內(nèi)容。代碼解釋下面我們依次來看看這些代碼都代表什么意思。首先看來第一段:代可以根據(jù)e中包含的“button”值來判斷鼠標的單擊操作是來自何處,若button值為1,則為鼠標左鍵,2代表鼠標右鍵,4代表鼠標中鍵。當判斷得到是鼠標左鍵單擊時,執(zhí)行“AxMapControl1.Extent=AxMapControl1.TrackRectangle”這條語句,其中,等號右側(cè)是調(diào)用了“TrackRectangle”方法,這個方法是在地圖上拖拽出一個矩形,之后將這個矩形賦值給當前地圖的顯示區(qū)域(Extent),這樣就實現(xiàn)了地圖的放大功能。類似的,若鼠標右鍵單擊,則將全圖范圍賦值給當前的顯示范圍,實現(xiàn)了地圖的全圖顯示功能。第二段代碼與第一段結(jié)構(gòu)一樣,只是在右鍵的相應(yīng)事件上略有不同,這是調(diào)用了“Pan”方法,實現(xiàn)了地圖的漫游功能??梢愿鶕?jù)e中包含的“button”值來判斷鼠標的單擊操作是來通過這個例子,我們制作出了一個最簡單的地圖瀏覽程序MapView,并能響應(yīng)一些基本的鼠標操作。在MapControl的屬性頁中,其實還有許多內(nèi)容您可以嘗試,例如在“General”面板中可以直接加入地圖文件(*.mxd或者*.mxt),您也可以利用剛才的方式一次性多加入一些圖層而不僅僅加入“States”一個,同時可以更改各圖層的疊放次序,也可以在“Data”面板中設(shè)置地圖的旋轉(zhuǎn)角度(Rotation)等,您還可以設(shè)置MapControl的顯示方式,是否支持地圖的預(yù)覽功能,邊框樣式等等。您可以做一些嘗試,看看能得到哪些有趣的結(jié)果,這些嘗試對您今后熟悉ArcGISEngine的開發(fā)是有一定幫助的。如果需要重置MapControl,只需要點擊“Data”面板中的“Reset”按鈕。當您完成了這個例子,并做了一些積極的嘗試之后,您就可以接著學(xué)習(xí)下一個小節(jié)的內(nèi)容了。小結(jié)通過這個例子,我們制作出了一個最簡單的地圖瀏覽程序MapVi查詢是GIS中非常重要的一個功能,下面將分別介紹屬性查詢和空間查詢的制作方法。5.3屬性查詢添加控件如果上一小節(jié)的工程已經(jīng)關(guān)閉,則將其打開,如果您之后又在MapControl中添加了一些別的數(shù)據(jù),請將其刪除,只保留一個“states”圖層,請務(wù)必注意這一步,這直接關(guān)系到您下面的工作能否順利進行。用之前講過的方式,在窗體中添加一個Label和一個TextBox。將Label的“Text”屬性修改為“StateName”,結(jié)果如下:圖35Label控件和TextBox控件查詢是GIS中非常重要的一個功能,下面將分別介紹屬性查詢和空首先添加引用。點擊菜單欄上的“項目”—>“添加引用”,在彈出的對話框中同時選擇“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”(選擇的時候按下Ctrl鍵以同時選擇多個),點擊確定。之后雙擊TextBox1控件,進入代碼編輯界面。在代碼編輯區(qū)域的最上方輸入以下內(nèi)容:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geodatabase;如下圖所示:添加引用和代碼圖36引用添加位置首先添加引用。點擊菜單欄上的“項目”—>“添加引用”,在彈出圖37添加引用對話框圖37添加引用對話框之后在控件TextBox的事件中選擇KeyUp,在KeyUp事件中添加以下代碼:圖38KeyPress方法之后在控件TextBox的事件中選擇KeyUp,在KeyUp
if(e.KeyCode==Keys.Enter){//定義圖層,要素游標,查詢過濾器,要素
IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;IQueryFilterpQueryFilter;IFeaturepFeature;//獲取圖層
pFeatureLayer=this.axMapControl1.Map.get_Layer(0)asIFeatureLayer;//如果圖層名稱不是states,程序退出
if(pFeatureLayer.Name!="states")return;//清除上次查詢結(jié)果
this.axMapControl1.Map.ClearSelection();//pQueryFilter的實例化
pQueryFilter=newQueryFilterClass();//設(shè)置查詢過濾條件
pQueryFilter.WhereClause="STATE_NAME='"+txtStateName.Text+"'";
//查詢pFeatureCursor=pFeatureLayer.Search(pQueryFilter,true);//獲取查詢到的要素
pFeature=pFeatureCursor.NextFeature();//判斷是否獲取到要素
if(pFeature!=null){//選擇要素
this.axMapControl1.Map.SelectFeature(pFeatureLayer,pFeature);//放大到要素
this.axMapControl1.Extent=pFeature.Shape.Envelope;}else{//沒有得到pFeature的提示
MessageBox.Show("沒有找到名為"+txtStateName.Text+"的州","提示");}}}//查詢運行程序,分別向編輯框中輸入“Texas”和“RS”,鍵入回車,如下圖所示:圖39Texas州查詢結(jié)果運行程序,分別向編輯框中輸入“Texas”和“RS”,鍵入回圖40RS查詢結(jié)果圖40RS查詢結(jié)果
if(e.KeyCode==Keys.Enter)上述代碼是一個判斷語句,即當用戶輸入回車的時候,開始進行查詢。下面兩行代碼是定義查詢的范圍,默認為上一小節(jié)中添加的圖層“states”,如果找不到這個圖層則自動退出。//獲取圖層
pFeatureLayer=this.axMapControl1.Map.get_Layer(0)asIFeatureLayer;//如果圖層名稱不是states,程序退出
if(pFeatureLayer.Name!="states")return;//清除上次查詢結(jié)果
this.axMapControl1.Map.ClearSelection();這一部分是生成一個新的查詢器,選擇條件(WhereClause)就是檢索是否有與用戶輸入相符的州,并將結(jié)果從查詢得到的pCursor中讀取出來。代碼解釋if(e.KeyCode==Keys.Enter)代碼解//判斷是否獲取到要素
if(pFeature!=null){//選擇要素
this.axMapControl1.Map.SelectFeature(pFeatureLayer,pFeature);//放大到要素
this.axMapControl1.Extent=pFeature.Shape.Envelope;}else{//沒有得到pFeature的提示
MessageBox.Show("沒有找到名為"+txtStateName.Text+"的州","提示");}
這一部分是一個判斷語句,若查詢得到的結(jié)果為空,則刷新地圖,彈出對話框通知用戶沒有查詢到結(jié)果,并退出程序。如果查詢得到的結(jié)果不為空,則將這個結(jié)果加入地圖的選擇集,并將地圖的顯示范圍定為查詢結(jié)果的外輪廓,這樣得到的州將高亮顯示同時居中放大到屏幕中心。//判斷是否獲取到要素這一部分中,我們接觸到了基本的屬性查詢。但是在這個例子中,我們不能實現(xiàn)對屬性表中任意屬性字段的查詢(在這個程序中,我們只能查詢州名——STATE_NAME,而不能對別的字段進行查詢),而且這個查詢不支持模糊查詢。為了使查詢變的更加豐富,更加人性化,請您參考IQueryFilter接口中WhereClause屬性的設(shè)置方法,拓展WhereClause可以得到許多有趣的結(jié)果。在書寫代碼的過程中,對任何有疑問的地方,或者您想要拓展的位置,都可以在幫助系統(tǒng)中查詢相關(guān)的接口和屬性,查看最原始的定義,幫助系統(tǒng)中的解釋和定義對于您熟悉ArcObjects,熟悉ArcGISEngine的二次開發(fā)以及后續(xù)的工作都是十分重要的,請一定不要忽視這個環(huán)節(jié)。如果您已經(jīng)嘗試了一些變化,或者對本小節(jié)的內(nèi)容比較熟悉了,則可以進入下一小節(jié)的學(xué)習(xí)。小結(jié)這一部分中,我們接觸到了基本的屬性查詢。但是在這個例子中,我上一小節(jié)我們已經(jīng)學(xué)習(xí)了如何進行屬性查詢,在這一小節(jié)中,我們將繼續(xù)學(xué)習(xí)GIS中的另一種查詢方式——空間查詢。如果上一小節(jié)的工程已經(jīng)關(guān)閉,則將其打開,如果您之后又在MapControl中添加了一些別的數(shù)據(jù),請將其刪除,只保留一個“states”圖層,請務(wù)必注意這一步,這直接關(guān)系到您下面的工作能否順利進行。我們接著上一小節(jié)的內(nèi)容繼續(xù)完善。在窗體中添加一個Button,將其Text屬性修改為“點查詢”。5.4空間查詢添加控件圖41添加“點查詢”按鈕上一小節(jié)我們已經(jīng)學(xué)習(xí)了如何進行屬性查詢,在這一小節(jié)中,我們將利用上一小節(jié)講的方式,添加引用“ESRI.ArcGIS.Geometry”,并在類中添加一個全局變量nMouseFlag,如下圖所示:添加引用和代碼圖42添加引用“ESRI.ArcGIS.Geometry”利用上一小節(jié)講的方式,添加引用“ESRI.ArcGIS.Ge之后在類中添加一個公共函數(shù),用來根據(jù)屏幕像素計算實際的地理距離privatedoubleConvertPixelToMapUnits(IActiveViewactiveView,doublepixelUnits){doublerealWorldDiaplayExtent;intpixelExtent;doublesizeOfOnePixel;doublemapUnits;//獲取設(shè)備中視圖顯示寬度,即像素個數(shù)pixelExtent=activeView.ScreenDisplay.DisplayTransformation.get_DeviceFrame().right-activeView.ScreenDisplay.DisplayTransformation.get_DeviceFrame().left;//獲取地圖坐標系中地圖顯示范圍
realWorldDiaplayExtent=activeView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;//每個像素大小代表的實際距離
sizeOfOnePixel=realWorldDiaplayExtent/pixelExtent;//地理距離
mapUnits=pixelUnits*sizeOfOnePixel;returnmapUnits;}之后在類中添加一個公共函數(shù),用來根據(jù)屏幕像素計算實際的地理距此后,雙擊Button1,進入Button的Click事件,向其中添加如下代碼://標記點查詢
mMouseFlag=1;//設(shè)置鼠標形狀
this.axMapControl1.MousePointer=ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerCrosshair;(注:上兩行代碼應(yīng)該書寫在一行,由于空間有限,這里寫為兩行)最后將MapControl控件的OnMouseDown事件中已有的代碼清除,替換為以下代碼:if(mMouseFlag==1){IFeatureLayerpFeatureLayer;IFeatureClasspFeatureClass;//獲取圖層和要素類,為空時返回
pFeatureLayer=this.axMapControl1.Map.get_Layer(0)asIFeatureLayer;if(pFeatureLayer.Name!="states")return;pFeatureClass=pFeatureLayer.FeatureClass;if(pFeatureClass==null)return;IActiveViewpActiveView;IPointpPoint;doublelength;
此后,雙擊Button1,進入Button的Click事件,//獲取視圖范圍
pActiveView=this.axMapControl1.ActiveView;//獲取鼠標點擊屏幕坐標
pPoint=pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x,e.y);//2個像素大小的屏幕距離轉(zhuǎn)換為地圖距離
length=ConvertPixelToMapUnits(pActiveView,2);ITopologicalOperatorpTopoOperator;IGeometrypGeoBuffer;ISpatialFilterpSpatialFilter;//根據(jù)緩沖半徑生成空間過濾器
pTopoOperator=pPointasITopologicalOperator;pGeoBuffer=pTopoOperator.Buffer(length);pSpatialFilter=newSpatialFilterClass();pSpatialFilter.Geometry=pGeoBuffer;//根據(jù)圖層類型選擇緩沖方式
switch(pFeatureClass.ShapeType){caseesriGeometryType.esriGeometryPoint:pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;break;caseesriGeometryType.esriGeometryPolyline:pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;break;caseesriGeometryType.esriGeometryPolygon:pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;break;}
//獲取視圖范圍//定義空間過濾器的空間字段
pSpatialFilter.GeometryField=pFeatureClass.ShapeFieldName;IQueryFilterpQueryFilter;IFeatureCursorpFeatureCursor;IFeaturepFeature;//利用要素過濾器查詢要素
pQueryFilter=pSpatialFilterasIQueryFilter;pFeatureCursor=pFeatureLayer.Search(pQueryFilter,true);pFeature=pFeatureCursor.NextFeature();intfieldIndex;if(pFeature!=null){//選擇指定要素
this.axMapControl1.Map.ClearSelection();this.axMapControl1.Map.SelectFeature((ILayer)pFeatureLayer,pFeature);this.axMapControl1.Refresh();fieldIndex=pFeature.Fields.FindField("STATE_NAME");MessageBox.Show("查找到“"+pFeature.get_Value(fieldIndex)+"”","提示");}}ArcGIS-Engine二次開發(fā)入門課件運行程序,結(jié)果如右圖所示:
圖43空間查詢運行結(jié)果圖43空間查詢運行結(jié)果距離轉(zhuǎn)換函數(shù)請您自行參看幫助系統(tǒng)中對相關(guān)接口的具體定義和解釋。Button1的Click事件中是將nMouseFlag設(shè)置為1,并將鼠標在MapControl上的形狀改變?yōu)槭纸z狀。//獲取視圖范圍
pActiveView=this.axMapControl1.ActiveView;//獲取鼠標點擊屏幕坐標pPoint=pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x,e.y);//屏幕距離轉(zhuǎn)換為地圖距離
length=ConvertPixelToMapUnits(pActiveView,2);上述代碼是在MapControl的OnMouseDown事件中,當您單擊鼠標左鍵的時候,將屏幕上的點轉(zhuǎn)換成地圖上的點(關(guān)鍵在于坐標值的轉(zhuǎn)換),方便后續(xù)操作。//根據(jù)緩沖半徑生成空間過濾器
pTopoOperator=pPointasITopologicalOperator;pGeoBuffer=pTopoOperator.Buffer(length);pSpatialFilter=newSpatialFilterClass();pSpatialFilter.Geometry=pGeoBuffer;代碼解釋距離轉(zhuǎn)換函數(shù)請您自行參看幫助系統(tǒng)中對相關(guān)接口的具體定義和解釋這一部分是將2個像素的距離轉(zhuǎn)換成實際的地理距離,并以這個距離為半徑,上一步生成的點為中心,生成一個緩沖區(qū)。這一部分是將2個像素的距離轉(zhuǎn)換成實際的地理距離,并以這個距離上述代碼是設(shè)置pSpatialFilter的各項參數(shù),供后續(xù)查詢,包括空間查詢的幾何形狀(之前生成的緩沖區(qū)),空間查詢的方式(相交,包含等)以及Shape字段。這兩句代碼是找出“STATE_NAME”所在的列數(shù),并將其顯示出來。上述代碼是設(shè)置pSpatialFilter的各項參數(shù),供后續(xù)在本節(jié)中我們完成更多的空間查詢功能,其中有點查詢、線查詢、矩形查詢、圓查詢新建一個C#.Net工程,向工程中添加控件,如下圖所示:其中包括MapControl,4個Button,一個TextBox進一步完善空間查詢在本節(jié)中我們完成更多的空間查詢功能,其中有點查詢、線查詢、矩通過在控件屬性中添加地圖的方法,向Mapcontrol中添加例子數(shù)據(jù)。(例子數(shù)據(jù)是位于World文件夾下的Continents.lyr)如下圖所示:
下面我們在MainForm的代碼頁添加空間查詢的函數(shù)。本例中我們需要添加ESRI.ArcGIS.Carto、ESRI.ArcGIS.Geometry、ESRI.ArcGIS.Geodatabase、ESRI.ArcGIS.Controls四個個命名空間,并且我們?nèi)匀恍枰瞎?jié)中的ConvertPixelToMapUnits(IActiveViewactiveView,doublepixelUnits)函數(shù),請自行添加??臻g查詢函數(shù)代碼如下:
///<summary>///空間查詢///</summary>///<paramname="mapControl">MapControl</param>///<paramname="geometry">空間查詢方式</param>///<paramname="fieldN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46932-2025民航北斗授時系統(tǒng)技術(shù)規(guī)范
- 江蘇省南京市鼓樓區(qū)2025-2026學(xué)年上學(xué)期期末語文四年級試卷(無答案)
- 飛科介紹教學(xué)課件
- 2026湖南婁底市婁星區(qū)青年就業(yè)見習(xí)單位第二批招募見習(xí)人員22人參考考試題庫及答案解析
- 2026山東德州市事業(yè)單位招聘初級綜合類崗位人員參考考試題庫及答案解析
- 2026福建廈門工學(xué)院面向臺灣地區(qū)招聘高層次人才參考考試題庫及答案解析
- 2026春季夢想靠岸招商銀行江門分行校園招聘筆試參考題庫及答案解析
- 洗浴中心策劃活動方案(3篇)
- 航空總部活動策劃方案(3篇)
- 裝飾校園活動策劃方案(3篇)
- 2025-2026年蘇教版初一歷史上冊期末熱點題庫及完整答案
- 規(guī)范園區(qū)環(huán)保工作制度
- 藥理學(xué)試題中國藥科大學(xué)
- 卓越項目交付之道
- (人教版)八年級物理下冊第八章《運動和力》單元測試卷(原卷版)
- 2026屆新高考語文熱點沖刺復(fù)習(xí) 賞析小說語言-理解重要語句含意
- 武術(shù)學(xué)校體育器材項目 投標方案(技術(shù)方案)
- DL∕T 1057-2023 自動跟蹤補償消弧線圈成套裝置技術(shù)條件
- 市場營銷部門主管聘用協(xié)議
- 期貨投資說課市公開課一等獎省賽課微課金獎?wù)n件
- (詳盡多場合)中標方支付招標代理費合同范本
評論
0/150
提交評論