




免費預覽已結(jié)束,剩余73頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ArcGIS Engine二次開發(fā)提高篇1 縮略圖(鷹眼)鷹眼功能是GIS的主要功能之一,當?shù)貓D范圍很大時,它可以很好的為用戶指明當前地圖的范圍。在本小節(jié)中我們將學習如何制作這種鷹眼。1.1 添加控件新建一個C#.Net項目,項目名稱為OverView,將Form1的名字設(shè)置為MainForm,并添加ToolbarControl 、兩個MapControl和LicenceControl等四個控件。布局如下圖所示。左邊的axMapControl1用于地圖數(shù)據(jù)顯示和操作,右邊axMapControl2用于鷹眼顯示。圖 1 界面布局在ToolbarControl 加載添加數(shù)據(jù)按鈕和地圖瀏覽的功能按鈕,如下圖所示,并將ToolbarControl的伙伴控件設(shè)為axMapControl1。圖 2添加按鈕1.2 代碼添加及解釋鷹眼用來顯示主窗體當前視圖范圍在全景視圖中的位置,在ArcMap中使用一個線框在鷹眼視圖中標識。當主視圖中的視圖范圍改變時,鷹眼中的線框隨之改變,當拖動鷹眼視圖中的紅線框時,主視圖中的視圖范圍也隨之改變。下面開始實現(xiàn)鷹眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三個引用。首先在axMapControl1中視圖范圍改變時鷹眼窗體要做出對應的響應,即繪制線框并顯示,在OnExtentUpdated事件中添加代碼如下:private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) /創(chuàng)建鷹眼中線框 IEnvelope pEnv = (IEnvelope)e.newEnvelope; IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pEle = pRectangleEle as IElement; pEle.Geometry = pEnv; /設(shè)置線框的邊線對象,包括顏色和線寬 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 255; / 產(chǎn)生一個線符號對象 ILineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 2; pOutline.Color = pColor; / 設(shè)置顏色屬性 pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 0; / 設(shè)置線框填充符號的屬性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline; IFillShapeElement pFillShapeEle = pEle as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; / 得到鷹眼視圖中的圖形元素容器 IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer; IActiveView pAv = pGra as IActiveView; / 在繪制前,清除 axMapControl2 中的任何圖形元素 pGra.DeleteAllElements(); / 鷹眼視圖中添加線框 pGra.AddElement(IElement)pFillShapeEle, 0); / 刷新鷹眼 pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 當鼠標點擊鷹眼窗體時,主窗體Extent隨之改變。在axMapControl2的OnMouseDown事件中添加代碼如下:private void axMapControl2_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) if (this.axMapControl2.Map.LayerCount != 0) / 按下鼠標左鍵移動矩形框 if (e.button = 1) IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); IEnvelope pEnvelope = this.axMapControl1.Extent; pEnvelope.CenterAt(pPoint); this.axMapControl1.Extent = pEnvelope; this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); / 按下鼠標右鍵繪制矩形框 else if (e.button = 2) IEnvelope pEnvelop = this.axMapControl2.TrackRectangle(); this.axMapControl1.Extent = pEnvelop; this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 當鼠標在鷹眼窗體移動時,主窗體Extent隨之改變。在axMapControl2的OnMouseMove事件中添加代碼如下: private void axMapControl2_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) / 如果不是左鍵按下就直接返回 if (e.button != 1) return; IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); this.axMapControl1.CenterAt(pPoint); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 下面代碼用于實現(xiàn)axMapControl2與axMapControl1的數(shù)據(jù)的同步更新,獲取主視圖中視圖范圍最大的圖層作為鷹眼中的視圖。這個更新由兩部分組成,一個是對axMapControl1添加地圖文檔(mxd文件)的響應,通過axMapControl1的OnMapReplace事件實現(xiàn),一個是對axMapControl1添加單個圖層的響應,通過axMapControl1的OnFullExtentUpdated事件實現(xiàn)。我們獲取主視圖中的視圖范圍最大的圖層寫成一個獨立的函數(shù),方便調(diào)用。 private ILayer GetOverviewLayer(IMap map) /獲取主視圖的第一個圖層 ILayer pLayer = map.get_Layer(0); /遍歷其他圖層,并比較視圖范圍的寬度,返回寬度最大的圖層 ILayer pTempLayer = null; for (int i = 1; i map.LayerCount;i+ ) pTempLayer = map.get_Layer(i); if (pLayer.AreaOfInterest.Width pTempLayer.AreaOfInterest.Width) pLayer = pTempLayer; return pLayer; 然后在axMapControl1的OnMapReplaced事件中調(diào)用。 private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) /獲取鷹眼圖層 this.axMapControl2.AddLayer(this.GetOverviewLayer(this.axMapControl1.Map); / 設(shè)置 MapControl 顯示范圍至數(shù)據(jù)的全局范圍 this.axMapControl2.Extent = this.axMapControl1.FullExtent; / 刷新鷹眼控件地圖 this.axMapControl2.Refresh(); 在axMapControl1的OnFullExtentUpdated添加代碼,用于實現(xiàn)在主視圖添加圖層時,實現(xiàn)對鷹眼視圖的更新。代碼如下: private void axMapControl1_OnFullExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnFullExtentUpdatedEvent e) /獲取鷹眼圖層 this.axMapControl2.AddLayer(this.GetOverviewLayer(this.axMapControl1.Map); / 設(shè)置 MapControl 顯示范圍至數(shù)據(jù)的全局范圍 this.axMapControl2.Extent = this.axMapControl1.FullExtent; / 刷新鷹眼控件地圖 this.axMapControl2.Refresh(); 本例的示例數(shù)據(jù)無特別要求,使用前面章節(jié)實例數(shù)據(jù)即可。運行程序,添加地圖數(shù)據(jù),可以在主視圖進行相關(guān)操作,鷹眼視圖同步響應,在鷹眼視圖可以移動紅線框可以同步更新主視圖的視圖范圍,在鷹眼視圖單擊右鍵拉框可以重新繪制紅線框,效果如下:圖 3鷹眼效果1.3 MyGIS中添加鷹眼在上一講中的最后一節(jié),我們創(chuàng)建了一個簡單的GIS系統(tǒng)MyGIS,這里,我們講鷹眼功能嵌入到我們的系統(tǒng)中。在這里我們對實現(xiàn)的思路做一個介紹,請您自己動手完善MyGIS。首先需要修改一下MyGIS窗體的控件布局,我們講鷹眼視圖放到圖層管理器的下方,需要在控件容器SpliterContainer1的Panel1中添加一個水平分隔的SpliterContainer,然后將圖層管理器空間TOCControl和鷹眼視圖MapControl分別置于上下的容器中,并將其屬性Dock分別設(shè)為Fill。另外,在此種窗體布局情況下,直接在TOCControl控件屬性中設(shè)置伙伴控件無效,如圖所示。我們需要在MainForm的Load事件中為TOCControl設(shè)置伙伴控件為axMapControl1。添加代碼如下: private void Form1_Load(object sender, EventArgs e) /設(shè)置axTOCControl1的伙伴控件 this.axTOCControl1.SetBuddyControl(axMapControl1.Object); 圖 4 TOCControl控件屬性中設(shè)置伙伴控件然后依次添加本例中的代碼,即可完成,運行效果如下圖所示:圖 5 MyGIS中鷹眼的運行效果1.4 小結(jié)在本小節(jié)中,我們實現(xiàn)了鷹眼功能并講鷹眼加入了MyGIS,這部分的重點是鷹眼視圖和主視圖之間的事件交互。推薦您仔細結(jié)合例子程序查看代碼,如果需要獲得進一步的信息,請查看幫助系統(tǒng)。如果您對這一小節(jié)的內(nèi)容比較熟悉了,就可以開始學習本章最后一小節(jié)的內(nèi)容了。在下一小節(jié)中,我們將嘗試添加緩沖區(qū)分析功能。ArcGIS Engine高級功能開發(fā)2 緩沖區(qū)分析緩沖區(qū)分析指為了識別某一地理實體或空間物體對其周圍地物影響度而在其周圍建立的具有一定寬度的區(qū)域,以確定哪些實體落在了被影響的區(qū)域范圍之內(nèi)。緩沖區(qū)分析與緩沖區(qū)查詢不同,緩沖區(qū)查詢是不破壞原有空間目標的關(guān)系,只是檢索到該緩沖區(qū)范圍內(nèi)涉及到的目標。而緩沖區(qū)分析是根據(jù)設(shè)定的距離條件對一類地物建立緩沖區(qū)多邊形,存儲到一個新的圖層中。然后再將新的圖層與需要進行緩沖區(qū)分析的圖層進行疊置分析,得到所需要的結(jié)果。因此,緩沖區(qū)分析實際上進行了兩步的操作,第一步是建立緩沖區(qū)圖層,第二步是進行疊置剪裁分析。緩沖區(qū)分析適用于點、線、面對象,如點狀的居民點、線狀的河流和面狀的作物分布區(qū)等,只要地理實體能對周圍一定區(qū)域形成影響即可使用這種分析方法。圖 6點、線、面的緩沖區(qū)分析ArcGIS的ArcToolBox中的分析工具提供了緩沖區(qū)分析的功能,本節(jié)實習我們首先使用Geoprocessor方法實現(xiàn)一個簡單的緩沖區(qū)分析功能,然后將緩沖區(qū)分析功能添加到我們的MyGIS項目中。程序運行前首先需要在D盤下新建一個名為Temp的文件夾,存放疊置分析生成的文件。2.1 Geoprocessor實現(xiàn)緩沖區(qū)分析為了降低開發(fā)難度和提高開發(fā)效率,ArcGIS Engine中添加了GeoProcessor類,使用Geoprocessor能幫助用戶直接實現(xiàn)一些簡單的工具性的功能,所有在ArcToolBox中的功能,基本都可以用Geoprocessor編程實現(xiàn)。本節(jié)我們使用Geoprocessor實現(xiàn)緩沖區(qū)分析的功能。2.1.1 添加控件新建一個C#.Net項目,項目名稱為Buffer,將Form1的名字設(shè)置為MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五個控件。并將ToolbarControl 、TOCControl的伙伴控件設(shè)為MapControl,Button控件的Name屬性設(shè)定為btnBuffer,Text屬性設(shè)定為“緩沖區(qū)分析”??丶季中Ч缦聢D所示。圖 7控件布局效果在ToolbarControl 加載添加數(shù)據(jù)按鈕和地圖瀏覽的功能按鈕,如下圖所示。圖 8添加按鈕2.1.2 代碼添加及解釋首先添加如下四個命名空間的引用。using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geoprocessor;using ESRI.ArcGIS.Geoprocessing;using ESRI.ArcGIS.esriSystem;在使用Geoprocessor工具實現(xiàn)緩沖區(qū)分析時,需要首先定義一個Geoprocessor對象,因為命名空間“ESRI.ArcGIS.Geoprocessing”也包含Geoprocessor類,為了避免混淆,我們使用命名空間來定義Geoprocessor,然后設(shè)置Geoprocessor中的環(huán)境參數(shù),這里我們使用默認參數(shù)。然后定義一個操作類Buffer,并設(shè)置參數(shù),生成緩沖區(qū)的參數(shù)包含原始圖層,緩沖半徑和輸出路徑,最后使用已定義的Geoprocessor對象執(zhí)行即可。雙擊“生成緩存區(qū)”按鈕,添加代碼如下: private void btnBuffer_Click(object sender, EventArgs e) /判斷MapControl中是否包含圖層 if (this.axMapControl1.LayerCount = 0) return; /獲取MapControl中第一個圖層 ILayer pLayer = this.axMapControl1.Map.get_Layer(0); /輸出路徑,可以自行指定 string strOutputPath = D:Buffer.shp; /緩沖半徑 double dblDistace = 1.0; /獲取一個geoprocessor的實例,避免與命名空間Geoprocessing中的Geoprocessor發(fā)生引用錯誤 ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(); /OverwriteOutput為真時,輸出圖層會覆蓋當前文件夾下的同名圖層 gp.OverwriteOutput = true; /創(chuàng)建一個Buffer工具的實例 ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(pLayer, strOutputPath, dblDistace); /執(zhí)行緩沖區(qū)分析 IGeoProcessorResult results = null; results = gp.Execute(buffer, null) as IGeoProcessorResult; /判斷緩沖區(qū)是否成功生成 if (results.Status != esriJobStatus.esriJobSucceeded) MessageBox.Show(圖層 + pLayer.Name + 緩沖區(qū)生成失?。?; else MessageBox.Show(緩沖區(qū)生成成功!); /將生成圖層加入MapControl int index = strOutputPath.LastIndexOf(); this.axMapControl1.AddShapeFile(strOutputPath.Substring(0, index), strOutputPath.Substring(index); 運行程序,添加一個圖層(多個圖層時本例中默認選擇的圖層為第一個圖層),點擊“生成緩沖區(qū)”,運行結(jié)果如圖。圖 9緩沖區(qū)生成效果2.1.3 小結(jié)本例中,我們使用Geoprocessor工具實現(xiàn)了緩沖區(qū)分析。從中我們可以得到Geoprocessor工具使用的一般方法,在使用Geoprocessor時,一般需先定義一個Geoprocessor對象,然后設(shè)置該對象的參數(shù),如本例中的OverwriteOutput,再定義一個具體的操作類,如本例中的Buffer類,在設(shè)置完操作類的參數(shù)后,則通過Geoprocessor的Excute函數(shù)來執(zhí)行。至此,我們已經(jīng)實現(xiàn)了一個簡單的緩沖區(qū)分析的功能,從中我們學習了Geoprocessor的使用方法。下一節(jié)我們講對緩沖區(qū)份分析功能做進一步的改進,使其具有更強的適用性,并將這個功能添加到MyGIS中。2.2 MyGIS中添加緩沖區(qū)分析我們在使用緩沖區(qū)分析時,需要設(shè)定原始的圖層,緩沖半徑以及生成緩沖區(qū)的保存路徑。本節(jié)我們將在上一節(jié)的基礎(chǔ)上進一步實現(xiàn)緩沖區(qū)分析,實現(xiàn)緩沖圖層,緩沖半徑和保存路徑的可選設(shè)置。2.2.1 添加控件打開項目MyGIS,在MyGIS的主菜單添加一個新的菜單項“空間分析”,并添加子菜單“緩沖區(qū)分析”,Name屬性修改為“menuBuffer”。項目中添加一個新的窗體,名稱為“BufferForm”,Name屬性設(shè)為“緩沖區(qū)分析”,添加四個Label、一個ComboBox、兩個TextBox、三個Button控件,控件屬性設(shè)置如下:表 1控件屬性設(shè)置控件類型Name屬性Text屬性控件說明Label選擇圖層:Label緩沖半徑:LabellblUnit地圖單位標示當前地圖的地圖單位Label輸出圖層:ComboBoxcboLayers所有圖層的名稱TextBoxtxtBufferDistance1.0生成緩沖區(qū)的緩沖半徑TextBoxtxtOutputPath緩沖區(qū)文件的輸出路徑,其ReadOnly屬性設(shè)為TrueButtonbtnOutputLayer選擇緩沖區(qū)文件的輸出路徑ButtonbtnBuffer分析進行緩沖區(qū)分析ButtonbtnCancel取消取消2.2.2 代碼添加及解釋該項目需添加如下引用:using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geoprocessor;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geoprocessing;using ESRI.ArcGIS.esriSystem;首先聲明兩個成員變量,用于保存地圖數(shù)據(jù)和輸出文件的路徑。 /接收MapControl中的數(shù)據(jù) private IHookHelper mHookHelper = new HookHelperClass(); /緩沖區(qū)文件輸出路徑 public string strOutputPath;重寫B(tài)ufferForm的構(gòu)造函數(shù),添加一個參數(shù),用于接收MapControl中的數(shù)據(jù)。 /重寫構(gòu)造函數(shù),添加參數(shù)hook,用于傳入MapControl中的數(shù)據(jù) public BufferForm(object hook) InitializeComponent(); this.mHookHelper.Hook = hook; 添加一個自定義函數(shù),用于根據(jù)圖層名稱獲取要素圖層并返回。 private IFeatureLayer GetFeatureLayer(string layerName) IFeatureLayer pFeatureLayer = null; /遍歷圖層,獲取與名稱匹配的圖層 for (int i = 0; i this.mHookHelper.FocusMap.LayerCount; i+) ILayer pLayer = this.mHookHelper.FocusMap.get_Layer(i); if (pLayer.Name = layerName) pFeatureLayer = pLayer as IFeatureLayer; if (pFeatureLayer != null) return pFeatureLayer; else return null; BufferForm在載入時需要加載當前MapControl中的圖層名稱到cboLayers,讀取當前地圖的地圖單位,設(shè)置緩沖區(qū)文件的默認輸出路徑,這里我們將默認輸出路徑設(shè)為“D:Temp”。 private void BufferForm_Load(object sender, EventArgs e) /傳入數(shù)據(jù)為空時返回 if (null = mHookHelper | null = mHookHelper.Hook | 0 = mHookHelper.FocusMap.LayerCount) return; /獲取圖層名稱并加入cboLayers for (int i = 0; i 0) cboLayers.SelectedIndex = 0; /設(shè)置生成文件的默認輸出路徑和名稱 string tempDir = D:Temp; txtOutputPath.Text = System.IO.Path.Combine(tempDir, (string)cboLayers.SelectedItem + _buffer.shp); /設(shè)置默認地圖單位 lblUnits.Text = Convert.ToString(mHookHelper.FocusMap.MapUnits); 雙擊路徑設(shè)置按鈕,進入代碼編輯界面,添加如下代碼: private void btnOutputLayer_Click(object sender, EventArgs e) /定義輸出文件路徑 SaveFileDialog saveDlg = new SaveFileDialog(); /檢查路徑是否存在 saveDlg.CheckPathExists = true; saveDlg.Filter = Shapefile (*.shp)|*.shp; /保存時覆蓋同名文件 saveDlg.OverwritePrompt = true; saveDlg.Title = 輸出路徑; /對話框關(guān)閉前還原當前目錄 saveDlg.RestoreDirectory = true; saveDlg.FileName = (string)cboLayers.SelectedItem + _buffer.shp; /讀取文件輸出路徑到txtOutputPath DialogResult dr = saveDlg.ShowDialog(); if (dr = DialogResult.OK) txtOutputPath.Text = saveDlg.FileName; 雙擊“分析”按鈕,添加代碼如下: private void btnBuffer_Click(object sender, EventArgs e) /緩沖距離 double bufferDistance; /輸入的緩沖距離轉(zhuǎn)換為double double.TryParse(txtBufferDistance.Text.ToString(),out bufferDistance); /判斷輸出路徑是否合法 if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(txtOutputPath.Text) | .shp != System.IO.Path.GetExtension(txtOutputPath.Text) MessageBox.Show(輸出路徑錯誤!); return; /判斷圖層個數(shù) if (mHookHelper.FocusMap.LayerCount = 0) return; /獲取圖層 IFeatureLayer pFeatureLayer = GetFeatureLayer(string)cboLayers.SelectedItem); if (null = pFeatureLayer) MessageBox.Show(圖層 + (string)cboLayers.SelectedItem + 不存在!rn); return; /獲取一個geoprocessor的實例 Geoprocessor gp = new Geoprocessor(); /OverwriteOutput為真時,輸出圖層會覆蓋當前文件夾下的同名圖層 gp.OverwriteOutput = true; /緩沖區(qū)保存路徑 strOutputPath = txtOutputPath.Text; /創(chuàng)建一個Buffer工具的實例 ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(pFeatureLayer, strOutputPath, bufferDistance.ToString(); /執(zhí)行緩沖區(qū)分析 IGeoProcessorResult results = null; results = (IGeoProcessorResult)gp.Execute(buffer, null); /判斷緩沖區(qū)是否成功生成 if (results.Status != esriJobStatus.esriJobSucceeded) MessageBox.Show(圖層 + pFeatureLayer.Name + 緩沖區(qū)生成失??!); else this.DialogResult = DialogResult.OK; MessageBox.Show(緩沖區(qū)生成成功!); 雙擊“取消”按鈕,添加代碼如下: private void btnCancel_Click(object sender, EventArgs e) this.Dispose(); 進入MyGIS的主窗體,雙擊菜單中的“緩沖區(qū)分析”,添加代碼如下: BufferForm bufferForm = new BufferForm(this.axMapControl1.Object); if (bufferForm.ShowDialog() = DialogResult.OK) /獲取輸出文件路徑 string strBufferPath = bufferForm.strOutputPath; /緩沖區(qū)圖層載入到MapControl int index = strBufferPath.LastIndexOf(); this.axMapControl1.AddShapeFile(strBufferPath.Substring(0, index), strBufferPath.Substring(index); 至此,代碼編輯完成,運行程序,添加數(shù)據(jù)usa.mxd,選擇圖層wind,設(shè)置緩沖區(qū)半徑為0.8,點擊“分析”,效果如下圖所示。圖 10緩沖區(qū)分析效果如果運行過程中出現(xiàn)錯誤“正試圖在 OS 加載程序鎖內(nèi)執(zhí)行托管代碼。不要嘗試在 DllMain 或映像初始化函數(shù)內(nèi)運行托管代碼,這樣做會導致應用程序掛起?!?,請采用如下方法解決:把vs2005菜單的 調(diào)試-異常-Managed Debuggin Assistants-LoaderLock 的選中狀態(tài)去掉即可!如果異常(exception)這一項沒有的話,在工具-自定義-命令選項卡,選擇左邊“調(diào)試”,找到右邊“異常”拖到菜單上。2.2.3 小結(jié)緩沖區(qū)分析是GIS空間分析的基本功能,這一節(jié)我們完成了緩沖區(qū)分析的功能,實現(xiàn)了緩沖區(qū)分析文件、緩沖半徑和輸出路徑的可選設(shè)置,希望您仔細體會并掌握Geoprocessor工具開發(fā)空間分析功能的基本方法。ArcGIS Engine高級功能開發(fā)3 疊置分析疊置分析是GIS中一種常見的分析功能,它是將有關(guān)主題層組成的各個數(shù)據(jù)層面進行疊置產(chǎn)生一個新的數(shù)據(jù)層面,其結(jié)果綜合了原來兩個或多個層面要素所具有的屬性,同時疊置分析不僅生成了新的空間關(guān)系,而且還將輸入的多個數(shù)據(jù)層的屬性聯(lián)系起來產(chǎn)生了新的屬性關(guān)系。ArcGIS中的疊置分析包含Union(疊置求并)、Intersect(疊置求交)、Identify(疊置標識)、Erase(疊置擦除)、Symmetrical Difference (疊置相交取反)、Update(疊置更新)等。這一小節(jié),我們以疊置求交為例,介紹疊置分析的開發(fā)。疊置求交是保留兩個圖層公共部分的空間圖形,并綜合兩個疊加圖層的屬性。如下圖,反映了疊置求交的原理。圖 11疊置求交示意圖本節(jié)實習將介紹這種方法實現(xiàn)緩沖區(qū)分析,我們首先使用Geoprocessor方法實現(xiàn)一個簡單的緩沖區(qū)分析功能,然后將緩沖區(qū)分析功能添加到我們的MyGIS項目中。同樣,ArcGIS的ArcToolBox中的分析工具提供了緩沖區(qū)分析的功能,本節(jié)實習我們首先使用Geoprocessor方法實現(xiàn)一個簡單的緩沖區(qū)分析功能,然后將緩沖區(qū)分析功能添加到我們的MyGIS項目中。程序運行前首先需要在D盤下新建一個名為Temp的文件夾,存放疊置分析生成的文件。3.1 Geoprocessor實現(xiàn)疊置分析疊置分析我們同樣使用Geoprocessor工具來實現(xiàn)。3.1.1 添加控件新建一個C#.Net項目,項目名稱為OverLay,將Form1的名字設(shè)置為MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五個控件。并將ToolbarControl 、TOCControl的伙伴控件設(shè)為MapControl,Button控件的Name屬性設(shè)定為btnIntersect,Text屬性設(shè)定為“疊置求交”。控件布局效果如下圖所示。圖 12控件布局效果在ToolbarControl 加載添加數(shù)據(jù)按鈕和地圖瀏覽的功能按鈕,如下圖所示。圖 13添加按鈕3.1.2 代碼添加及解釋首先添加如下引用:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.AnalysisTools;using ESRI.ArcGIS.Geoprocessor;using ESRI.ArcGIS.Geoprocessing;與緩沖區(qū)分析的實現(xiàn)類似,在使用Geoprocessor工具實現(xiàn)疊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寧夏銀川外國語實驗校2025年初三下摸底統(tǒng)一考試物理試題含解析
- 鎮(zhèn)江市2025屆數(shù)學四年級第二學期期末考試試題含解析
- 銅仁幼兒師范高等??茖W?!稊?shù)據(jù)采集與審計》2023-2024學年第二學期期末試卷
- 港口客運高峰期應對考核試卷
- 毛巾企業(yè)產(chǎn)品創(chuàng)新與研發(fā)管理考核試卷
- 煉油設(shè)備安全標準化建設(shè)考核試卷
- 滌綸纖維在全球市場的分布情況考核試卷
- 畜牧繁殖輔助設(shè)備制造考核試卷
- 生物農(nóng)藥的知識產(chǎn)權(quán)布局與策略考核試卷
- 創(chuàng)業(yè)企業(yè)的供應鏈管理考核試卷
- 公積金提取單身聲明
- 安全培訓證明
- 陜西省西安市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 三年級道德與法治下冊不一樣的你我他
- 電工電子技術(shù)及應用全套課件
- 2022年龍巖市第一醫(yī)院醫(yī)護人員招聘筆試模擬試題及答案解析
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 2022版義務(wù)教育語文課程標準(2022版含新增和修訂部分)
- 社區(qū)家庭病床護理記錄文本匯總
- 色譜、質(zhì)譜、聯(lián)用
- 蘇教版小學數(shù)學四年級下冊《圖形旋轉(zhuǎn)》練習題
評論
0/150
提交評論