ArcGIS Mobile 自定义MapGraphicLayer绘制图形

来源:互联网 发布:2级野猪骑士升级数据 编辑:程序博客网 时间:2024/06/06 05:44

从事过ArcEngine相关工作知道,在ArcEngine中绘制图形有两种存在方式,一种是以要素(feature)的形式,一种是以元素(element)的形式。添加两种不同形式的图形,绘制的方法是不一样的。其中feature需要通过在内存新建或者添加图层,运用编辑工具在图层中添加feature,而element是通过在graphicContainers中添加。grapicContainers相当于在MapControl 中上覆盖的一个透明图层,在该图层中添加上element,而feature是在map中的图层上进行了更改。

ArcGIS Mobile应用程序中添加图形与ArcEngine类似也存在两种方式。一种方式直接编辑feature,这需要素图层含有GlobalID字段,另一种方式就是定义图层图层,继承ArcGIS Mobile sdk中的MapGraphicLayer类,相当于AE中的graphicContainer. 下面就以介绍这种自定义的方式绘制图形。

实现环境:

win7专业版+visual studio 2008 sp1+.net compact framwork 3.5+windows mobile 6.0 professional sdk+ArcGIS Runtime SDK 10.1.1

实现过程:

Step1:在模拟器中构建界面

图1:构建程序界面图

Step2:新建一个类,该类继承MapGrapicLayer.代码如下:

View Code
class CustomGraphicLayer : MapGraphicLayer    {        /// 创建表现symbol        private Symbol m_pointSymbol;        //创建集合的坐标点集合        private CoordinateCollection m_coordinateCollection = new CoordinateCollection();        private Coordinate m_coordinate = new Coordinate();        /// Get or set coordinate collection stored in custom graphic layer         public CoordinateCollection Coordinates        {            get            {                return m_coordinateCollection;            }            set            {                m_coordinateCollection = value;            }        }        public Coordinate Coordinate        {            get { return m_coordinate; }            set { m_coordinate = value; }        }        /// 构造函数        public CustomGraphicLayer()            : base("CustomGraphicLayer")        {            //  m_pointSymbol = new Symbol(new PointPaintOperation(Color.LightGreen, 2, 0, Color.LightGreen, 50, 25, PointPaintStyle.Circle));            m_pointSymbol = new SimpleMarkerSymbol(Color.Red, 50, Color.Red, 25, SimpleMarkerStyle.Circle);        }        /// 重写绘制方法        protected override void Draw(MapSurface pMapSurface)        {            if (pMapSurface == null)            { return; }            if (pMapSurface.DrawingCanceled)            {                return;            }            m_pointSymbol.DrawPoint(pMapSurface, m_coordinate);        }    }

Step 3:对自定义的图层的调用

View Code
 public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            string ss = "\\Storage Card\\Continents";            this.mobileCache1.StoragePath = ss;            if (!mobileCache1.IsValid)            {                MessageBox.Show("invalid file");            }            mobileCache1.Open();            map1.MapLayers.Add(mobileCache1);            map1.MapAction = null;        }        bool flag = false;        private void menuItem1_Click(object sender, EventArgs e)        {            flag = true;        }        Coordinate m_startCoordinate;        CustomGraphicLayer _graphicLayer = null;        private void map1_MouseDown(object sender, ESRI.ArcGIS.Mobile.MapMouseEventArgs e)        {            if (flag)            {                m_startCoordinate = e.MapCoordinate;                drawGraphicsLayer();                        }        }        void drawGraphicsLayer()        {            _graphicLayer = new CustomGraphicLayer();            _graphicLayer.Coordinate = m_startCoordinate;            //向MapGrahicLayer中添加绘制的几何对象,自动调用“Draw”方法            map1.MapGraphicLayers.Add(_graphicLayer);            map1.Refresh();        }    }

Step4:生成结果

图2:结果图

 

扩展阅读:

Developing custom layers

 

 

0 0
原创粉丝点击