版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄1、 ArcGIS 簡(jiǎn)介 22、 ArcGIS 開(kāi)發(fā)方法介紹 2三、數(shù)據(jù)庫(kù)設(shè)計(jì) 21、數(shù)據(jù)庫(kù)的建立 22、數(shù)據(jù)表的設(shè)計(jì) 3四、地理數(shù)據(jù)入庫(kù)(地圖掃描矢量化方法介紹) 3五、功能設(shè)計(jì)(流程圖) 5六、程序運(yùn)行界面介紹 61、用戶登錄界面 62、主程序界面 63、屬性查詢界面 74、三角網(wǎng)及泰森多邊形 7七、程序解析說(shuō)明 81、用戶登錄界面程序解析說(shuō)明 82、屬性查詢程序解析說(shuō)明 93、自定義控件命令解析 114、三角網(wǎng)及泰森多邊形構(gòu)建解析 11八、源代碼附錄 141、用戶登錄源碼 142、屬性查詢?cè)创a 173、DisplayToDataGridDAL類源碼214、FixedZoomln 類源
2、碼225、FixedZoomOut 類源碼 246、FullExtent 類源碼267、 Pan 類源碼 288、 ZoomIn 類源碼 319、 ZoomOut 類源碼 34地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告一、ArcGI漪介ArcGIS 是美國(guó) ESRI (Environmental Systems Research Institute, Inc.美國(guó)環(huán)境系 統(tǒng)研究所公司)推出的一條為不同需求層次用戶提供的全面的、可伸縮的 GIS產(chǎn)品 線和解決方案。ESRI是GIS領(lǐng)域的拓荒者和領(lǐng)導(dǎo)者,而 ArcGIS也代表了當(dāng)前GIS 行業(yè)最高的技術(shù)水平。ArcGIS是一個(gè)可伸縮的GIS平臺(tái),可以運(yùn)行在桌面端、服
3、務(wù)器端和移動(dòng)設(shè)備上。 它包含了一套建設(shè)完整GIS系統(tǒng)的應(yīng)用軟件,這些軟件可以互相獨(dú)立或集成配合使 用,為不同需求的用戶提供完善的解決之道。ArcGIS是基于一套共享的GIS組件開(kāi)發(fā)實(shí)現(xiàn)的,這套組件被命名為ArcObjects, 它包含了大量可編程組件,實(shí)現(xiàn)了 ArcGIS的全部功能。因此,ArcObjects可以被認(rèn) 為是ArcGIS產(chǎn)品的核心,熟悉 ArcObjects的過(guò)程同時(shí)也是熟悉 ArcGIS Engine的過(guò)二、ArcGIS開(kāi)發(fā)方法介紹Gis的開(kāi)發(fā)方法有三種,即獨(dú)立開(kāi)發(fā),宿主型二次開(kāi)發(fā),基于 gis組件的二次開(kāi) 發(fā),其中獨(dú)立開(kāi)發(fā)為底層開(kāi)發(fā),不依賴于任何 gis工具軟件,開(kāi)發(fā)難度太大
4、,后兩者 是基于一種軟件的二次開(kāi)發(fā),這樣的二次開(kāi)發(fā)則相對(duì)較簡(jiǎn)單,他的好處也是顯而易 見(jiàn)的。Esri公司推出的ArcGIS產(chǎn)品不僅僅包含基礎(chǔ)平臺(tái)軟件,也包含供用戶二次開(kāi)發(fā) 的組件,那么這些組件也包含 C/S、B/S、移動(dòng)端的。C/S架構(gòu)主要是應(yīng)用于局域網(wǎng) 方面,一般是安裝開(kāi)發(fā)軟件,一般情況下機(jī)器都不連互聯(lián)網(wǎng),主要處理數(shù)據(jù)編輯、 數(shù)據(jù)入庫(kù)、地圖整飾等對(duì)機(jī)器性能要求比較高。B/S架構(gòu)主要應(yīng)用于局域網(wǎng)或者互聯(lián) 網(wǎng),一般情況下使用瀏覽器,主要是進(jìn)行數(shù)據(jù)查詢、分析等。ArcGIS Engine開(kāi)發(fā)工具包是一個(gè)基于組件的軟件開(kāi)發(fā)產(chǎn)品,用于建立和部署自 定義GIS和制圖應(yīng)用程序。ArcGIS Engine開(kāi)發(fā)
5、工具包不是一個(gè)終端用戶產(chǎn)品,而是 一個(gè)應(yīng)用程序開(kāi)發(fā)人員的工具包。 可以用ArcGIS Engine開(kāi)發(fā)工具包建立基本的地圖 瀏覽器或綜合、動(dòng)態(tài)的GIS編輯工具。使用ArcGIS Engine開(kāi)發(fā)工具包,開(kāi)發(fā)人員在 建立定制的地圖接口方面具有前所未有的靈活性。開(kāi)發(fā)人員可以使用幾個(gè)API中的任何一個(gè)來(lái)建立獨(dú)一無(wú)二的應(yīng)用程序,或者將ArcGIS Engine組件與其他軟件組件組合起來(lái)實(shí)現(xiàn)地圖與用戶管理信息之間的協(xié)同關(guān)系。三、數(shù)據(jù)庫(kù)設(shè)計(jì)1、數(shù)據(jù)庫(kù)的建立通過(guò)ArcCatalog創(chuàng)建個(gè)人地理數(shù)據(jù)庫(kù) >>要素集 >>要素類 >>編輯屬性-I i NEU全圖 日由NEUG3
6、冷體育場(chǎng) 回房屋 aafw 國(guó)草地 以路燈 三道路2、數(shù)據(jù)表的設(shè)計(jì)(1)房屋字段名稱字段解釋長(zhǎng)度備注IDID號(hào)LongName名稱Char20Owner所有者Char20Layers層數(shù)Integer20Material材質(zhì)Char20Add地址Char40BuildArea建筑面積FloatRemark備注Char40(2)道路字段名稱字段解釋長(zhǎng)度備注IDID號(hào)LongName名稱Char20Material鋪設(shè)材料Char20Width道路寬度FloatRemark備注Char40等等四、地理數(shù)據(jù)入庫(kù)(地圖掃描矢量化方法介紹)1、打開(kāi)ArcMap”添加“影像配準(zhǔn)”工具欄。把需要進(jìn)行配準(zhǔn)的影
7、像一“校內(nèi)平面圖 測(cè)繪14級(jí).dwg”添加到ArcMap中,會(huì)發(fā)現(xiàn)“影像配準(zhǔn)”工具欄中的工具被激活。2、在“影像配準(zhǔn)”工具欄上,點(diǎn)擊“添加控制點(diǎn)(add control point)”按鈕。使用該 工具在掃描圖上精確到找一個(gè)控制點(diǎn)點(diǎn)擊,然后鼠標(biāo)右擊輸入該點(diǎn)實(shí)際的坐標(biāo)位置。用相同的方法,在影像上增加多個(gè)控制點(diǎn)(大于 3個(gè)),輸入它們的實(shí)際坐標(biāo)。點(diǎn)擊 “影像配準(zhǔn)”工具欄上的“查看鏈接表(view link table)”按鈕。對(duì)于誤差較大的控 制點(diǎn),可以刪除然后重新采集。3、打開(kāi)ArcCatalog.在指定目錄下,鼠標(biāo)右擊,在“新建”中,選擇“個(gè)人Geodatabas3。 并修改該Geodatab
8、ase據(jù)庫(kù)的名稱。右擊新建要素集并為要素集設(shè)置投影坐標(biāo)系。右擊新建要素類,選擇要素類型,并為要素命名,添加要素屬性字段“Name”等。這樣便建好了一個(gè)點(diǎn),線或面要素4、在ArcMap中編輯工作條上點(diǎn)擊開(kāi)始編輯,這時(shí)會(huì)彈出來(lái)一個(gè)窗口選擇要素,然 后在已經(jīng)配準(zhǔn)后的圖像上選擇相應(yīng)的要素類型一一繪制,右擊圖層控件上的某個(gè)要 素圖層打開(kāi)屬性表可以編輯屬性。地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告5 / 385、將矢量化好后的圖層導(dǎo)出為(*mxd)文件邛於耳中 五、功能設(shè)計(jì)(流程圖)在5分U內(nèi)連續(xù)登錯(cuò)三次需等待弓。分鐘再次登錄,每5分4巾量借記覆源露一打開(kāi)地圖文檔(mxd ) .shp)顯丁在MapCortrol顯丁在T
9、OCControl點(diǎn)擊屬性杳詢建1E磬地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告, UirlMHBlE LPiXnU 巾L六、程序運(yùn)行界面介紹1、用戶登錄界面2、主程序界面地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告7 / 38地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告3、屬性查詢界面地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告9 / 384、三角網(wǎng)及泰森多邊形七、程序解析說(shuō)明1、用戶登錄界面程序解析說(shuō)明用戶登錄設(shè)計(jì)思路:(1)用戶輸入用戶名和密碼,用戶名不能為空,密碼不能為空。(2)密碼在五分鐘之內(nèi)連續(xù)輸錯(cuò)三次,用戶名被鎖定,30分鐘后才能再次登錄。(3)若密碼輸錯(cuò)次數(shù)小于3次,則從最后一次輸錯(cuò)時(shí)刻算起,五分鐘之后用戶登錄錯(cuò) 誤次數(shù)歸零。用戶注冊(cè),數(shù)據(jù)庫(kù)中檢索此用戶
10、,若用戶存在則提示用戶名已存在,反之注冊(cè)成 功,需重新登錄。重點(diǎn)代碼解析:使用參數(shù)化查詢避免注入漏洞攻擊,用戶信息存儲(chǔ)在SQL Server數(shù)據(jù)庫(kù)的T_User表中/只用來(lái)執(zhí)行查詢結(jié)果較少的sqlpublicstatic DataSet ExecuteDataSet( string sql, paramsSqlParameter 口 parameters)using ( SqlConnection conn = newSqlConnection (ConStr)conn.Open();using ( SqlCommandcmd = conn.CreateCommand()cmd.Command
11、Text = sql;cmd.Parameters.AddRange(parameters);/SqlDataAdapter 如同一個(gè)適配器,過(guò)渡橋梁的作用SqlDataAdapter adapter = newSqlDataAdapter (cmd);DataSet dataset = neWDataSet ();adapter.Fill(dataset);return dataset;當(dāng)用戶輸錯(cuò)三次以上并且時(shí)間少于30分鐘時(shí)不允許登陸,TimeSpants =DateTime.Now - date;用于存儲(chǔ)間隔時(shí)間if (errortimes >= 3)DateTime date =
12、 ( DateTime )row "Lock"TimeSpan ts = DateTime .Now - date;if (ts.TotalMinutes <= 30)MessageBoxShow( 輸入錯(cuò)誤次數(shù)太多,用戶已被鎖定,請(qǐng)于30分鐘后再登陸,剩余時(shí)間"+(30 - ts.TotalMinutes).ToString("0" ) + "分鐘","錯(cuò)誤提示",MessageBoxButtons .OK, MessageBoxIcon .Error);return ; else/輸錯(cuò)三次后30
13、分鐘后更新ErorrTimes=0SqlHelper .NonQuery( "Update T_User set ErorrTimes=0 where Id=id" , newSqlParameter ("id", id); 3、若密碼輸錯(cuò)次數(shù)小于3次,則從最后一次輸錯(cuò)時(shí)刻算起,五分鐘之后用戶登錄錯(cuò) 誤次數(shù)歸零即 Update T_User set ErorrTimes=1 where Id=id TimeSpan ts = DateTime .Now - Convert .ToDateTime(date);if (ts.TotalMinutes >
14、; 5) SqlHelper .NonQuery( "Update T_User set ErorrTimes=1 where Id=id" , newSqlParameter ("id", id);2、屬性查詢程序解析說(shuō)明重點(diǎn)代碼解析:(1)進(jìn)入屬性查詢界面的代碼:通過(guò)AttributeQueryForm類的構(gòu)造函數(shù)來(lái)存儲(chǔ)地圖的數(shù)據(jù)和綁定 DataGridView的數(shù)AttributeQueryForm attributequery = newAttributeQueryForm (this .axMapControl1, this .dataGrid
15、View1);attributequ ery.ShowDialogO;從主程序axMapControl傳值過(guò)來(lái)的地圖數(shù)據(jù)存儲(chǔ)在private AxMapControl mMapControl;并且在屬性查詢窗體的 ComboBox!合控件cboLayer中添加各個(gè)圖層名 /圖層名稱加入cboLayer this .cboLayer.Items.Add(strLayerName);通過(guò)get_Layer(cboLayer.SelectedIndex)獲取選中圖層,并將每個(gè)圖層的字段名顯示在名為cboField的ComboBox件。strFldName = pFeatureClass.Fields
16、.get_Field(i).Name;/圖層名稱加入cboFieldthis .cboField.Items.Add(strFldName);(3)屬性查詢中需要認(rèn)識(shí)學(xué)習(xí)接口的相關(guān)知識(shí),接口是一種規(guī)范、功能。在屬性查詢 中我們需要用到IQueryFilter接口,該接口通過(guò) WhereClause屬性來(lái)獲取查詢數(shù)據(jù), 類似于SQ中的where語(yǔ)句。然后再通過(guò)圖層的Search方法基于查詢條件返回要素游 地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告標(biāo)pFeatureCursor 。如下圖,pFeatureCursor指針一開(kāi)始指向第0層,每調(diào)用一下 NextFeature()方法,指針就往下移動(dòng)一格直到指向 nul
17、l代碼示例:/定義圖層,要素游標(biāo),查詢過(guò)濾器,要素IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeatureSelection pFeatureSelection;IActiveView activeview;IFeature pFeature;/獲取圖層pFeatureLayer = this .mMapControl.Map.get_Layer(GetLayerindexbyName(cboLayer.Text) asIFeatureLayer ;/如果圖層名稱不是
18、cboLayer.Text ,程序退出if (pFeatureLayer.Name != cboLayer.Text) return /清除上次查詢結(jié)果this .mMapControl.Map.ClearSelection();activeview = this .mMapControl.Map asIActiveView ;/pQueryFilter 的實(shí)例化pQueryFilter = newQueryFilterClass ();/設(shè)置查詢過(guò)濾條件pQueryFilter.WhereClause= "" + cboField.Text + "='&
19、quot; + txtValue.Text +/基于查詢條件創(chuàng)建指針并回收pFeatureCursor = pFeatureLayer.Search(pQueryFilter,true );/獲取查詢到的要素然后再調(diào)用DisplayToDataGridDAL類中的方法,將查詢出來(lái)的要素字段值顯示在DataGridView中,DisplayToDataGridDAL類是自己寫的一個(gè)類(代碼見(jiàn)附錄) 代碼示例:DisplayToDataGridDAL .Dataview(pFeatureCursor, dataGrid,pFeatureLayer);高亮并居中顯示選中的要素:activeview.
20、Extent =pFeature.Shape.Envelope;activeview.Refresh();3、自定義控件命令解析以下講述ArcEngine自定義開(kāi)發(fā)的一些控件命令,如居中放大,居中縮小,拉框 放大,拉框縮小,漫游,顯示全圖等?;贐aseCommand功能實(shí)現(xiàn)與Button的功能類似,是當(dāng)鼠標(biāo)點(diǎn)擊按鈕的時(shí)候, MapControl控件會(huì)對(duì)其中的命令做出相應(yīng)響應(yīng)而無(wú)需額外的操作,如ArcMa葉的居中放大 FixedZoomln ,居中縮小 FixedZoomOut,全圖 FullExtent 等。對(duì)于BaseTool來(lái)說(shuō),點(diǎn)擊該功能之后,只是開(kāi)啟一個(gè)交互的過(guò)程,需要用戶再用 鼠標(biāo)
21、、鍵盤等對(duì)地圖做進(jìn)一步交互式的操作,MapControl控件才會(huì)予以相應(yīng),如ArcMa葉的拉11放大ZoomIn拉框縮小ZoomOut漫游Pan。以FixedZoomIn為例,雙擊解決方案資源管理器中的FixedZoomIn.cs項(xiàng),進(jìn)入該類的代碼編寫界面。加入引用“ESRI.ArcGIS.Geometry”,并在該類的最上方添加如下代碼:publicoverridevoid OnClick()/ TODO: Add FixedZoomIn.OnClick implementation /獲取當(dāng)前視圖范圍IActiveView pActiveView = m_hookHelper.Active
22、View;IEnvelope pEnvelope = pActiveView.Extent;/擴(kuò)大視圖范圍并刷新視圖pEnvelope.Expand(0.5, 0.5, true );pActiveView.Extent = pEnvelope;pActiveView.Refresh();在主程序代碼中還添加了一個(gè)全局變量mTool,以確定選擇的是哪個(gè)控件命令命令privatestring mTool;privatevoid menuFixedZoomIn_Click( object sender, EventArgs e)/聲明與初始化FixedZoomIn fixedZoomin = ne
23、wFixedZoomIn ();/ 與 MapControl 關(guān)聯(lián)fixedZoomin.OnCreate( this .axMapControl1.Object);fixedZoomin.OnClick();4、三角網(wǎng)及泰森多邊形構(gòu)建解析首先在Form窗體上加一個(gè)PictureBox控件,在PictureBox的MouseDown事件下通過(guò)每次點(diǎn)擊獲取點(diǎn)的坐標(biāo)e.X, e.Yprivatevoid picMap_MouseDown( object sender, MouseEventArgs e) Graphics g =( PictureBox )sender).CreateGraphic
24、s();g.FillEllipse( Brushes .Black, e.X, e.Y, 5, 5);Point pt = newPoint (e.X, e.Y);myPoints.Add(pt);g.Dispose();三角網(wǎng)的構(gòu)建采用逐點(diǎn)插入法,首先對(duì)在鼠標(biāo)單擊事件下獲取的點(diǎn)集進(jìn)行排序,排 序時(shí)X坐標(biāo)從小到大排列,若X坐標(biāo)相同則Y坐標(biāo)從小到大排列。構(gòu)建一個(gè)可以包含 所有點(diǎn)集的超級(jí)三角形,并將超級(jí)三角形的三個(gè)頂點(diǎn)存入Triangle表中。從點(diǎn)集中取點(diǎn)判斷點(diǎn)是否在三角形內(nèi),若點(diǎn)在三角形內(nèi),則將該三角形三邊存入邊列表中,若 并從三角形列表中刪除該三角形,如此循環(huán),遍歷點(diǎn)集里所有的點(diǎn)。最后刪除與超
25、 級(jí)三角形有共同頂點(diǎn)的三角形及凹邊界處三角形重點(diǎn)代碼示例:if (myPoints.Count <= 0)return ;else/對(duì)點(diǎn)集進(jìn)行排序,先按河標(biāo)從大到小排序/ X坐標(biāo)相同的按Y坐標(biāo)從大到小排序myPoints = SortPoints(myPoints);/獲得超級(jí)三角形SuperTriangle(myPoints);int i = 0;while (i < myPoints.Count)Point pt = myPointsi;List <List <Point >> edjest = newList <List <Point &g
26、t;>();int j = 0;while (triangle.Count != 0 && triangle.Count - 1 >= j)bool flag = true ;List object > mycircle = Circle(triangle, j);Point center = ( Point )mycircle0;double radius = ( double )mycircle1;if (pt.X > (center.X + radius)flag=true;elseif (Inside(pt, mycircle)/edjest =
27、 Addnew(traingle, j);List <List <Point >> ed = Addnew(triangle, j);edjest.Add(ed0);edjest.Add(ed1);edjest.Add(ed2);triangle.RemoveAt(j);flag = false ;if (flag)j+;/刪除重復(fù)的邊edjest = Delete(edjest);triangle = NewTriangle(pt, edjest);i+;/刪除以超級(jí)三角形頂點(diǎn)為頂點(diǎn)的三角形triangle = SuperDelete(supertriangle);/
28、刪除凹邊界處三角形triangle = TraingleDelete();usingfor (Point(Graphics g = this .picMap.CreateGraphics() int j = 0; j < triangle.Count; j+)myPoint = newPoint 3;地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告15 / 38myPoint0=(myPoint1=(myPoint2=( g.DrawPolygon(Point )trianglej0;Point )triangle皿1;Point )triangle皿2;newPen( Brushes .Red,3), myP
29、oint);構(gòu)建泰森多邊形需要構(gòu)建三角網(wǎng)。找出每個(gè)離散點(diǎn)周圍的三角形即以該離散點(diǎn)為共 同頂點(diǎn)的三角形,按逆時(shí)針排列起來(lái)以便下一步生成泰森多邊形,連接該離散點(diǎn)周 圍三角形的外接圓的圓心。三角網(wǎng)邊界處的泰森多邊形可做垂直平分線與圖廓相交, 與圖廓一起形成泰森多邊形。(代碼見(jiàn)附錄) 重點(diǎn)代碼示例:/使三角形三個(gè)點(diǎn)坐標(biāo)都按逆時(shí)針?lè)较虼鎯?chǔ)triangle= Thiessen .SortTraingle(triangle);/存儲(chǔ)三角網(wǎng)所有三角形的邊Thiessen .Edge(triangle);/構(gòu)成邊界的邊集合Thiessen .BorderEdge( Thiessen .allEdge);/尋找以
30、邊界點(diǎn)為頂點(diǎn)的三角形集合Thiessen .BorderTriangle( Thiessen .borderEdge, triangle);/除邊界點(diǎn)外其他離散點(diǎn)Thiessen .CenterPoint(myPoints, Thiessen .borderEdge);/除邊界點(diǎn)外其他離散點(diǎn)構(gòu)成的泰森多邊形集合Thiessen .ThiessenEdge(triangle, Thiessen .centerpoint);/邊界離散點(diǎn)構(gòu)成的泰森多邊形集合Thiessen .MyBorderTheissen( Thiessen .borderEdge, Thiessen .myBorderTria
31、ngle);using ( Graphics g = this .picMap.CreateGraphics() /繪制除邊界點(diǎn)外其他離散點(diǎn)構(gòu)成的泰森多邊形集合for ( int i = 0; i < Thiessen .myTheissen.Count; i+) g.DrawPolygon( newPen( Brushes .Black,3), Thiessen .myTheisseni.ToArray(); /繪制邊界離散點(diǎn)構(gòu)成的泰森多邊形集合for (int i = 0; i < Thiessen .myBorderTheissen.Count; i+) g.DrawPoly
32、gon( newPen( Brushes .Black,3), Thiessen .myBorderTheisseni.ToArray(); 八、源代碼附錄1、用戶登錄源碼using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace
33、MyMap publicpartialclass LoginWindow : Form public LoginWindow() InitializeComponent(); privatevoid btnLogin_Click( object sender, EventArgs e) if (txtUserName.Text.Length <= 0) MessageBoxShow("請(qǐng)輸入用戶名"); return ; if (txtpwdPassword.Text.Length <= 0)MessageBoxShow("請(qǐng)輸入密碼!”力 retur
34、n ;DataSet ds = SqlHelper .ExecuteDataSet( "select * from T_User where UserName=Name", newSqlParameter ("Name" txtUserName.Text);if (ds.Tables0.Rows.Count <= 0) MessageBoxShow("用戶不存在!"); return ;if (ds.Tables0.Rows.Count > 1) thrownew Exception ("不好啦!重復(fù)了 !&qu
35、ot;);DataRow row = ds.Tables0.Rows0;string password = ( string )row "Password" long id = ( long )row "Id"int errortimes = ( int )row "ErorrTimes" ;/錯(cuò)誤次數(shù)大于3時(shí)/防御性編程if (errortimes >= 3) DateTime date = ( DateTime )row "Lock"TimeSpan ts = DateTime .Now - date;
36、if (ts.TotalMinutes <= 30)MessageBoxShow( 輸入錯(cuò)誤次數(shù)太多,用戶已被鎖定 ,請(qǐng)于30分鐘后再登陸,剩余時(shí)間"+(30 - ts.TotalMinutes).ToString("0" ) + "分鐘","錯(cuò)誤提示",MessageBoxButtons .OK, MessageBoxIcon .Error); return ; else/輸錯(cuò)三次后30分鐘后更新ErorrTimes=0SqlHelper .NonQuery( "Update T_User set Eror
37、rTimes=0 where Id=id" , newSqlParameter ("id", id);if (password = txtpwdPassword.Text) DialogResult result=MessageBoxShow("歡迎您登陸!","用戶登錄",MessageBoxButtons .OKCancel, MessageBoxIcon .Question);this .Hide();if (result = DialogResult .OK)地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告MapWindowmw = neW
38、MapWindoW);DialogResult mapresult= mw.ShowDialog();if (mapresult= DialogResult .Cancel) Application .Exit();elseApplication .Exit(); else MessageBoxShow("密碼錯(cuò)誤!");SqlHelper .NonQuery( "Update T_User set ErorrTimes=ErorrTimes+1,Lock=GETDATE() where Id=id", newSqlParameter ("id
39、", id);object date = row "Lock"if (date = DBNull .Value)date = DateTime .Now;TimeSpan ts = DateTime .Now - Convert .ToDateTime(date);if (ts.TotalMinutes > 5) SqlHelper .NonQuery( "Update T_User set ErorrTimes=1 where Id=id" , newSqlParameter ("id", id); return ;
40、 privatevoid btnCancel_Click( object sender, EventArgs e) this .Close();privatevoid btnRegister_Click( object sender, EventArgs e)DataSet ds = SqlHelper .ExecuteDataSet( "select * from T_User where UserName=Name" newSqlParameter ("Name" txtUserName.Text);if (ds.Tables0.Rows.Count
41、 >= 1) /throw new Exception(" 不好啦!重復(fù)了 !");MessageBoxShow("用戶名已存在,請(qǐng)重新輸入用戶名注冊(cè)");return ;if (txtUserName.Text.Length <= 0)MessageBoxShow("用戶名不能為空!"); return ;if (txtpwdPassword.Text.Length <= 0) MessageBoxShow("密碼不能為空!"); return ;SqlHelper .NonQuery( &qu
42、ot;insert into T_User(UserName,PassWord,ErorrTimes) Values。' txtUserName.Text +"','"+ txtpwdPassword.Text +"',0)");MessageBoxShow("恭喜"+ txtUserName.Text +"注冊(cè)成功!請(qǐng)重新登錄 ","注冊(cè)");txtUserName.Text =txtpwdPassword.Text = """&q
43、uot;2、屬性查詢?cè)创a地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告19 / 38using using using using using using using using using using using usingFormSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;ESRI.ArcGIS.Controls;ESRI.ArcGIS.Carto;ESRI.ArcGIS.Geodatabase;ESR
44、I.ArcGIS.Display;namespace MyMappublicpartialclass AttributeQueryForm/存儲(chǔ)地圖數(shù)據(jù) private AxMapControl mMapControl;private DataGridView dataGrid;/存儲(chǔ)當(dāng)前選中圖層,IFeatureLayer 繼承自ILayer private IFeatureLayer mFeatureLayer;/通過(guò)構(gòu)造函數(shù)來(lái)傳值public AttributeQueryForm( AxMapControl mapcontrol, DataGridView dataGridView)In
45、itializeComponent();this .mMapControl = mapcontrol;this .dataGrid = dataGridView;public AttributeQueryForm() privateint GetLayerindexbyName( string cbolayername) int i;for (i = 0; i < mMapControl.LayerCount; i+) if (cbolayername = mMapControl.get_Layer(i).Name) break ; return i;privatevoid btnOk_
46、Click( object sender, EventArgs e)if (txtValue.Text ="")MessageBoxShow("請(qǐng)輸入您要查詢什么 "); return ;/定義圖層,要素游標(biāo),查詢過(guò)濾器,要素 IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeatureSelection pFeatureSelection; IActiveView activeview;IFeature pFeature;/獲取圖
47、層pFeatureLayer = this .mMapControl.Map.get_Layer(GetLayerindexbyName(cboLayer.Text) asIFeatureLayer ;/如果圖層名稱不是cboLayer.Text ,程序退出 if (pFeatureLayer.Name != cboLayer.Text) return ;/清除上次查詢結(jié)果this .mMapControl.Map.ClearSelection();activeview = this .mMapControl.Map asIActiveView ;/IFeatureClass pFeature
48、Class = pFeatureLayer.FeatureClass;/pQueryFilter的實(shí)例化pQueryFilter = neWQueryFilterClass ();/設(shè)置查詢過(guò)濾條件 pQueryFilter.WhereClause= "" + cboField.Text + "='" + txtValue.Text + ""'/基于查詢條件創(chuàng)建指針并回收 pFeatureCursor = pFeatureLayer.Search(pQueryFilter,true );/獲取查詢到的要素pFeatur
49、e = DisplayToDataGridDAL .GetFeature(pFeatureCursor);/獲取查詢到的要素 pFeatureSelection = pFeatureLayer asIFeatureSelection ; /根據(jù)查詢條件選擇要素pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum .esriSelectionResultNew, false ); /QI 至1J ISelectionSet ISelectionSet pSelectionSet = pFeatureSelec
50、tion.SelectionSet; /判斷是否獲取到要素 if (pFeature!= null ) /The selection set that defines the subset of features in a selection layer. /ISelectionSet DefinitionSelectionSet get; 只讀屬性IFeatureLayerDefinition pFDefinition = pFeatureLayer asIFeatureLayerDefinition ;/創(chuàng)建新圖層IFeatureLayer pNewFeatureLayer = pFDef
51、inition.CreateSelectionLayer("newlayerName",true , null , null ); pNewFeatureLayer.Name ="查詢結(jié)果";mMapControl.AddLayer(pNewFeatureLayer asILayer );/獲取最小外包矩形并放大到當(dāng)前視圖范圍activeview.Extent =pFeature.Shape.Envelope; activeview.Refresh(); else /沒(méi)有得到pFeature的提示 MessageBoxShow("沒(méi)有找至ij
52、" + txtValue.Text,"提示");return ;/把查詢到的要素的屬性顯示到DataGridView中DisplayToDataGridDAL .Dataview(pFeatureCursor, dataGrid,pFeatureLayer);this .mMapControl.DeleteLayer(0); this .mMapControl.Refresh(); privatevoid AttributeQueryForm_Load( object sender, EventArgs e) /MapControl中沒(méi)有圖層時(shí)返回if ( thi
53、s .mMapControl.LayerCount <= 0)地理信息系統(tǒng)課程設(shè)計(jì)報(bào)告return ; /獲取MapControl中的全部圖層名稱,并加入 ComboBox /圖層 ILayer pLayer; /圖層名稱 string strLayerName; for ( int i = 0; i < this .mMapControl.LayerCount; i+) pLayer = this .mMapControl.get_Layer(i); strLayerName = pLayer.Name; /圖層名稱加入cboLayer this .cboLayer.Items.
54、Add(strLayerName); /默認(rèn)顯示第一個(gè)選項(xiàng) this .cboLayer.SelectedIndex = 0; privatevoid cboLayer_SelectedIndexChanged( object sender, EventArgs e) this .cboField.Items.Clear(); /獲取cboLayer中選中的圖層 mFeatureLayer = mMapControl.get_Layer(cboLayer.SelectedIndex)asIFeatureLayer ;/要素集合 IFeatureClass pFeatureClass = mFe
55、atureLayer.FeatureClass; /字段名稱 string strFldName; for (int i = 0; i < pFeatureClass.Fields.FieldCount; i+) strFldName = pFeatureClass.Fields.get_Field(i).Name; /圖層名稱加入cboField this .cboField.Items.Add(strFldName); /默認(rèn)顯示第一個(gè)選項(xiàng) this .cboField.SelectedIndex = 0; privatevoid btnCancel_Click( object se
56、nder, EventArgs e) this .Close(); 3、DisplayToDataGridDAL 類源碼class DisplayToDataGridDAL privatestatic IFeature pFeature;/<summary>/返回游標(biāo)所指向的第一個(gè)元素/</summary>/<param name="pFeatureCursor"></param> /<returns></returns>publicstatic IFeature GetFeature( IFeatureCursor pFeatureCursor) return pFeature = pFeatureCursor.NextFeature(); /<summary> /獲取圖層類型 /</summary> /<param name="pLayer"></param> /<returns></returns>publicstati
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球桌面排版系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球醫(yī)療設(shè)備安全解決方案行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)一次性甲狀腺穿刺器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球亞歷山大變石激光器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025廣州市農(nóng)村集體經(jīng)濟(jì)承包合同管理規(guī)定
- 勞務(wù)派遣合同協(xié)議模板范本
- 2025地區(qū)展柜、物料定作布展合同
- 個(gè)人連帶擔(dān)保合同
- 房屋場(chǎng)地租賃合同
- 砌筑勞務(wù)分包合同范本
- 《中國(guó)古代寓言》導(dǎo)讀(課件)2023-2024學(xué)年統(tǒng)編版語(yǔ)文三年級(jí)下冊(cè)
- 五年級(jí)上冊(cè)計(jì)算題大全1000題帶答案
- 工程建設(shè)行業(yè)標(biāo)準(zhǔn)內(nèi)置保溫現(xiàn)澆混凝土復(fù)合剪力墻技術(shù)規(guī)程
- 液壓動(dòng)力元件-柱塞泵課件講解
- 人教版五年級(jí)上冊(cè)數(shù)學(xué)脫式計(jì)算100題及答案
- 屋面細(xì)石混凝土保護(hù)層施工方案及方法
- 2024年1月山西省高三年級(jí)適應(yīng)性調(diào)研測(cè)試(一模)理科綜合試卷(含答案)
- 110kv各類型變壓器的計(jì)算單
- 5A+Chapter+1+Changes+at+home+課件(新思維小學(xué)英語(yǔ))
- 安徽省2023年中考數(shù)學(xué)試卷(附答案)
- 護(hù)工(陪護(hù))培訓(xùn)教材(完整版)資料
評(píng)論
0/150
提交評(píng)論