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






4.80/5 (126投票s)
GMap.NET 是一个强大、免费、跨平台、开源的 .NET 控件。它可以在 Windows Forms 和 Presentation 中使用来自 Google、Yahoo!、OpenStreet 的路由、地理编码和地图,并支持缓存!
- 从 CodePlex 下载演示
- Mercurial 克隆 URL: https://hg01.codeplex.com/greatmaps
- CodePlex: GMap.NET - 适用于 Windows Forms 和 Presentation 的优秀地图
引言
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 网站,以获取我对任何更改或改进的运行更新。