Gmap.net百度地图开发
罗兴运
2023-12-01
1、
地图展示
创建用户控件,继承GMapControl,当前用户继承了gmap地图控件的所有功能。
需要展示地图的窗体,在展示地图的面板上面添加创建的地图用户控件。并在窗体中定义三个全局变量
internal readonly GMapOverlay objects = new GMapOverlay("objects");
internal readonly GMapOverlay routes = new GMapOverlay("routes");
internal readonly GMapOverlay polygons = new GMapOverlay("polygons");
objects,routes,polygons,分别是地图上面创建的三个单层。其实这个定义,主要是根据你的需要的来定义的,比如我这里,objects主要是标注电子罗盘和gps的定位展示;routes主要展示路线的层;polygons是展示多边形的,比如你需要在地图上面圈区域,就可以用这个。
2、
地图初始化
在窗体初始化时,对地图进行初始化加载。
MainMap.Manager.Mode = AccessMode.CacheOnly;
地图数据获取的方式,总共有三种方式,我这里写到的是只是缓存,除了CacheOnly还有ServerOnly、ServerAndCache
本地缓存加载、网络加载、本地和网络同时加载,本地和网络加载是地图在加载的时候先加载本地数据库的地图瓦片,如果不存在了,将从网络获取到地图瓦片,一遍进行地图展示,一遍保存到本地数据库中。
MainMap.MapProvider = GMapProviders.BaiduMap;
这里主要是选择地图加载的数据源。这个主要是看你后台编写了哪些地图的数据源,我这里主要是百度地图和谷歌地图。
MainMap.Position=
new PointLatLng(39.915168,116.403875);
地图当前展示的位置
MainMap.MinZoom = 3;
MainMap.MaxZoom = 20;
MainMap.Zoom = 9;
MainMap.DragButton = MouseButtons.Left;
上面设置的是地图缩放的最小级数和最大技术,以及当前地图展示的层级。下面DragButton是地图拖拽的方式,在默认下是右键,我觉得太别扭了,就改成了左键。
地图的基本展示我们已经实现了,但是我们要在地图上面测距啥的,还有绘制路线怎么实现呢?这里我们就需要加载上面定义的三个单层
MainMap.Overlays.Add(routes);
MainMap.Overlays.Add(polygons);
MainMap.Overlays.Add(objects);
把三个层级加入
怎么绘制啊,后面给你说吧。
地图初始化可以设置的事件有OnPositionChanged(位置改变)、OnTileLoadComplete(地图瓦片加载完成)、OnTileLoadStart(地图开始加载)、OnMapDrag(地图拖拽)、OnMapZoomChanged(缩放级改变)、OnMapTypeChanged(地图类型改变)等等
3、
地图数据供应
我这里以百度为例子:
创建抽象类BaiduMapProviderBase实现GMapProvider 抽象类,
创建BaiduMapProvider实现BaiduMapProviderBase,这里主要的操作内容是MakeTileImageUrl,获取地图的瓦片
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
zoom = zoom - 1;
var offsetX = Math.Pow(2, zoom);
var offsetY = offsetX - 1;
var numX = pos.X - offsetX;
var numY = -pos.Y + offsetY;
zoom = zoom + 1;
var x = numX.ToString().Replace("-", "M");
var y = numY.ToString().Replace("-", "M");
UrlID = (pos.X + pos.Y) % 5;
string url = string.Format(UrlFormat, UrlID, x, y, zoom);
Console.WriteLine("url:" + url);
return url;
}
地图标注可以在http://www.cnblogs.com/luxiaoxun/p/3530341.html看,介绍的很详细。