需求:根据查询出来的坐标串,将这些点画到地图上。画分二种,一种是画普通的点和正方形,另一种为自定义图片。

解决方法:

1、自定义CustomGraphicLayer

    public class CustomGraphicLayer : MapGraphicLayer
    {
        /// Defines a symbol class instance for displaying point
        private Symbol m_pointSymbol;
        /// Defines a CoordinateCollection instance to store custom features
        private CoordinateCollection m_coordinateCollection = new CoordinateCollection();
        /// Get or set coordinate collection stored in custom graphic layer
        public CoordinateCollection Coordinates
        {
            get
            {
                return m_coordinateCollection;
            }
            set
            {
                m_coordinateCollection = value;
            }
        }
        /// Initializes a new instance of custom graphic layer
        public CustomGraphicLayer(): base("CustomGraphicLayer")
        {
            m_pointSymbol = new Symbol(
            new PointPaintOperation(
            Color.LightGreen, 2, 10, Color.Red  , 100, 10, PointPaintStyle.Square ));
        }
        /// Draw method being called after adding to map
        protected override void Draw(Display display)
        {
            //return if display is null
            if (display == null)
                return;
            //return if drawing is cancelled
            if (display.DrawingCanceled)
                return;
            MapImage imgtemp = GetMapImage ();
            foreach ( Coordinate cd in m_coordinateCollection)
            {

                //这边每个点要是屏幕坐标才能为INT型。在进入m_coordinateCollection前,System .Drawing .Point pt = map1.ToClient(new Coordinate(s1.X, s1.Y));
                display.DrawMapImage(imgtemp, (int)cd.X, (int)cd.Y, 50);

            }
            //draw coordinate collection using DrawMultipoint method
            //display.DrawMultipoint(new Pen(Color.Red), new SolidBrush(Color.Red), 10, this.m_coordinateCollection);

    //这边这个亦可用,可画点,这边这个m_coordinateCollection要用经纬坐标

            //m_pointSymbol.DrawMultipoint(display, m_coordinateCollection);
        }
        public MapImage GetMapImage()
        {
            try
            {
                Bitmap bm = new Bitmap(@"Storage Card\marker.bmp");//要注意是手机上的图片位置。
                MapImage img = new MapImage(bm);
                return img;
            }
            catch(Exception ek)
            {
                return null;
            }

        }
        protected override void Dispose(bool disposing)
        {
            //Dispose symbol implementing IDisposible
            try
            {
                if (disposing)
                {
                    if (m_pointSymbol != null)
                        m_pointSymbol.Dispose();
                    m_pointSymbol = null;

                    m_coordinateCollection = null;
                }
            }
            finally
            {
                base.Dispose(disposing);
            }
        }

    }