天天看點

Gmap.net百度地圖開發

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