ArcEngine程序设计实验报告.docx
- 文档编号:3977448
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:17
- 大小:150.40KB
ArcEngine程序设计实验报告.docx
《ArcEngine程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《ArcEngine程序设计实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
ArcEngine程序设计实验报告
ArcEngine程序设计实验报告
基于VB.NET与ArcEngine开发的地理信息系统
ArcEngine程序设计实验报告
学号:
200725809姓名:
阙泽胜专业方向:
GIS设计与开发
一、实验要求
利用ArcEngine组件,结合VB或.NET开发环境,设计并实现一个小型GIS系统。
1)使用控件要求:
MapControl,ToolBarControl,TocControl等
2)系统的功能模块
1.文件:
打开、保存、退出
2.插入:
文本、点、线、面、CAD、表、指北针、图例、图片
3.常用工具:
选择、取消选择、放大、移图
4.专题制图:
单值渲染、分级渲染、图表渲染
5.视图方式:
地图视图、页面视图、场景视图、Global视图、鹰眼视图(导
航图)
其他功能:
编辑表,查询等
3)参考数据:
WorldData文件中的World.mxd、dj-lu.dwg图、如琴湖.jpg和myDB.mdb。
二、实验步骤及结果
1.搭建系统框架,实现基本功能
系统主界面采用如下架构,上面部分为菜单条和工具条,左面部分为图层管理,中间部分为MapControl控件,右边上面为鹰眼导航图,下边为选择查询功能见图2-1
1
基于VB.NET与ArcEngine开发的地理信息系统
图2-1
2.关键功能实现
(1)加载CAD图
CAD文件的加载有两种形式:
一是要素图层,即以矢量数据的方式加载,二是栅格图层,即以栅格数据方式加载,以作背景图层使用。
如下图2-2所示:
2
基于VB.NET与ArcEngine开发的地理信息系统
实现思路:
1)窗体Load事件中加载:
AxMapControl1复制到AxMapControl2。
pMap.LayerCount,用AxMapControl2.Map.AddLayer(pMap.Layer(i))实现图
层复制.
PrivateSubAxMapControl1_OnMapReplaced(ByValsenderAsObject,ByVale
AsESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent)Handles
AxMapControl1.OnMapReplaced
DimpmapAsIMap
pmap=AxMapControl1.Map
DimiAsInteger
Fori=pmap.LayerCount-1Toi=0Step-1
AxMapControl3.Map.AddLayer(pmap.Layer(i))
Next
okBtn.SetBuddyControl(AxMapControl1)
AxMapControl1.Refresh()
AxMapControl3.Refresh()
EndSub
2)AxMapControl1_OnExtentUpdated事件,即当:
1),定义设置矩形的边线颜色。
5)用设置边
线样式,包括设置填充符号的属性,其PrivateSub
AxMapControl1_OnExtentUpdated(ByValsenderAsObject,ByValeAs
ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent)Handles
AxMapControl1.OnExtentUpdated
DimpEnvAsIEnvelope
pEnv=e.newEnvelope
3
基于VB.NET与ArcEngine开发的地理信息系统
DimpGraAsIGraphicsContainer
DimpAcAsIActiveView
pGra=AxMapControl3.Map
pAc=pGra
pGra.DeleteAllElements()
'获取矩形坐标()
DimpRecAsIRectangleElement
pRec=NewRectangleElement
DimpEleAsIElement
pEle=pRec
pEle.Geometry=pEnv
'设置矩形的边线颜色()
DimpColorAsIRgbColor
pColor=NewRgbColor
pColor.RGB=RGB(255,0,0)
DimpOutLineAsILineSymbol
pOutLine=NewSimpleLineSymbol
pOutLine.Width=1.0
pOutLine.Color=pColor
pColor=NewRgbColor
pColor.RGB=RGB(255,0,0)
pColor.Transparency=0
'设置填充符号的属性()
DimpFillSymbolAsIFillSymbol
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=pColor
pFillSymbol.Outline=pOutLine
DimpFillShapeEleAsIFillShapeElement
pFillShapeEle=pEle
pFillShapeEle.Symbol=pFillSymbol
pGra.AddElement(pFillShapeEle,0)
pAc.PartialRefresh(esriViewDrawPhase.esriViewGraphics,
Nothing,Nothing)
EndSub在AxMapControl2_OnMouseDown事件中加载:
PrivateSubAxMapControl3_OnMouseDown_1(ByValsenderAsSystem.Object,ByValeAs
ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent)Handles
AxMapControl3.OnMouseDown
'拷贝map1到map2
4
基于VB.NET与ArcEngine开发的地理信息系统
DimpMapAsIMap
pMap=AxMapControl1.Map
DimiAsInteger
Fori=0TopMap.LayerCount-1
AxMapControl3.Map.AddLayer(pMap.Layer(i))
Next
DimpEnvAsIEnvelope
pEnv=AxMapControl3.TrackRectangle()
AxMapControl1.Extent=pEnv
AxMapControl1.Refresh()
EndSub
(2)设计属性查询
结合VB.NET的模块和ArcEngineD模块设计如下:
图2-3
具体的实现如下:
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAs
System.EventArgs)Handles选择查询OkButton1.Click
AxMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriVie
wGraphics,Nothing,Nothing)
DimpFeaturlayerAsIFeatureLayer
5
基于VB.NET与ArcEngine开发的地理信息系统
pFeaturlayer=AxMapControl1.Map.Layer(0)
DimstrFilter="CONTINENT='"+searchComboBox2.Text().Trim()+"'"
searchSelection(strFilter,pFeaturlayer)EndSub
(3)专题图表达的实现
包括单值渲染、分级渲染、图表渲染三种方式。
1)单值渲染如下效果:
图2-4
具体实现如下:
PrivateSub简单渲染ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles简单渲染
ToolStripMenuItem.Click
DimpGeoLayerAsIFeatureLayer
pGeoLayer=AxMapControl1.Map.Layer
(1)
DimpGFLayerAsIGeoFeatureLayer
pGFLayer=pGeoLayer
6
基于VB.NET与ArcEngine开发的地理信息系统
'新建一个填充符号
DimpSimpleFillSymAsISimpleFillSymbol
pSimpleFillSym=NewSimpleFillSymbol
pSimpleFillSym.Color=getRGB(0,0,255)
pSimpleFillSym.Style=esriSimpleFillStyle.esriSFSSolid
'新建一个SimpleRender对象
DimpSimpleRenderAsISimpleRenderer
pSimpleRender=NewSimpleRenderer
WithpSimpleRender
.Symbol=pSimpleFillSym
.Description="USA"
.Label="simpleFillRender"
EndWith
DimpTransRenderAsITransparencyRenderer
pTransRender=pSimpleRender
pTransRender.TransparencyField="CONTINATE"
pGFLayer.Renderer=pSimpleRender
AxMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeo
graphy,Nothing,Nothing)
AxTOCControl1.Update()
EndSub
SubSetClassBreakRender(ByValpGFLayerAsIGeoFeatureLayer,ByVal
fieldNameAsString)
'创建ClassBreakRender
DimpCBReaderAsIClassBreaksRenderer
pCBReader=NewClassBreaksRenderer
'获取该字段的最大值、最小值
Dimmax,minAsLong
max=ComputeFieldValue(pGFLayer,fieldName,1)
min=ComputeFieldValue(pGFLayer,fieldName,3)
'设置分级数,字段,
pCBReader.MinimumBreak=min
pCBReader.Field=fieldName
pCBReader.BreakCount=4
'设置每一级,分段范围,符号
DimpFillSymbolAsISimpleFillSymbol
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(125,0,0)
pCBReader.Break(0)=(max-min)/4+min
pCBReader.Symbol(0)=pFillSymbol
'设置每一级,分段范围,符号
pFillSymbol=NewSimpleFillSymbol
7
基于VB.NET与ArcEngine开发的地理信息系统
pFillSymbol.Color=getRGB(0,125,0)
pCBReader.Break
(1)=(max-min)*2/4+min
pCBReader.Symbol
(1)=pFillSymbol
'设置每一级,分段范围,符号
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(0,0,125)
pCBReader.Break
(2)=(max-min)*3/4+min
'设置每一级,分段范围,符号pCBReader.Symbol
(2)=pFillSymbol
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(0,0,250)
pCBReader.Break(3)=max
pCBReader.Symbol(3)=pFillSymbol
pGFLayer.Renderer=pCBReader
AxMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeo
graphy,Nothing,Nothing)
EndSub
FunctionComputeFieldValue(ByValpGFLayerAsIGeoFeatureLayer,
ByValfieldNameAsString,ByValstateAsInteger)AsDouble
DimpTableAsITable
pTable=pGFLayer
DimpCursorAsICursor
pCursor=pTable.Search(Nothing,True)
DimpDataStaticsAsIDataStatistics
DimpSResultsAsIStatisticsResults
pDataStatics=NewDataStatistics
pDataStatics.Cursor=pCursor
pDataStatics.Field=fieldName
pSResults=pDataStatics.Statistics
DimValueAsDouble
SelectCasestate
Case0
Value=pSResults.Count
Case1
Value=pSResults.Maximum
Case2
Value=pSResults.Mean
Case3
Value=pSResults.Minimum
Case4
Value=pSResults.Sum
8
基于VB.NET与ArcEngine开发的地理信息系统
EndSelect
ReturnValue
EndFunction
2)分级渲染效果如下图:
图2-5
具体实现如下:
PrivateSub分级渲染ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles分级渲染
ToolStripMenuItem.Click
DimfieldNameAsString="Cnt_CONTIN"
DimpGeoLayerAsIFeatureLayer
pGeoLayer=AxMapControl1.Map.Layer(0)
DimpGFLayerAsIGeoFeatureLayer
pGFLayer=pGeoLayer
SetClassBreakRender(pGFLayer,fieldName)
EndSub
3)图表渲染效果如下:
9
基于VB.NET与ArcEngine开发的地理信息系统
图2-6
具体实现如下:
PrivateSub图表渲染ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles图表渲染
ToolStripMenuItem.Click
DimfieldName1AsString="Cnt_CONTIN"
DimfieldName2AsString="CityNumber"
DimpGeoLayerAsIFeatureLayer
pGeoLayer=AxMapControl1.Map.Layer(0)
DimpGFLayerAsIGeoFeatureLayer
pGFLayer=pGeoLayer
SetBarChartRender(pGeoLayer,fieldName1,fieldName2)
EndSub
SubSetBarChartRender(ByValpGFLayerAsIGeoFeatureLayer,ByVal
fieldName1AsString,ByValfieldName2AsString)
DimpBarChartSymbolAsIBarChartSymbol
DimpFillSymbolAsIFillSymbol
DimpMarkerSymbolAsIMarkerSymbol
DimpSymbolArrayAsISymbolArray
DimpChartSymbolAsIChartSymbol
DimpChartRendererAsIChartRenderer
10
基于VB.NET与ArcEngine开发的地理信息系统
DimpRendererFieldsAsIRendererFields
pBarChartSymbol=NewBarChartSymbol
'创建柱状符号
pBarChartSymbol.Width=6
'设置柱状符号的宽度,以象素为单位
'获得pMarkerSymbol,pChartSymbol符号接口
pMarkerSymbol=pBarChartSymbol
pChartSymbol=pBarChartSymbol
'获取两个字段的最大值
Dimmax,max1,max2AsDouble
max1=ComputeFieldValue(pGFLayer,fieldName1,1)
max2=ComputeFieldValue(pGFLayer,fieldName2,1)
If(max2>max1)Then:
max=max2
Else:
max=max1
EndIf
'设置ChartSymbol的最大值,以及符号尺寸最大值(象素单位)
pChartSymbol.MaxValue=max
pMarkerSymbol.Size=60
'依据柱状符号,获得符号数组接口,设置第一个柱状图的符号。
pSymbolArray=pBarChartSymbol
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(213,212,252)'pastelgreen
pSymbolArray.AddSymbol(pFillSymbol)
'设置第二个柱状图的符号
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(193,252,179)'pastelpurple
pSymbolArray.AddSymbol(pFillSymbol)
'创建ChartRenderer接口
pChartRenderer=NewChartRenderer
'设置ChartRenderer中的字段,依据这两个字段的数据值,创建柱状图
pRendererFields=pChartRenderer
pRendererFields.AddField(fieldName1)
pRendererFields.AddField(fieldName2)
'将pBarChartSymbol赋值给pChartRenderer的属性
pChartRenderer.ChartSymbol=pBarChartSymbol
'设置图层的背景颜色
pFillSymbol=NewSimpleFillSymbol
pFillSymbol.Color=getRGB(239,228,190)
pChartRenderer.BaseSymbol=pFillSymbol
'设置ChartRenderer的其他属性
pChartRenderer.UseOverposter=False
pChartRenderer.CreateLegend()'创建符号图例
pChartRenderer.Label="PopulationbyGender"
pGFLayer.Renderer=pChartRenderer
11
基于VB.NET与ArcEngine开发的地理信息系统
AxMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBac
kground,Nothing,Nothing)
EndSub
(4)插入文本
设计的界面效果如下:
图2-6
具体实现如下:
PrivateSubAxMapControl1_MouseDown(ByValsenderAsSystem.Object,ByVal
eAsESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent)Handles
AxMapControl1.OnMouseDown
Ifm_CurOper=CurrentOper.AddTextThen
DimmapXAsDouble
Di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcEngine 程序设计 实验 报告