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看,介紹的很詳細。