1. 程式人生 > >C#專案之 GMap.net 標記點及 繪製多點之間的距離

C#專案之 GMap.net 標記點及 繪製多點之間的距離

花了兩天的時間,粗略的學習了一下GMap,把學習的地方寫下來,不足之處,望大家多多指正!

GMap是codeplex上的一個很好的開源專案,可用於winform WPF和windows mobile。GMap官網

主要支援對地圖(eg.google bing yahoo等等)的運用。通過demo我們可以看到GMap的強大。

STEP. 1 準備工作

首先我們在官網上下載dll檔案,但是我的是從官網的source code中抽出來的,因為他更新的問題,有的類引數有些問題,所以我就沒有用官網上download中下載。 需要GMap.NET.Core.dll 和 GMap.NET.WindowsForms.dll這兩個檔案。

我用的是VS2010,新建一個C#的winform project,然後在引用中將上述兩個dll檔案引入。在工具箱中右鍵,點選選擇項,在彈出的視窗中在.NET Framework元件標籤頁中,通過瀏覽按鈕找到GMap.NET.WindowsForms.dll檔案 新增後在.NET Framework元件標籤頁出現GMapControl這個選項,勾選,確定。這是會在工具箱中出現GMapControl這個控制元件。拖拽到我們的窗體上,調整合適的大小。

對控制元件屬性引數的設定:

我將控制元件改名為gMap

其他引數網上有詳細說明:

CanDragMap-----滑鼠右鍵拖動地圖
MarkersEnabled---顯示markers
PolygonsEnabled---顯示polygon
ShowTileGridLines---顯示座標格網
Zoom, MinZoom, MaxZoom---Google地圖的縮放水平從0-18,0是全球範圍,18是街道級別,全國級別的話,zoom設為5比較合適。


STEP. 2 初始地圖

之後就要進行地圖控制元件的初始化工作。在gMapControl1_Load(object sender, EventArgs e)

//初始化地圖為google map 並設定初始中心位置為china
            gMap.MapProvider = GMap.NET.MapProviders.GoogleChinaMapProvider.Instance;
            GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
            //gMap.Position = new PointLatLng(45.74740199642105, 126.69570922851562);//此為定初始位置的另一種方式
            gMap.SetPositionByKeywords("china,harbin");//設定初始中心為china harbin

這是執行就會出現地圖了並且以哈爾濱為中心。


可以滾輪放大,右鍵拖動。

STEP. 3  建立標記點

這裡不得不提的概念:

1. What is the mapcontrol (GMapControl)? This is the control whichrenders the map.

2. What is an Overlay (GMapOverlay)? This is a layer on top of themap control. You can have several layers on top of a map, eachlayer representing, say, a route with stops, a list of storesetc.

3. What areMarkers (GMapMarker)? These are the points on alayer, each representing a specific geo location (Lat,Lon) e.g.each drop point on a route.

4. What is aroute (GMapRoute)? This is the path or directionbetween two or more points.


新增以下程式碼

            //建立圖層(overlay)和標籤(marker),將標籤加入圖層,再將圖層加入控制元件中


            GMapMarker gMapMarker = new GMarkerGoogle(new PointLatLng(45.74740199642105, 126.69570922851562),
                GMarkerGoogleType.green);//在(45.7,126.695)上繪製一綠色點
            GMapOverlay gMapOverlay = new GMapOverlay("mark");  //建立圖層
            gMapOverlay.Markers.Add(gMapMarker);  //向圖層中新增標籤
            gMap.Overlays.Add(gMapOverlay);  //向控制元件中新增圖層


STEP. 4 畫出道路

            string start = "花園街, 哈爾濱, china";
            string end = "密山路, 哈爾濱, china";
            MapRoute route = GMap.NET.MapProviders.GoogleMapProvider.Instance.GetRoute(
              start, end, false, false, 15);//找到start到end的一條路

    GMapRoute r = new GMapRoute(route.Points, "My route");//將路轉換成線
            r.Stroke.Width = 5;
            r.Stroke.Color = Color.Black;

            GMapOverlay routesOverlay = new GMapOverlay("routes");//新建圖層,目的是放置道路GMapRoute
            routesOverlay.Routes.Add(r);//將道路加入圖層
            gMap.ZoomAndCenterRoute(r);//將r這條路初始為檢視中心,顯示時以r為中心顯示
    gMap.Overlays.Add(routesOverlay);


不足之處,望指正。

查閱資料: