很久没有写博文了,也是第一次写关于Gis方面的博文。今天就和大家分享一个Mapx的一个简单的例子。
1、安装mapx 5.0安装包。
2、在VS工具箱中添加Mapx控件。
3、下面来看一下具体实现:
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; namespace MapxDemo { /// <summary> ///功能: Mapx画形状的Demo ///作者:胡耕永 /// </summary> public partial class FormMapxDemo : Form { #region Parameters Dictionary<string, MapXLib.Feature> featureList = null;//图元集合 int feaNumber;//图元编号 const string feaPrefix = "fea";//图元标识前缀 MapXLib.Layer m_visionLayer;//图层 #endregion #region Constructor public FormMapxDemo() { InitializeComponent(); } #endregion #region OnLoad protected override void OnLoad(EventArgs e) { base.OnLoad(e); axMap.GeoSet = Application.StartupPath + "\\MapInfo\\广州.gst"; axMap.CreateCustomTool(11, MapXLib.ToolTypeConstants.miToolTypeCircle, MapXLib.CursorConstants.miCrossCursor); axMap.CreateCustomTool(12, MapXLib.ToolTypeConstants.miToolTypeMarquee, MapXLib.CursorConstants.miCrossCursor); axMap.CreateCustomTool(13, MapXLib.ToolTypeConstants.miToolTypeMarquee, MapXLib.CursorConstants.miCrossCursor); featureList = new Dictionary<string, MapXLib.Feature>(); CreateLayer(); } #endregion #region Events private void toolStripButtonRect_Click(object sender, EventArgs e) { axMap.CurrentTool = (MapXLib.ToolConstants)12; //画矩形 } private void axMap_ToolUsed(object sender, AxMapXLib.CMapXEvents_ToolUsedEvent e) { if(m_visionLayer==null) CreateLayer(); MapXLib.Feature feaObj; MapXLib.Point pt1 = new MapXLib.Point(); pt1.Set(e.x1, e.y1); MapXLib.Point pt2 = new MapXLib.Point(); pt2.Set(e.x2, e.y2); if (e.toolNum == 11) { double radius = Math.Sqrt(Math.Pow((pt2.X - pt1.X), 2) + Math.Pow((pt2.Y - pt1.Y), 2)); #region 画圆 try { feaObj = axMap.FeatureFactory.CreateCircularRegion(MapXLib.CircleTypeConstants.miCircleTypeScreen, pt1, radius, MapXLib.MapUnitConstants.miUnitDegree, 100, axMap.DefaultStyle); axMap.Layers._Item(m_visionLayer).AddFeature(feaObj, Type.Missing); feaObj.Update(Type.Missing, Type.Missing); feaObj.KeyValue = feaPrefix + feaNumber++.ToString(); featureList.Add(feaObj.KeyValue, feaObj); } catch (Exception ex) { MessageBox.Show(ex.Message); } #endregion } if (e.toolNum == 12) { #region 画矩形 MapXLib.Style redline = new MapXLib.StyleClass(); redline.LineColor = (uint)MapXLib.ColorConstants.miColorRed; redline.LineWidthUnit = MapXLib.StyleUnitConstants.miStyleUnitPixel; redline.LineWidth = 2; redline.LineStyle = (MapXLib.PenStyleConstants)2; //画笔样式 redline.RegionPattern = MapXLib.FillPatternConstants.miPatternNoFill; MapXLib.Points pts = new MapXLib.Points(); pts.Add(pt1, 1); pts.Add(pt2, 3); pts.AddXY(e.x1, e.y2, 4); pts.AddXY(e.x2, e.y1, 2); try { feaObj = axMap.FeatureFactory.CreateRegion(pts, redline); axMap.Layers._Item(m_visionLayer).AddFeature(feaObj, Type.Missing); feaObj.KeyValue = feaPrefix + feaNumber++.ToString(); featureList.Add(feaObj.KeyValue, feaObj); } catch (Exception ex) { MessageBox.Show(ex.Message); } #endregion } if (e.toolNum == 13) { #region 画椭圆 try { MapXLib.Rectangle rect = new MapXLib.Rectangle(); MapXLib.Style redline = new MapXLib.StyleClass(); redline.LineColor = (uint)MapXLib.ColorConstants.miColorRed; redline.LineWidthUnit = MapXLib.StyleUnitConstants.miStyleUnitPixel; redline.LineWidth = 2; redline.LineStyle = (MapXLib.PenStyleConstants)2; //画笔样式 redline.LineInterleaved = false; rect.Set(e.x1, e.y1, e.x2, e.y2); feaObj = axMap.FeatureFactory.CreateEllipticalRegion(rect, 2, 100, redline); axMap.Layers._Item(m_visionLayer).AddFeature(feaObj, Type.Missing); feaObj.KeyValue = feaPrefix + feaNumber++.ToString(); featureList.Add(feaObj.KeyValue, feaObj); } catch (Exception ex) { MessageBox.Show(ex.Message); } #endregion } } private void toolStripButtonRadius_Click(object sender, EventArgs e) { axMap.CurrentTool = (MapXLib.ToolConstants)11; //画圆形 } private void toolStripButtonEllipse_Click(object sender, EventArgs e) { axMap.CurrentTool = (MapXLib.ToolConstants)13; //画椭圆 } private void toolStripButtonSave_Click(object sender, EventArgs e) { ClearLayer(); } #endregion #region Custom Method /// <summary> /// 创建一个图层 /// </summary> private void CreateLayer() { MapXLib.LayerInfo redlayer = new MapXLib.LayerInfoClass(); redlayer.AddParameter("FileSpec", ""); redlayer.AddParameter("name", "red"); redlayer.AddParameter("TableStorageType", "MemTable"); redlayer.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTemp; MapXLib.Fields flds = new MapXLib.FieldsClass(); redlayer.AddParameter("fields", flds); redlayer.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTemp; m_visionLayer = axMap.Layers.Add(redlayer, 0); } /// <summary> /// 清空图层 /// </summary> private void ClearLayer() { axMap.Layers.Remove(m_visionLayer); m_visionLayer = null; } #endregion } }