打造地图拼接利器(二)软件框架
我们采用Visual studio2013作为开发环境,GMap.net作为地图环境,实现相关功能。
一、GMap.net
GMap.NET 是一个免费、开源的.NET控件,有Windows Forms 和WPF2个版本,内置了Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等实现寻找路径、地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。在https://gitee.com/lukeson/gmap下载源码,运行build下的批处理文件,生成相应版本的动态库。
编译控件库二、软件界面
打开vs2013,新建一个项目,起好名称,选择window桌面、windows窗体应用程序,.net版本选为4.0即可。
vs设置增加菜单和状态栏,添加一个splitcontainer,左侧设置相关参数区域,右侧设置一个panel,用于承载地图控件,并添加地图切换、覆盖地图(主要用于在卫星图上覆盖路网,生成复合地图)2个Combox控件,再增加一个TrackBar控件,用于控制地图缩放。
主界面布局在解决方案管理器的引用中添加对GMap.NET.Core.dll和GMap.NET.WindowsForms.dll的引用。
编辑主窗体的源码,加入对Gmap控件的初始化代码,完成地图控件,鼠标移动后经纬度、缩放级别的显示和地图图源配置:
GMapControlgmapc;
publicmainForm()
{
InitializeComponent();
InitUI();
}
private voidInitMap()
{
gmapc= new GMapControl();
mainPanel.Controls.Add(gmapc);
gmapc.Dock = DockStyle.Fill;
gmapc.MapProvider= GMapProviders.BingMap;;
gmapc.CacheLocation = Application.StartupPath;
gmapc.Manager.Mode = AccessMode.ServerOnly;
gmapc.Position = new PointLatLng(40.0, 117.0);
gmapc.MinZoom = 1;
gmapc.MaxZoom = 21;
gmapc.Zoom = 5;
trackBar1.Value = (int)gmapc.Zoom;
gmapc.OnMapZoomChanged +=gmapc_OnMapZoomChanged;
gmapc.MouseMove +=gmapc_MouseMove;
}
void gmapc_MouseMove(object sender, MouseEventArgse)
{
PointLatLng point = gmapc.FromLocalToLatLng(e.X,e.Y);
tsslPosition.Text = string.Format("鼠标所在经纬度:{0},{1} 当前层:{2}", point.Lng, point.Lat,gmapc.Zoom);
}
我们的地图provider先以bing地图为例,运行程序,即可看到地图。这里补充一下,通过gmapc.Manager.Mode = AccessMode.ServerOnly可以设置地图是否缓存到本地,GMap.net会自动为本地创建缓存文件,本项目暂未考虑,所以选择从服务器直接读取。
默认地图