




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
(完整word版)C二次開發(fā)ArcGIS查詢功能(完整word版)C二次開發(fā)ArcGIS查詢功能[地理信息系統(tǒng)課程設計報告]64/64(完整word版)C二次開發(fā)ArcGIS查詢功能目錄TOC\o”1-3"\h\z\uHYPERLINK\l”_Toc482452852"一、ArcGIS簡介 1HYPERLINK\l”_Toc482452853"二、ArcGIS開發(fā)方法介紹 1_Toc482452855”1、數據庫的建立 1HYPERLINK\l”_Toc482452856"2、數據表的設計 2_Toc482452858”五、功能設計(流程圖) 4六、程序運行界面介紹 5HYPERLINK\l”_Toc482452860”1、用戶登錄界面 5HYPERLINK\l”_Toc482452861”2、主程序界面 5HYPERLINK\l”_Toc482452862"3、屬性查詢界面 6HYPERLINK\l”_Toc482452863”4、三角網及泰森多邊形 6七、程序解析說明 7HYPERLINK\l”_Toc482452865”1、用戶登錄界面程序解析說明 7HYPERLINK\l”_Toc482452866”2、屬性查詢程序解析說明 8HYPERLINK\l”_Toc482452867”3、自定義控件命令解析 104、三角網及泰森多邊形構建解析 10HYPERLINK\l”_Toc482452869"八、源代碼附錄 131、用戶登錄源碼 132、屬性查詢源碼 16_Toc482452873"4、FixedZoomIn類源碼 21_Toc482452875"6、FullExtent類源碼 25HYPERLINK\l”_Toc482452876"7、Pan類源碼 27_Toc482452878”9、ZoomOut類源碼 33一、ArcGIS簡介ArcGIS是美國ESRI(EnvironmentalSystemsResearchInstitute,Inc。美國環(huán)境系統(tǒng)研究所公司)推出的一條為不同需求層次用戶提供的全面的、可伸縮的GIS產品線和解決方案.ESRI是GIS領域的拓荒者和領導者,而ArcGIS也代表了當前GIS行業(yè)最高的技術水平。ArcGIS是一個可伸縮的GIS平臺,可以運行在桌面端、服務器端和移動設備上。它包含了一套建設完整GIS系統(tǒng)的應用軟件,這些軟件可以互相獨立或集成配合使用,為不同需求的用戶提供完善的解決之道。ArcGIS是基于一套共享的GIS組件開發(fā)實現(xiàn)的,這套組件被命名為ArcObjects,它包含了大量可編程組件,實現(xiàn)了ArcGIS的全部功能。因此,ArcObjects可以被認為是ArcGIS產品的核心,熟悉ArcObjects的過程同時也是熟悉ArcGISEngine的過程。二、ArcGIS開發(fā)方法介紹Gis的開發(fā)方法有三種,即獨立開發(fā),宿主型二次開發(fā),基于gis組件的二次開發(fā),其中獨立開發(fā)為底層開發(fā),不依賴于任何gis工具軟件,開發(fā)難度太大,后兩者是基于一種軟件的二次開發(fā),這樣的二次開發(fā)則相對較簡單,他的好處也是顯而易見的。Esri公司推出的ArcGIS產品不僅僅包含基礎平臺軟件,也包含供用戶二次開發(fā)的組件,那么這些組件也包含C/S、B/S、移動端的.C/SHYPERLINK”/base/architecture"\o”大型網站架構知識庫"架構主要是應用于局域網方面,一般是安裝開發(fā)軟件,一般情況下機器都不連互聯(lián)網,主要處理數據編輯、數據入庫、地圖整飾等對機器性能要求比較高。B/S架構主要應用于局域網或者互聯(lián)網,一般情況下使用瀏覽器,主要是進行數據查詢、分析等.ArcGIS
Engine開發(fā)工具包是一個基于組件的軟件開發(fā)產品,用于建立和部署自定義GIS和制圖應用程序。ArcGIS
Engine開發(fā)工具包不是一個終端用戶產品,而是一個應用程序開發(fā)人員的工具包??梢杂肁rcGIS
Engine開發(fā)工具包建立基本的地圖瀏覽器或綜合、動態(tài)的GIS編輯工具。使用ArcGIS
Engine開發(fā)工具包,開發(fā)人員在建立定制的地圖接口方面具有前所未有的靈活性.開發(fā)人員可以使用幾個API中的任何一個來建立獨一無二的應用程序,或者將ArcGIS
Engine組件與其他軟件組件組合起來實現(xiàn)地圖與用戶管理信息之間的協(xié)同關系。三、數據庫設計1、數據庫的建立通過ArcCatalog創(chuàng)建個人地理數據庫>>要素集>>要素類>>編輯屬性2、數據表的設計(1)房屋字段名稱字段解釋類型長度備注IDID號LongName名稱Char20Owner所有者Char20Layers層數Integer20Material材質Char20Add地址Char40BuildArea建筑面積FloatRemark備注Char40(2)道路字段名稱字段解釋類型長度備注IDID號LongName名稱Char20Material鋪設材料Char20Width道路寬度FloatRemark備注Char40等等四、地理數據入庫(地圖掃描矢量化方法介紹)1、打開ArcMap,添加“影像配準”工具欄。把需要進行配準的影像—“校內平面圖測繪14級.dwg”添加到ArcMap中,會發(fā)現(xiàn)“影像配準”工具欄中的工具被激活.2、在“影像配準”工具欄上,點擊“添加控制點(add
control
point)”按鈕。使用該工具在掃描圖上精確到找一個控制點點擊,然后鼠標右擊輸入該點實際的坐標位置。用相同的方法,在影像上增加多個控制點(大于3個),輸入它們的實際坐標。點擊“影像配準”工具欄上的“查看鏈接表(view
link
table)"按鈕。對于誤差較大的控制點,可以刪除然后重新采集。3、打開ArcCatalog。在指定目錄下,鼠標右擊,在“新建”中,選擇“個人Geodatabase"。并修改該Geodatabase數據庫的名稱。右擊新建要素集并為要素集設置投影坐標系。右擊新建要素類,選擇要素類型,并為要素命名,添加要素屬性字段“Name”等.這樣便建好了一個點,線或面要素4、在ArcMap中編輯工作條上點擊開始編輯,這時會彈出來一個窗口選擇要素,然后在已經配準后的圖像上選擇相應的要素類型一一繪制,右擊圖層控件上的某個要素圖層打開屬性表可以編輯屬性。5、將矢量化好后的圖層導出為(*。mxd)文件。五、功能設計(流程圖)六、程序運行界面介紹1、用戶登錄界面2、主程序界面3、屬性查詢界面4、三角網及泰森多邊形七、程序解析說明1、用戶登錄界面程序解析說明 用戶登錄設計思路:(1)用戶輸入用戶名和密碼,用戶名不能為空,密碼不能為空.(2)密碼在五分鐘之內連續(xù)輸錯三次,用戶名被鎖定,30分鐘后才能再次登錄。(3)若密碼輸錯次數小于3次,則從最后一次輸錯時刻算起,五分鐘之后用戶登錄錯誤次數歸零。(4)用戶注冊,數據庫中檢索此用戶,若用戶存在則提示用戶名已存在,反之注冊成功,需重新登錄.重點代碼解析:使用參數化查詢避免注入漏洞攻擊,用戶信息存儲在SQLServer數據庫的T_User表中//只用來執(zhí)行查詢結果較少的sqlpublicstaticDataSetExecuteDataSet(stringsql,paramsSqlParameter[]parameters){using(SqlConnectionconn=newSqlConnection(ConStr)){conn。Open();using(SqlCommandcmd=conn。CreateCommand()){cmd.CommandText=sql;cmd。Parameters.AddRange(parameters);//SqlDataAdapter如同一個適配器,過渡橋梁的作用SqlDataAdapteradapter=newSqlDataAdapter(cmd);DataSetdataset=newDataSet();adapter。Fill(dataset);returndataset;}}}當用戶輸錯三次以上并且時間少于30分鐘時不允許登陸,TimeSpants=DateTime。Now-date;用于存儲間隔時間if(errortimes>=3){DateTimedate=(DateTime)row["Lock”];TimeSpants=DateTime.Now—date;if(ts。TotalMinutes<=30){MessageBox.Show(@"輸入錯誤次數太多,用戶已被鎖定,請于30分鐘后再登陸,剩余時間"+(30-ts.TotalMinutes).ToString(”0”)+”分鐘”,"錯誤提示”,MessageBoxButtons。OK,MessageBoxIcon。Error);return;}else{//輸錯三次后30分鐘后更新ErorrTimes=0SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=0whereId=@id",newSqlParameter("@id”,id));}}3、若密碼輸錯次數小于3次,則從最后一次輸錯時刻算起,五分鐘之后用戶登錄錯誤次數歸零即UpdateT_UsersetErorrTimes=1whereId=@idTimeSpants=DateTime。Now—Convert。ToDateTime(date);if(ts。TotalMinutes〉5){SqlHelper.NonQuery(@"UpdateT_UsersetErorrTimes=1whereId=@id”,newSqlParameter("@id”,id));}2、屬性查詢程序解析說明重點代碼解析:(1)進入屬性查詢界面的代碼:通過AttributeQueryForm類的構造函數來存儲地圖的數據和綁定DataGridView的數據源AttributeQueryFormattributequery=newAttributeQueryForm(this。axMapControl1,this.dataGridView1);attributequery。ShowDialog();(2)從主程序axMapControl傳值過來的地圖數據存儲在privateAxMapControlmMapControl;并且在屬性查詢窗體的ComboBox組合控件cboLayer中添加各個圖層名//圖層名稱加入cboLayerthis。cboLayer.Items。Add(strLayerName);通過get_Layer(cboLayer.SelectedIndex)獲取選中圖層,并將每個圖層的字段名顯示在名為cboField的ComboBox控件。strFldName=pFeatureClass。Fields。get_Field(i)。Name;//圖層名稱加入cboFieldthis。cboField。Items.Add(strFldName);(3)屬性查詢中需要認識學習接口的相關知識,接口是一種規(guī)范、功能。在屬性查詢中我們需要用到IQueryFilter接口,該接口通過WhereClause屬性來獲取查詢數據,類似于SQL中的where語句。然后再通過圖層的Search方法基于查詢條件返回要素游標pFeatureCursor。如下圖,pFeatureCursor指針一開始指向第0層,每調用一下NextFeature()方法,指針就往下移動一格直到指向null代碼示例://定義圖層,要素游標,查詢過濾器,要素IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;IQueryFilterpQueryFilter;IFeatureSelectionpFeatureSelection;IActiveViewactiveview;IFeaturepFeature;//獲取圖層pFeatureLayer=this。mMapControl.Map.get_Layer(GetLayerindexbyName(cboLayer.Text))asIFeatureLayer;//如果圖層名稱不是cboLayer.Text,程序退出if(pFeatureLayer。Name!=cboLayer.Text)return;//清除上次查詢結果this。mMapControl。Map。ClearSelection();activeview=this.mMapControl。MapasIActiveView;//pQueryFilter的實例化pQueryFilter=newQueryFilterClass();//設置查詢過濾條件pQueryFilter。WhereClause=””+cboField。Text+"=’”+txtValue。Text+”'”;//基于查詢條件創(chuàng)建指針并回收pFeatureCursor=pFeatureLayer。Search(pQueryFilter,true);//獲取查詢到的要素然后再調用DisplayToDataGridDAL類中的方法,將查詢出來的要素字段值顯示在DataGridView中,DisplayToDataGridDAL類是自己寫的一個類(代碼見附錄)代碼示例:DisplayToDataGridDAL.Dataview(pFeatureCursor,dataGrid,pFeatureLayer);高亮并居中顯示選中的要素:activeview.Extent=pFeature。Shape.Envelope;activeview。Refresh();3、自定義控件命令解析以下講述ArcEngine自定義開發(fā)的一些控件命令,如居中放大,居中縮小,拉框放大,拉框縮小,漫游,顯示全圖等?;贐aseCommand的功能實現(xiàn)與Button的功能類似,是當鼠標點擊按鈕的時候,MapControl控件會對其中的命令做出相應響應而無需額外的操作,如ArcMap中的居中放大FixedZoomIn,居中縮小FixedZoomOut,全圖FullExtent等。對于BaseTool來說,點擊該功能之后,只是開啟一個交互的過程,需要用戶再用鼠標、鍵盤等對地圖做進一步交互式的操作,MapControl控件才會予以相應,如ArcMap中的拉框放大ZoomIn、拉框縮小ZoomOut、漫游Pan等.以FixedZoomIn為例,雙擊解決方案資源管理器中的FixedZoomIn。cs項,進入該類的代碼編寫界面。加入引用“ESRI。ArcGIS。Geometry",并在該類的最上方添加如下代碼:publicoverridevoidOnClick(){//TODO:AddFixedZoomIn.OnClickimplementation//獲取當前視圖范圍IActiveViewpActiveView=m_hookHelper.ActiveView;IEnvelopepEnvelope=pActiveView.Extent;//擴大視圖范圍并刷新視圖pEnvelope.Expand(0.5,0。5,true);pActiveView.Extent=pEnvelope;pActiveView.Refresh();}在主程序代碼中還添加了一個全局變量mTool,以確定選擇的是哪個控件命令命令privatestringmTool;privatevoidmenuFixedZoomIn_Click(objectsender,EventArgse){//聲明與初始化FixedZoomInfixedZoomin=newFixedZoomIn();//與MapControl關聯(lián)fixedZoomin。OnCreate(this.axMapControl1.Object);fixedZoomin。OnClick();}4、三角網及泰森多邊形構建解析首先在Form窗體上加一個PictureBox控件,在PictureBox的MouseDown事件下通過每次點擊獲取點的坐標e。X,e。YprivatevoidpicMap_MouseDown(objectsender,MouseEventArgse){Graphicsg=((PictureBox)sender).CreateGraphics();g.FillEllipse(Brushes。Black,e.X,e.Y,5,5);Pointpt=newPoint(e.X,e.Y);myPoints。Add(pt);g。Dispose();} 三角網的構建采用逐點插入法,首先對在鼠標單擊事件下獲取的點集進行排序,排序時X坐標從小到大排列,若X坐標相同則Y坐標從小到大排列。構建一個可以包含所有點集的超級三角形,并將超級三角形的三個頂點存入Triangle表中。從點集中取點判斷點是否在三角形內,若點在三角形內,則將該三角形三邊存入邊列表中,若并從三角形列表中刪除該三角形,如此循環(huán),遍歷點集里所有的點。最后刪除與超級三角形有共同頂點的三角形及凹邊界處三角形重點代碼示例:if(myPoints.Count〈=0)return;else//對點集進行排序,先按X坐標從大到小排序//X坐標相同的按Y坐標從大到小排序myPoints=SortPoints(myPoints);//獲得超級三角形SuperTriangle(myPoints);inti=0;while(i〈myPoints。Count){Pointpt=myPoints[i];List〈List〈Point>>edjest=newList〈List〈Point〉>();intj=0;while(triangle.Count!=0&&triangle.Count-1>=j){boolflag=true;List〈object〉mycircle=Circle(triangle,j);Pointcenter=(Point)mycircle[0];doubleradius=(double)mycircle[1];if(pt.X〉(center。X+radius)){flag=true;}elseif(Inside(pt,mycircle)){//edjest=Addnew(traingle,j);List<List<Point〉>ed=Addnew(triangle,j);edjest.Add(ed[0]);edjest.Add(ed[1]);edjest.Add(ed[2]);triangle。RemoveAt(j);flag=false;}if(flag)j++;}//刪除重復的邊edjest=Delete(edjest);triangle=NewTriangle(pt,edjest);i++;}//刪除以超級三角形頂點為頂點的三角形triangle=SuperDelete(supertriangle);//刪除凹邊界處三角形triangle=TraingleDelete();using(Graphicsg=this.picMap.CreateGraphics()){for(intj=0;j〈triangle。Count;j++){Point[]myPoint=newPoint[3];myPoint[0]=(Point)triangle[j][0];myPoint[1]=(Point)triangle[j][1];myPoint[2]=(Point)triangle[j][2];g。DrawPolygon(newPen(Brushes。Red,3),myPoint);}}構建泰森多邊形需要構建三角網。找出每個離散點周圍的三角形即以該離散點為共同頂點的三角形,按逆時針排列起來以便下一步生成泰森多邊形,連接該離散點周圍三角形的外接圓的圓心。三角網邊界處的泰森多邊形可做垂直平分線與圖廓相交,與圖廓一起形成泰森多邊形.(代碼見附錄)重點代碼示例://使三角形三個點坐標都按逆時針方向存儲triangle=Thiessen。SortTraingle(triangle);//存儲三角網所有三角形的邊Thiessen.Edge(triangle);//構成邊界的邊集合Thiessen。BorderEdge(Thiessen.allEdge);//尋找以邊界點為頂點的三角形集合Thiessen.BorderTriangle(Thiessen.borderEdge,triangle);//除邊界點外其他離散點Thiessen。CenterPoint(myPoints,Thiessen.borderEdge);//除邊界點外其他離散點構成的泰森多邊形集合Thiessen。ThiessenEdge(triangle,Thiessen。centerpoint);//邊界離散點構成的泰森多邊形集合Thiessen.MyBorderTheissen(Thiessen。borderEdge,Thiessen.myBorderTriangle);using(Graphicsg=this.picMap.CreateGraphics()){//繪制除邊界點外其他離散點構成的泰森多邊形集合for(inti=0;i〈Thiessen.myTheissen。Count;i++){g.DrawPolygon(newPen(Brushes.Black,3),Thiessen。myTheissen[i].ToArray());}//繪制邊界離散點構成的泰森多邊形集合for(inti=0;i<Thiessen。myBorderTheissen.Count;i++){g.DrawPolygon(newPen(Brushes.Black,3),Thiessen。myBorderTheissen[i].ToArray());}}八、源代碼附錄1、用戶登錄源碼usingSystem;usingSystem.Collections.Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem.Drawing;usingSystem.Linq;usingSystem。Text;usingSystem.Windows.Forms;usingSystem.Data。SqlClient;namespaceMyMap{publicpartialclassLoginWindow:Form{publicLoginWindow(){InitializeComponent();}privatevoidbtnLogin_Click(objectsender,EventArgse){if(txtUserName.Text.Length<=0){MessageBox.Show("請輸入用戶名");return;}if(txtpwdPassword。Text。Length<=0){MessageBox.Show("請輸入密碼!");return;}DataSetds=SqlHelper.ExecuteDataSet(@"select*fromT_UserwhereUserName=@Name”,newSqlParameter("@Name",txtUserName.Text));if(ds.Tables[0]。Rows.Count<=0){MessageBox.Show("用戶不存在!");return;}if(ds.Tables[0].Rows.Count>1){thrownewException(”不好啦!重復了!”);}DataRowrow=ds.Tables[0]。Rows[0];stringpassword=(string)row["PassWord”];longid=(long)row["Id"];interrortimes=(int)row[”ErorrTimes”];//錯誤次數大于3時//防御性編程if(errortimes〉=3){DateTimedate=(DateTime)row[”Lock”];TimeSpants=DateTime.Now—date;if(ts.TotalMinutes<=30){MessageBox.Show(@"輸入錯誤次數太多,用戶已被鎖定,請于30分鐘后再登陸,剩余時間”+(30—ts。TotalMinutes).ToString("0”)+"分鐘",”錯誤提示",MessageBoxButtons。OK,MessageBoxIcon.Error);return;}else{//輸錯三次后30分鐘后更新ErorrTimes=0SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=0whereId=@id",newSqlParameter("@id”,id));}}if(password==txtpwdPassword.Text){DialogResultresult=MessageBox。Show(”歡迎您登陸!","用戶登錄",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);this。Hide();if(result==DialogResult.OK){MapWindowmw=newMapWindow();DialogResultmapresult=mw。ShowDialog();if(mapresult==DialogResult.Cancel){Application.Exit();}}else{Application。Exit();}}else{MessageBox.Show(”密碼錯誤!”);SqlHelper.NonQuery(@”UpdateT_UsersetErorrTimes=ErorrTimes+1,Lock=GETDATE()whereId=@id",newSqlParameter("@id”,id));objectdate=row["Lock”];if(date==DBNull.Value){date=DateTime。Now;}TimeSpants=DateTime.Now-Convert。ToDateTime(date);if(ts。TotalMinutes>5){SqlHelper。NonQuery(@”UpdateT_UsersetErorrTimes=1whereId=@id",newSqlParameter("@id”,id));}return;}}privatevoidbtnCancel_Click(objectsender,EventArgse){this.Close();}privatevoidbtnRegister_Click(objectsender,EventArgse){DataSetds=SqlHelper.ExecuteDataSet(@"select*fromT_UserwhereUserName=@Name",newSqlParameter("@Name",txtUserName。Text));if(ds。Tables[0]。Rows.Count>=1){//thrownewException(”不好啦!重復了!”);MessageBox。Show("用戶名已存在,請重新輸入用戶名注冊”);return;}if(txtUserName.Text.Length〈=0){MessageBox。Show("用戶名不能為空!”);return;}if(txtpwdPassword。Text.Length<=0){MessageBox。Show("密碼不能為空!”);return;}SqlHelper.NonQuery(@"insertintoT_User(UserName,PassWord,ErorrTimes)Values(’"+txtUserName.Text+”’,'”+txtpwdPassword.Text+”’,0)");MessageBox。Show("恭喜”+txtUserName。Text+”注冊成功!請重新登錄","注冊”);txtUserName.Text="";txtpwdPassword。Text=”";}}}2、屬性查詢源碼usingSystem;usingSystem.Collections。Generic;usingSystem。ComponentModel;usingSystem。Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingESRI。ArcGIS。Controls;usingESRI。ArcGIS。Carto;usingESRI。ArcGIS。Geodatabase;usingESRI.ArcGIS。Display;namespaceMyMap{publicpartialclassAttributeQueryForm:Form{//存儲地圖數據privateAxMapControlmMapControl;privateDataGridViewdataGrid;//存儲當前選中圖層,IFeatureLayer繼承自ILayerprivateIFeatureLayermFeatureLayer;//通過構造函數來傳值publicAttributeQueryForm(AxMapControlmapcontrol,DataGridViewdataGridView){InitializeComponent();this。mMapControl=mapcontrol;this。dataGrid=dataGridView;}publicAttributeQueryForm(){}privateintGetLayerindexbyName(stringcbolayername){inti;for(i=0;i<mMapControl.LayerCount;i++){if(cbolayername==mMapControl。get_Layer(i)。Name)break;}returni;}privatevoidbtnOk_Click(objectsender,EventArgse){if(txtValue.Text==”"){MessageBox。Show("請輸入您要查詢什么");return;}//定義圖層,要素游標,查詢過濾器,要素IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor;IQueryFilterpQueryFilter;IFeatureSelectionpFeatureSelection;IActiveViewactiveview;IFeaturepFeature;//獲取圖層pFeatureLayer=this.mMapControl。Map.get_Layer(GetLayerindexbyName(cboLayer。Text))asIFeatureLayer;//如果圖層名稱不是cboLayer.Text,程序退出if(pFeatureLayer。Name!=cboLayer.Text)return;//清除上次查詢結果this.mMapControl。Map。ClearSelection();activeview=this。mMapControl.MapasIActiveView;//IFeatureClasspFeatureClass=pFeatureLayer。FeatureClass;//pQueryFilter的實例化pQueryFilter=newQueryFilterClass();//設置查詢過濾條件pQueryFilter.WhereClause=""+cboField.Text+"=’”+txtValue.Text+”’";//基于查詢條件創(chuàng)建指針并回收pFeatureCursor=pFeatureLayer。Search(pQueryFilter,true);//獲取查詢到的要素pFeature=DisplayToDataGridDAL.GetFeature(pFeatureCursor);//獲取查詢到的要素pFeatureSelection=pFeatureLayerasIFeatureSelection;//根據查詢條件選擇要素pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);//QI到ISelectionSetISelectionSetpSelectionSet=pFeatureSelection.SelectionSet;//判斷是否獲取到要素if(pFeature!=null){//Theselectionsetthatdefinesthesubsetoffeaturesinaselectionlayer.//ISelectionSetDefinitionSelectionSet{get;}只讀屬性IFeatureLayerDefinitionpFDefinition=pFeatureLayerasIFeatureLayerDefinition;//創(chuàng)建新圖層IFeatureLayerpNewFeatureLayer=pFDefinition。CreateSelectionLayer("newlayerName”,true,null,null);pNewFeatureLayer。Name=”查詢結果”;mMapControl。AddLayer(pNewFeatureLayerasILayer);//獲取最小外包矩形并放大到當前視圖范圍activeview。Extent=pFeature.Shape.Envelope;activeview。Refresh();}else{//沒有得到pFeature的提示MessageBox。Show(”沒有找到"+txtValue。Text,”提示”);return;}//把查詢到的要素的屬性顯示到DataGridView中DisplayToDataGridDAL。Dataview(pFeatureCursor,dataGrid,pFeatureLayer);this.mMapControl.DeleteLayer(0);this。mMapControl.Refresh();}privatevoidAttributeQueryForm_Load(objectsender,EventArgse){//MapControl中沒有圖層時返回if(this。mMapControl.LayerCount〈=0)return;//獲取MapControl中的全部圖層名稱,并加入ComboBox//圖層ILayerpLayer;//圖層名稱stringstrLayerName;for(inti=0;i<this。mMapControl。LayerCount;i++){pLayer=this.mMapControl.get_Layer(i);strLayerName=pLayer。Name;//圖層名稱加入cboLayerthis。cboLayer。Items.Add(strLayerName);}//默認顯示第一個選項this.cboLayer.SelectedIndex=0;}privatevoidcboLayer_SelectedIndexChanged(objectsender,EventArgse){this.cboField。Items。Clear();//獲取cboLayer中選中的圖層mFeatureLayer=mMapControl。get_Layer(cboLayer。SelectedIndex)asIFeatureLayer;//要素集合IFeatureClasspFeatureClass=mFeatureLayer.FeatureClass;//字段名稱stringstrFldName;for(inti=0;i<pFeatureClass。Fields。FieldCount;i++){strFldName=pFeatureClass。Fields。get_Field(i).Name;//圖層名稱加入cboFieldthis.cboField。Items。Add(strFldName);}//默認顯示第一個選項this.cboField。SelectedIndex=0;}privatevoidbtnCancel_Click(objectsender,EventArgse){this.Close();}}}3、DisplayToDataGridDAL類源碼classDisplayToDataGridDAL{privatestaticIFeaturepFeature;///<summary>///返回游標所指向的第一個元素///</summary〉///<paramname="pFeatureCursor"></param>///〈returns>〈/returns>publicstaticIFeatureGetFeature(IFeatureCursorpFeatureCursor){returnpFeature=pFeatureCursor。NextFeature();}///〈summary>///獲取圖層類型///〈/summary>///<paramname=”pLayer”></param〉///〈returns>〈/returns>publicstaticstringgetShapeType(IFeatureLayerpFeatureLayer){switch(pFeatureLayer.FeatureClass.ShapeType){caseesriGeometryType.esriGeometryPoint:return"Point”;caseesriGeometryType.esriGeometryPolyline:return"Polyline";caseesriGeometryType.esriGeometryPolygon:return"Polygon";default:return"”;}}///〈summary〉///獲取查詢過濾后的游標,將查詢到的要素的屬性填充到DataGridView///〈/summary>///〈paramname="pFeatureCursor"〉</param>///〈paramname=”datagridview">〈/param〉publicstaticvoidDataview(IFeatureCursorpFeatureCursor,DataGridViewdatagridview,IFeatureLayerpFeatureLayer){DataSetds=newDataSet();DataTabletable=newDataTable(”MyTable");stringshapetype=getShapeType(pFeatureLayer);for(inti=0;i〈pFeatureCursor。Fields。FieldCount;i++){//創(chuàng)建表頭table.Columns.Add(pFeatureCursor.Fields.get_Field(i)。Name);}while(pFeature!=null){DataRowrow=table.NewRow();for(inti=0;i〈pFeature。Fields。FieldCount;i++){//如果字段類型是幾何類型esriFieldTypeGeometry,則字段值為shapetype//反之為get_Value()if(pFeature。Fields。get_Field(i).Type==esriFieldType。esriFieldTypeGeometry){row[i]=shapetype;}else{row[i]=pFeature.get_Value(i).ToString();}}table。Rows。Add(row);//游標向下移動一個要素,指向下一個要素pFeature=pFeatureCursor。NextFeature();}ds。Tables。Add(table);//datagridview綁定數據源datagridview。DataSource=ds.Tables["MyTable”];}}4、FixedZoomIn類源碼usingSystem;usingSystem。Drawing;usingSystem.Runtime。InteropServices;usingESRI。ArcGIS。ADF。BaseClasses;usingESRI.ArcGIS。ADF。CATIDs;usingESRI.ArcGIS.Controls;usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geometry;namespaceMyMap。Classes{[Guid("d122d92b-6229-4116—ab3e-a45b1d3d05bc")][ClassInterface(ClassInterfaceType.None)][ProgId(”MyMap。Classes.FixedZoomIn")]publicsealedclassFixedZoomIn:BaseCommand{#regionCOMRegistrationFunction(s)[ComRegisterFunction()][ComVisible(false)]staticvoidRegisterFunction(TyperegisterType){//RequiredforArcGISComponentCategoryRegistrarsupportArcGISCategoryRegistration(registerType);}[ComUnregisterFunction()][ComVisible(false)]staticvoidUnregisterFunction(TyperegisterType){//RequiredforArcGISComponentCategoryRegistrarsupportArcGISCategoryUnregistration(registerType);}#regionArcGISComponentCategoryRegistrargeneratedcodeprivatestaticvoidArcGISCategoryRegistration(TyperegisterType){stringregKey=string。Format(”HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}",registerType.GUID);ControlsCommands.Register(regKe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網絡管理員考試的復習大綱探討試題及答案
- 主管工作總結的結果評估計劃
- 法學概論中常見法律術語解讀試題及答案
- 財務課程學習的重要性計劃
- 自信面對2025年法學概論考試試題及答案
- 2024年南昌航空大學輔導員考試真題
- 2024年烏什縣人民醫(yī)院招聘筆試真題
- 法學教育的現(xiàn)狀與未來試題及答案
- 2024年湖北省生態(tài)環(huán)境廳下屬事業(yè)單位真題
- 法學概論法律教育政策的研究進展試題及答案
- AI時代的挑戰(zhàn)與機遇2024年人工智能的應用與發(fā)展
- 人教版六年級上冊數學第五、六單元測試題(含答案)
- 陜西省西安市蓮湖區(qū)2023-2024學年六年級下學期期末英語試題
- 高中化學優(yōu)質課說課 海水資源的開發(fā)利用
- 企業(yè)錄用通知書offer模板
- 人際溝通與禮儀智慧樹知到課后章節(jié)答案2023年下河北工業(yè)職業(yè)技術學院
- 責任書-景區(qū)安全生產責任書
- QB∕T 3826-1999 輕工產品金屬鍍層和化學處理層的耐腐蝕試驗方法 中性鹽霧試驗(NSS)法
- 田徑運動會競賽團體總分記錄表
- 藥物臨床試驗質量管理規(guī)范(GCP)課件
- 從deepfakes深度偽造技術看AI安全
評論
0/150
提交評論