需求:根据查询出来的坐标串,将这些点画到地图上。画分二种,一种是画普通的点和正方形,另一种为自定义图片。
解决方法:
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);
}
}
}