在C#中用GMap.Net开发离线地图应用:MapProvider下载问题
GMap.NET 离线地图配置与瓦片下载方法
切换访问模式
将原代码中的ServerOnly改为ServerAndCache(优先读取本地缓存,无缓存时从服务器下载并保存)或CacheOnly(完全离线,仅读取本地缓存):GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache;设置本地缓存路径
指定地图瓦片的存储目录,确保程序拥有该目录的读写权限:GMap.NET.GMaps.Instance.CacheLocation = @"C:\GMapCache";
路径可根据实际需求自定义。下载离线地图瓦片
有两种方式获取瓦片:- 实时浏览缓存:运行程序后,拖动地图覆盖需要离线使用的区域,放大到目标缩放级别,GMap.NET会自动将当前视图的瓦片下载并保存到缓存路径。
- 批量下载:使用GMap.NET配套的地图下载工具,可批量指定区域(经纬度范围或矩形框选)、缩放级别(对应你的
MinZoom和MaxZoom),一次性下载所需瓦片,完成后将瓦片文件放到设置的缓存路径中。
修改后的完整代码示例
// 配置缓存与访问模式 GMap.NET.GMaps.Instance.CacheLocation = @"C:\GMapCache"; GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache; _map = new GMapControl(); Map.MapProvider = GMap.NET.MapProviders.BingHybridMapProvider.Instance; Map.DragButton = MouseButton.Left; Map.MinZoom = 2; Map.MaxZoom = 18; Map.Zoom = 5; Map.CanDragMap = true; Map.Position = new GMap.NET.PointLatLng(48.8589507, 2.2775175); Map.ShowCenter = false;注意事项
- 不同地图提供商的瓦片存储结构不同,请勿混合存放不同提供商的缓存文件。
- 使用
CacheOnly模式前,必须确保已下载对应区域和缩放级别的全部瓦片,否则地图会显示空白。 - 确认缓存目录的读写权限,避免无法保存或读取瓦片。
内容的提问来源于stack exchange,提问作者Avi C
相关产品推荐
相关产品推荐

