65.9K
CodeProject 正在变化。 阅读更多。
Home

GMap.NET - 适用于 Windows Forms 和 Presentation 的优秀地图

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (126投票s)

2009年1月18日

MIT

1分钟阅读

viewsIcon

1878912

downloadIcon

630

GMap.NET 是一个强大、免费、跨平台、开源的 .NET 控件。它可以在 Windows Forms 和 Presentation 中使用来自 Google、Yahoo!、OpenStreet 的路由、地理编码和地图,并支持缓存!

GMapNET/GMapNETv7cp.PNG

引言

Google 地图很酷,对吧?但它只能在浏览器中使用,对于实时跟踪来说是不够的。它也没有缓存,因此 Google 服务器负载过重。这个控件消除了所有这些缺点!它还为 .NET 开发者提供了无限的扩展能力!

GMap.NET 强大且优秀,免费、跨平台、开源的 .NET 控件。支持在 Windows Forms 和 Presentation 中使用来自 Google、Yahoo!、Bing、OpenStreetMap、ArcGIS、Pergo、SigPac、Yandex、Mapy.cz、Maps.lt、iKarte.lv、NearMap、OviMap、CloudMade、WikiMapia、MapQuest 的路由、地理编码、方向和地图,支持缓存并在 Windows Mobile 上运行!

背景

基本思想很简单:从 Google/等处获取所需数据,缓存它,然后使用它。快速、简单且实用。

Using the Code

非常简单。GMap.NET.dll 和 GMap.NET.WindowsForms.dll 包含用户控件。将其添加到您的项目中并直接使用即可。

以下是基本控件的初始选项:

public MainForm()
{

InitializeComponent();

try
{
   System.Net.IPHostEntry e =
        System.Net.Dns.GetHostEntry("www.google.com");
}
catch
{
   MainMap.Manager.Mode = AccessMode.CacheOnly;
   MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", 
         "GMap.NET - Demo.WindowsForms", MessageBoxButtons.OK,
         MessageBoxIcon.Warning);
}

// config map
MainMap.MapProvider = GMapProviders.OpenStreetMap;
MainMap.Position = new PointLatLng(54.6961334816182, 25.2985095977783);
MainMap.MinZoom = 0;
MainMap.MaxZoom = 24;
MainMap.Zoom = 9;

// add your custom map db provider
//GMap.NET.CacheProviders.MySQLPureImageCache ch = new GMap.NET.CacheProviders.MySQLPureImageCache();
//ch.ConnectionString = @"server=sql2008;User Id=trolis;Persist Security Info=True;database=gmapnetcache;password=trolis;";
//MainMap.Manager.SecondaryCache = ch;

// set your proxy here if need
//GMapProvider.WebProxy = new WebProxy("10.2.0.100", 8080);
//GMapProvider.WebProxy.Credentials = new NetworkCredential("ogrenci@bilgeadam.com", "bilgeada");

// map events
{
   MainMap.OnPositionChanged += new PositionChanged(MainMap_OnPositionChanged);

   MainMap.OnTileLoadStart += new TileLoadStart(MainMap_OnTileLoadStart);
   MainMap.OnTileLoadComplete += new TileLoadComplete(MainMap_OnTileLoadComplete);

   MainMap.OnMapZoomChanged += new MapZoomChanged(MainMap_OnMapZoomChanged);
   MainMap.OnMapTypeChanged += new MapTypeChanged(MainMap_OnMapTypeChanged);

   MainMap.OnMarkerClick += new MarkerClick(MainMap_OnMarkerClick);
   MainMap.OnMarkerEnter += new MarkerEnter(MainMap_OnMarkerEnter);
   MainMap.OnMarkerLeave += new MarkerLeave(MainMap_OnMarkerLeave);

   MainMap.OnPolygonEnter += new PolygonEnter(MainMap_OnPolygonEnter);
   MainMap.OnPolygonLeave += new PolygonLeave(MainMap_OnPolygonLeave);

   MainMap.OnRouteEnter += new RouteEnter(MainMap_OnRouteEnter);
   MainMap.OnRouteLeave += new RouteLeave(MainMap_OnRouteLeave);

   MainMap.Manager.OnTileCacheComplete += new TileCacheComplete(OnTileCacheComplete);
   MainMap.Manager.OnTileCacheStart += new TileCacheStart(OnTileCacheStart);
   MainMap.Manager.OnTileCacheProgress += new TileCacheProgress(OnTileCacheProgress);
}   
} 

如您所见,控件选项非常简单。而且无需添加更多内容。

关注点

好吧,弄清楚 Google 如何管理图块、它使用什么坐标系统、JSON 解密等,确实很费解。

历史

请访问项目的 CodePlex 网站,以获取我对任何更改或改进的运行更新。

© . All rights reserved.