首页 > 代码库 > GMap.NET 学习(一)添加marker和polygon

GMap.NET 学习(一)添加marker和polygon

GMap.NET is great and Powerful, Free, cross platform, open source .NET control. Enable use routing, geocoding, directions and maps from Coogle, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yandex, Mapy.cz, Maps.lt, iKarte.lv, NearMap, OviMap, CloudMade, WikiMapia, MapQuest in Windows Forms & Presentation, supports caching and runs on windows mobile!

 
如上所述,GMap.NET是一个.net控件,开源、跨平台、免费。地图来源广泛。可以用于WinForm、WPF、WM。
 
下载:GMap.NET 控件的dll文件 for WinForm
 
在Visual Studio 2010里创建一个C# Windows Forms project,把下载好的GMap.NET.Core.dll 和 GMap.NET.WindowsForms.dll文件放在项目子文件夹里。添加reference(引用)到这个两个文件。

GMap.NET <wbr>学习(一)添加marker和polygon
这样,自己的代码就可以访问GMap.NET里的类了。因为这个GMap.NET是个用户控件,所以可以添加到工具箱,这样便于在属性窗口设置控件的属性。当然也可以不添加到工具箱,直接在代码里实例化这个控件,但是那样就没法使用属性窗口设置属性了。

把控件添加到工具箱,在工具箱上右击,选择“选择项(Choose Items)”可以选择“Browse…”选项,然后选取文件GMap.NET.WindowsForms DLL来找到需要的工具集,这肯定包括GMapControl控件。勾选这个控件,点击确定。这样,这个控件就会出现在工具箱里,可以直接拖到form上了。
GMap.NET <wbr>学习(一)添加marker和polygon

GMap.NET <wbr>学习(一)添加marker和polygon

 

要使用这个控件,就必须理解以下几点:

 

1. What is the map control (GMapControl)? This is the control which renders the map. 

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

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

4. What is a route (GMapRoute)? This is the path or direction between two or more points.

5. WTF are tiles? – well here is something to read…Bing Maps Tile System.

GMap.NET <wbr>学习(一)添加marker和polygon

 

1.向Windows Form添加一个GMap控件

直接把控件从工具箱拖到form上,调整大小,然后把默认名字GMapControl1改为gmap

GMap.NET <wbr>学习(一)添加marker和polygon

选择控件,选择属性,打开属性面板,除了控件的通用属性外,还有GMap特定的属性,

GMap.NET <wbr>学习(一)添加marker和polygon

CanDragMap-----鼠标右键拖动地图

MarkersEnabled---显示markers

PolygonsEnabled---显示polygon

ShowTileGridLines---显示坐标格网

Zoom, MinZoom, MaxZoom---Google地图的缩放水平从0-18,0是全球范围,18是街道级别,全国级别的话,zoom设为5比较合适。

 

2.初始化地图

给form添加一个onLoad事件,写入如下代码:

 

private void Form1_Load(object sender, EventArgs e)   // Initialize map:  gmap.MapProvider = GMap.NET.MapProviders.BingMapProvider.Instance;  GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;  gmap.SetCurrentPositionByKeywords("Maputo, Mozambique");  } 现在运行就可以看到地图了。如果无法用鼠标右键拖拽地图和滚轮缩放,检查控件属性设置是否正确。

 

有如下四种方式设置地图的默认位置:

gmap.SetCurrentPositionByKeywords(“country”) - USA

gmap.SetCurrentPositionByKeywords(“state, country”) – Berlin, Germany

gmap.SetCurrentPositionByKeywords(“province, country”) – Alberta, Canada

 

gmap.Position = new PointLatLng(-25.971684,32.589759);
3.地图提供器 Map Providers
GMap.NET library的神奇之处在于不仅仅可以利用Google Maps,还有其他地图可以利用,GMap可以调用大量的地图源,并且接口都封装在内部。以下是地图提供器:

 

CloudMadeMapProvider

GoogleMapProvider – map provider for Google Maps;有很多种类型的地图

OpenCycleMapProvider

OpenStreetMapProvider

WikiMapiaMapProvider

YahooMapProvider

any marker and polygon code you write for GMap.NET will work with any of the providers. Awesome!
 
4.添加图标 Adding markers
markers添加到地图上面的那个图层里,称为overlays,可以在一个overlay里添加任意多的markers,然后再把这个overlay添加到添加到地图上。overlay可以根据需要隐藏或显示。
 
以下代码添加一个名为markers的overlay到地图上,这个overlay里只有一个marker。
 
GMapOverlay markersOverlay = new GMapOverlay("markers");  //new一个overlays对象
GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(-25.966688, 32.580528), GMarkerGoogleType.green);
markersOverlay.Markers.Add(marker); 
gmap.Overlays.Add(markersOverlay);
 
GMap.NET <wbr>学习(一)添加marker和polygon
    首先,创建一个overlay实例,new的时候名称是可选参数。可以在其他地方通过名字引用这个overlay,也可以直接引用这个overlay实例本身。
    然后,创建一个GMarkerGoogle实例,new这个实例的时候,需要2个参数,第一个是位置(也即 PointLatLng 实例 ),一个是marker类型。marker类型是一组图标图片,这个在Google Map API里可以找到。也可以自己提供一个Bitmap实例作为marker图片。
GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(-25.966688, 32.580528), newBitmap("c:\\images\\mymarker.png");
最后,把marker添加到overlay,再把overlay添加到map。这些marker可以和任何map provider兼容。
5.添加区域 Adding polygons
以下代码创建一个overlay,并在其中添加一个四边形
GMapOverlay polyOverlay = new GMapOverlay("polygons"); 
List<PointLatLng> points = new List<PointLatLng>(); 
points.Add(new PointLatLng(-25.969562,32.585789));
points.Add(new PointLatLng(-25.966205,32.588171)); 
points.Add(new PointLatLng(-25.968134,32.591647)); 
points.Add(new PointLatLng(-25.971684,32.589759)); 
GMapPolygon polygon = new GMapPolygon(points, "mypolygon");
polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 1); 
polyOverlay.Polygons.Add(polygon); 
gmap.Overlays.Add(polyOverlay);
首先创建一个新的overlay,然后,创建一个装多边形顶点的list,使用这个list创建一个GMapPolygon实例,然后用SolidBrush告诉这个polygon如何绘制自己,给笔画选定pen的粗细颜色,最后,把polygon添加到overlay,再把overlay添加到map。
GMap.NET <wbr>学习(一)添加marker和polygon 
结论:
tip:
如果marker不显示,先查看下属性面板里MarkersEnabled是否设置为true
不联网的话,也可以用离线地图,添加如下代码:
GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.CacheOnly;
代码里要添加引用的命名空间:
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.WindowsForms.Markers;
using GMap.NET.WindowsForms.ToolTips;


转自 http://blog.sina.com.cn/s/blog_819100560101dgng.html