C#进行MapX二次开发之控件基本操作
2009-06-27 07:07:59 来源:WEB开发网上篇介绍了MapX的部分基本使用代码,包括放大、缩小、缩放到初始大小(全图)、平移、矩形选择、圆形选择、箭头、打开图层对话框 、打开ActiveX属性对话框 、添加符号等基本操作代码,本篇继续探讨一些控件的基本操作。
MapX提供的标准工具,不同的工具将会使鼠标能够完成多种任务。例如,如果当前的工具设成 miLabelTool,那么当单击鼠标时,会在此特指的地图对象上放置标签。鼠标光标将根据正使用的工具更改形状。MapX 可用的标准工具列表如下所示:
工具 | 常量 | 描述 |
Add Line | MiAddLineTool | 向插入图层添加线图元 |
Add Point | MiAddPointTool | 单击从而向插入图层添加点图元。 |
Add Polyline | MiAddPolyLineTool | 添加折线图元到插入图层。 |
Add Region | MiAddRegionTool | 添加区域图元到插入图层。 |
Arrow | MiArrowTool | 单击标题或注释。并且,它也可用在可编辑的图层中移动选中的图元或者改变其大小。 |
Center | MiCenterTool | 单击鼠标使地图居中显示。 |
Label | miLabelTool | 单击图元进行标注。 |
Pan | MiPanTool | 拖动地图并重定位地图的中心。 |
Polygon Select | MiPolygonSelectTool | 单击鼠标画多边形;在多边形内的对象被选中。 |
Radius Select | MiRadiusSelectTool | 拖动鼠标并选中在拖动半径内的图元。 |
Rect Select | MiRectSelectTool | 拖动鼠标选中在矩形内的图元。 |
Select Tool | miSelectTool | 单击选择图元。 |
Symbol | miSymbolTool | 放置符号注释。 |
Text | miTextTool | 放置文本注释。 |
Zoom In | miZoomInTool | 放大。 |
Zoom Out | miZoomOutTool | 缩小。 |
导出地图为图片的操作代码:
if (axMap1.GeoSet.Length < 1)
{
MessageBox.Show("未加载地图,不能导出!");
return;
}
SaveFileDialog exportFD = new SaveFileDialog();
exportFD.Title = "导出当前地图";
exportFD.Filter = "windows bitmap(*.bmp)|*.bmp|GIF (*.GIF)|*.gif|JPEG (*.JPG;JPEG;JPE)|*.JPG|PNG (*.PNG)|*.PNG|PSD (*.PSD)|*.PSD|TIFF (*.TIF)|*.TIF";
if (exportFD.ShowDialog() == DialogResult.OK && (exportFD.FileName) != null)
{
try
{
axMap1.ExportSelection = true;
switch (exportFD.FilterIndex)
{
case 1:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatBMP, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 2:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatGIF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 3:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatJPEG, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 4:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatPNG, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 5:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatPSD, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 6:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatTIF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
case 7:
axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatWMF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
添加图层的操作代码
OpenFileDialog openFile = new OpenFileDialog();
if (openFile.ShowDialog() == DialogResult.OK)
{
axMap1.Layers.Add(openFile.FileName, 0);//默认值为0,C#调用不能省略默认值,图层的位置
MapXLib.LayerInfo liinfo;
liinfo = new MapXLib.LayerInfoClass();
liinfo.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab;
liinfo.AddParameter("AutoCreateDataset", true);
}
查找图元信息:
MapXLib.Features mX;
mX = this.axMap1.Layers[1].AllFeatures;
this.listView1.Items.Clear();
foreach (MapXLib.Feature mY in mX)
{
ListViewItem mZ = new ListViewItem(mY._FeatureID.ToString());
mZ.SubItems.Add(mY.Name.ToString());
this.listView1.Items.Add(mZ);
}
查找图层信息
MapXLib.Layers mX;
mX = this.axMap1.Layers;
this.listView1.Items.Clear();
foreach (MapXLib.Layer mY in mX)
{
ListViewItem mZ = new ListViewItem(mY._Name);
this.listView1.Items.Add(mZ);
}
获取鼠标移动的坐标
double x = 0;
double y = 0;
axMap1.ConvertCoord(ref e.x, ref e.y, ref x, ref y, MapXLib.ConversionConstants.miScreenToMap);
toolStripStatusLabel1.Text = string.Format("X:{0} Y:{1}", x, y);
放置点工具操作
try
{
MapXLib.Layer mX;
mX = this.axMap1.Layers[1];
mX.Editable = true;
this.axMap1.Layers.InsertionLayer = mX;
this.axMap1.CurrentTool = MapXLib.ToolConstants.miAddPointTool;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
MapX自定义工具的使用:
如果需要一种 MapX 没有提供的工具栏按钮,可以使用 Map.CreateCustomTool 方法来创建自定义工具。创建自定义工具时,需要控制创建工具的“类型”,即:就是要选择此工具是否允许用户单击,或是单击并拖动来画线,或是单击并拖动来画矩形等等。也可以选择使用自定义工具时显示的光标。
下面是自定义测量距离和测量面积的操作代码
private void Form1_Load(object sender, EventArgs e)
{
//记录地图的比例合中心点
this.MapZoom = axMap1.Zoom;
this.CenterX = axMap1.CenterX;
this.CenterY = axMap1.CenterY;
//创建测量距离的
axMap1.CreateCustomTool(99, MapXLib.ToolTypeConstants.miToolTypePoly, MapXLib.CursorConstants.miCrossCursor,
MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);
//创建测量面积的工具
axMap1.CreateCustomTool(98, MapXLib.ToolTypeConstants.miToolTypePolygon, MapXLib.CursorConstants.miCrossCursor,
MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);
}
private void axMap1_PolyToolUsed(object sender, AxMapXLib.CMapXEvents_PolyToolUsedEvent e)
{
if (e.toolNum == 99)//测量距离
{
MapXLib.Points pts = (MapXLib.Points)e.points;
MapXLib.Point pt1, pt2;
double d = 0.0;
//计算顺序两个点距离,累计得到总距离
for (int i = 1; i < pts.Count; i++)
{
pt1 = pts[i];
pt2 = pts[i + 1];
d += axMap1.Distance(pt1.X, pt1.Y, pt2.X, pt2.Y);
}
this.Text = "距离:" + d.ToString();
}
else if (e.toolNum == 98)//面积
{
MapXLib.Points pts = (MapXLib.Points)e.points;
//偷懒了但是很正确
MapXLib.FeatureFactory dd = axMap1.FeatureFactory;
MapXLib.Style style = axMap1.DefaultStyle;
this.Text = "面积:" + dd.CreateRegion(pts, style).Area.ToString();
}
}
private void btnGetDistance_Click(object sender, EventArgs e)
{
//测量距离
axMap1.CurrentTool = (MapXLib.ToolConstants)99;
}
private void btnGetArea_Click(object sender, EventArgs e)
{
//测量面积
axMap1.CurrentTool = (MapXLib.ToolConstants)98;
}
以上代码有一个是事件操作,如果没有采用事件映射的操作,那么要添加下面的代码:
this.axMap1.PolyToolUsed += new AxMapXLib.CMapXEvents_PolyToolUsedEventHandler(this.axMap1_PolyToolUsed);
自定义工具类型的ToolTypeConstants 描述当创建一个自定义工具时可使用的工具类型。它们描述工具的行为(例如,miToolTypeLine 使用户可以画线;miToolTypeCircle 使用户可以画圆等)。自定义工具创建以后,需要为该工具实际要做的编写代码。
常量 | 行为 |
miToolTypePoint | 在指定位置显示点。 |
miToolTypeLine | 画线。 |
miToolTypeCircle | 画圆。 |
miToolTypeMarquee | 画选取框,并选在此框中选择地图对象。 |
miToolTypePoly | 画折线。 |
miToolTypePolygon | 画多边形。 |
文章来源:http://www.iqidi.com
更多精彩
赞助商链接