保存地图
if(m_MapDocument.get_IsReadOnly(m_MapDocument.DocumentFilename)==true)//判断地图属性是否为可读
{
MessageBox.Show("This map document is read only!");return;
}
m_MapDocument.Save(m_MapDocument.UsesRelativePaths,true);//保存地图为当前的地址
MessageBox.Show("Changes saved successfully");
其中m_MapDocument的定义见上篇博文,此处地图是通过IMapDocument接口打开的。
另存为地图
saveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Title = "Save Map Document As";
saveFileDialog1.Filter = "Map Document(*.mxd)|*.mxd";
saveFileDialog1.ShowDialog();
string sFilePath = saveFileDialog1.FileName;
if (sFilePath == "")
{ return; }
if(sFilePath==m_MapDocument.DocumentFilename)
{
SaveDocument();//保存改变至当前文档
}
else
{
m_MapDocument.SaveAs(sFilePath, true, true);//另存为
}
SaveDocument()方法同上保存地图。
新建地图文档
MapDocument pMapDOcument = new MapDocumentClass();
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Title = "Creat New Map Document ";
openFileDialog1.Filter = "Map Document(*.mxd)|*.mxd";
openFileDialog1.ShowDialog();
string sFilePath = openFileDialog1.FileName;
pMapDOcument.New(sFilePath);
pMapDOcument.Open(sFilePath, "");
axMapControl1.Map = pMapDOcument.get_Map(0);
MapControl控件还可以使用AddLayerFromFile方法添加一个图层文件,使用AddshapeFile添加一个Shape文件;使用AddLayer快速添加图层、MoveLayerTo改变一个图层的位置等。
鼠标与控件的交互
使用鼠标拖曳确定地图显示的范围(拉框放大)
写在axMapControl1的MouseDown事件下
axMapControl1.Extent = axMapControl1.TrackRectangle();//改变地图控件显示范围为当前拖曳的区域
axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新地图
地图平移
同样写在axMapControl1的MouseDown事件下
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPagePanning;
axMapControl1.Pan();
绘制图形
MapControl提供了DrawShape和DrawText两种绘制方法在控件上进行绘制,但这两种方法绘制的图形都是缓存,而不能真正保存,一旦窗口重绘,这些图形就会消失。
首先在axMapControl的OnMouseDown事件下产生一个多边形,再使用DrawShape方法将该对象显示出来
IGeometry PGeom = axMapControl1.TrackPolygon();//产生多边形并绘制
DrawMapShape(PGeom);
// axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新地图
DrawMapShape方法:
IRgbColor pColor = new RgbColorClass();//设置多边形的颜色
pColor.Red = 200;pColor.Green = 115;pColor.Blue = 60;
ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();//新建一个绘制图形的填充符号
simpleFillSymbol.Color = pColor;
object osimpleFillSymbol = simpleFillSymbol;
axMapControl1.DrawShape(pGeom, ref osimpleFillSymbol);
tips
- 在开发中会遇到很多与axMapControl交互的情况,一般需要写在OnMouseDown事件下,可以用枚举来区分不同需求下OnMouseDown的反应。
- axMapControl刷新有多种选项,可根据需求选择不同的刷新方式。