使用ArcGIS实现的鹰眼图-----关于MapControl控件的使用理解

2018-01-26 10:29:37来源:网络收集作者:纳米程序员人点击

分享

[var1]namespace ArcGISNumberOne
{
public partial class EagleEyeMap : Form
{
public EagleEyeMap()
{
InitializeComponent();
}
//OnExtentUpdated事件在MapControl的可视化范围发生变化后发生.改变MapControl中可视化范围的途径包括精确设置范围、缩放、
//漫游或使用IMapControl2::CenterAt方法等
private void MainForm_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
{
//IEnvelope是指地物的外接矩形,用来表示地物图形的大体位置和形状,一般可用于检索地物,判断地物间的拓扑关系,可以使得检索、判断的速度加快
IEnvelope pEnvelop = (IEnvelope)e.newEnvelope;
//IGraphicsContainer主要是管理map上Element对象的。
//Elements也通常被称作Map Elemnts(地图元素)。
//除了数据框(data frame),大多数地图包含一个或多个其他的地图元素,包括:图名,指北针,图例,比例尺条,文字比例尺,图表,报表,文字标注(应该是in the map类型的annotation或自己添加的文本标注内容)和图形(graphics)。
//这些elements的一个共性就是,其主要目的是修饰或标记地图,而不是地理对象本身的抽象。也就是说,不是我们通常所说的地理要素(feature)。这种不同表现在,没有图层承载(实际上是annotation layer等图层承载),最主要的,是没有关联的属性数据(attribute table)。
IGraphicsContainer pGraphicsContainer = DeputyForm.Map as IGraphicsContainer;
//IActiveView 接口定义了 Map 对象的数据显示功能,这个接口管理着绘制图形的显示范围。
IActiveView pActiveView = pGraphicsContainer as IActiveView;
pGraphicsContainer.DeleteAllElements(); //在绘制前,清除axMapControl2中的任何图形元素
//IRectangleElement:标识一个矩形元素的指示器接口。显示矩形的图形元素。
IRectangleElement pRectangleEle = new RectangleElementClass();
IElement pElement = pRectangleEle as IElement;
pElement.Geometry = pEnvelop;//Geometry:几何属性将返回与元素相关的形状,作为一种ige量度。
//设置鹰眼图中的红线框
IRgbColor pColor = new RgbColorClass();
pColor.Red = 255;
pColor.Green = 0;
pColor.Blue = 0;
pColor.Transparency = 255;//这个属性设置透明度;透明:0;不透明:255
//产生一个线符号对象
ILineSymbol pOutline = new SimpleLineSymbolClass();
pOutline.Width = 3;
pOutline.Color = pColor;
//设置颜色属性
pColor = new RgbColorClass();
pColor.Red = 255;
pColor.Green = 0;
pColor.Blue = 0;
pColor.Transparency = 0;
//设置填充符号的属性
IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
pFillSymbol.Color = pColor;
pFillSymbol.Outline = pOutline;
IFillShapeElement pFillShapeEle = pElement as IFillShapeElement;
pFillShapeEle.Symbol = pFillSymbol;
pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}
//OnMapReplace事件发生MapControl的地图被替换后,即IMapControl2::Map被另一个地图替换时(如IMapControl2::LoadMxFile方法被调用时或map属性被明确替换时)触发该事件。用这个事件来保持与当前图层同步。
private void MainForm_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)
{
if (MainForm.LayerCount > 0)
{
DeputyForm.Map = new MapClass();
for (int i = 0; i <= MainForm.Map.LayerCount - 1; i++)
{
DeputyForm.AddLayer(MainForm.get_Layer(i));
}
DeputyForm.Extent = MainForm.Extent;//设置MapControl的显示范围跟主窗体一致
DeputyForm.Refresh();
}
}
//当在MapControl上移动鼠标时不断地触发OnMouseMove事件。
private void DeputyForm_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
if (e.button == 1)// 按下鼠标左键移动矩形框
{
IPoint pPoint = new PointClass();
pPoint.PutCoords(e.mapX, e.mapY);
MainForm.CenterAt(pPoint);
MainForm.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null, null);
}
}
//当在MapControl上点击鼠标任何键时触发OnMouseDown事件。
private void DeputyForm_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
{
if (DeputyForm.Map.LayerCount > 0)
{
if (e.button == 1)
{
IPoint pPoint = new PointClass();
pPoint.PutCoords(e.mapX, e.mapY);
MainForm.CenterAt(pPoint);
MainForm.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}
else if (e.button == 2)//按下鼠标右键移动矩形框
{
IEnvelope pEnv = DeputyForm.TrackRectangle();//TrackRectangle:一个用户定义的矩形
MainForm.Extent = pEnv;
MainForm.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}
}
}
}
}喜欢的朋友们,可以点个赞!使用ArcGIS实现的鹰眼图-----关于MapControl控件的使用理解

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台