打开Visual studio 创建一个新项目WM6GISEngineTutorial。把Form1改名为MainForm,添加对引路蜂类库的引用,并把guidebee.lic做为Content添加到项目中。
我们将使用MainForm来显示地图,下面的例子显示南京地图,缩放级别为13级,地图类型为Bing中国地图。
- using System;
- using System.Windows.Forms;
- using Mapdigit.Gis;
- using Mapdigit.Gis.Drawing;
- using Mapdigit.Gis.Geometry;
- using Mapdigit.Gis.Raster;
- using Mapdigit.Gis.Service;
- using Mapdigit.Licence;
- using WM6GISEngineTutorial.Drawing;
- using System.Drawing;
- namespace WM6GISEngineTutorial
- {
- public partial class Mainform : Form, IMapDrawingListener, IReaderListener,
- IRoutingListener, IGeocodingListener
- {
- /// <summary>
- /// map tile downloader manager
- /// </summary>
- private readonly MapTileDownloadManager _mapTileDownloadManager;
- /// <summary>
- /// raster map.
- /// </summary>
- private readonly RasterMap _rasterMap;
- /// <summary>
- /// map image.
- /// </summary>
- private readonly IImage _mapImage;
- /// <summary>
- /// map graphics object.
- /// </summary>
- private IGraphics _mapGraphics;
- /// <summary>
- /// map type.
- /// </summary>
- private int _mapType = MapType.MicrosoftChina;
- private int _oldX;
- private int _oldY;
- private bool _isPanMode;
- private delegate void UpdateInfo(string message);
- public Mainform()
- {
- InitializeComponent();
- //set the licence info.
- LicenceManager licenceManager = LicenceManager.GetInstance();
- long[] keys = { -0x150dc6a05f379456L, -0x703237078e243c4fL,
- -0x104afc92926c5418L, -0x4af1782b11010f5dL,
- -0x27d1f7ce354a3419L, 0x17ded67edd3a5281L, };
- licenceManager.AddLicence("GuidebeeMap_DotNet", keys);
- //optional, get the tile url from server.
- MapType.UpdateMapTileUrl();
- MapLayer.SetAbstractGraphicsFactory(NETGraphicsFactory.GetInstance());
- MapConfiguration.SetParameter(MapConfiguration.WorkerThreadNumber, 4);
- _mapImage = MapLayer.GetAbstractGraphicsFactory()
- .CreateImage(Width, Height);
- _mapTileDownloadManager = new MapTileDownloadManager(this);
- _rasterMap = new RasterMap(1024, 1024, _mapType, _mapTileDownloadManager);
- _rasterMap.SetScreenSize(Width, Height);
- _mapTileDownloadManager.Start();
- _rasterMap.SetMapDrawingListener(this);
- _rasterMap.SetRoutingListener(this);
- _rasterMap.SetGeocodingListener(this);
- GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
- _rasterMap.SetCenter(center, 13, _mapType);
- }
- private void Mainform_Paint(object sender, PaintEventArgs e)
- {
- Graphics graphics = e.Graphics;
- Bitmap image = (Bitmap)_mapImage.GetNativeImage();
- graphics.DrawImage(image, 0, 0);
- }
- private void PanMap(int x, int y)
- {
- int dx = x - _oldX;
- int dy = y - _oldY;
- _rasterMap.PanDirection(dx, dy);
- }
- private void UpdateStatus(string messsage)
- {
- if (InvokeRequired)
- {
- BeginInvoke(new UpdateInfo(UpdateStatus), messsage);
- }
- else
- {
- _mapGraphics = _mapImage.GetGraphics();
- _rasterMap.Paint(_mapGraphics);
- Invalidate();
- Console.WriteLine(messsage);
- }
- }
- public void Done()
- {
- UpdateStatus("");
- }
- public void Done(string query, MapDirection result)
- {
- if (result != null)
- {
- _rasterMap.SetMapDirection(result);
- _rasterMap.Resize(result.Bound);
- }
- }
- public void ReadProgress(int bytes, int total)
- {
- if (total != 0)
- {
- UpdateStatus("Reading ...");
- }
- }
- public void Done(string query, MapPoint[] result)
- {
- if (result != null)
- {
- _rasterMap.PanTo(result[0].Point);
- }
- }
- void IGeocodingListener.ReadProgress(int bytes, int total)
- {
- if (total != 0)
- {
- UpdateStatus("Reading ...");
- }
- }
- void IReaderListener.ReadProgress(int bytes, int total)
- {
- if (total != 0)
- {
- UpdateStatus("Reading ...");
- }
- }
- private void Mainform_MouseDown(object sender, MouseEventArgs e)
- {
- _oldX = e.X;
- _oldY = e.Y;
- _isPanMode = true;
- }
- private void Mainform_MouseMove(object sender, MouseEventArgs e)
- {
- if (_isPanMode)
- {
- PanMap(e.X, e.Y);
- _oldX = e.X;
- _oldY = e.Y;
- }
- }
- private void Mainform_MouseUp(object sender, MouseEventArgs e)
- {
- _oldX = e.X;
- _oldY = e.Y;
- _isPanMode = false;
- }
- }
- }
行45-49 设置Licence信息。
行51 从服务器更新地图类型配置,可选。
行52 将Windows Mobile平台上Gis.Drawing实现与开发包连接起来。
行53 设置工作线程数。
行54-59 创建地图实例,并启动工作线程。一般在程序结束时需调用_mapTileDownloadManager.Stop()停止工作线程。
行60-62 设置回调函数,其实第一个例子60,61行不是必须的。
行63-64 设置地图中心,地图类型和缩放级别。
行67-72 显示地图,当一个地图图片完成下载时,会通过回调函数 Done() 通知应用,一般在此更新地图。
行143-166 支持地图平移。
后面的例子设置地图类型,地址编码,路径查询等将在这个例子基础上改动,通过菜单来解释各项功能。