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);
不足之處,望指正。
查閱資料: