WinForms中使用GMap.Net绘制两点沿道路路线时报空引用异常如何解决
修复方案
1. 先添加空值前置校验
首先在获取MapRoute之后先判断是否为null,避免直接访问属性抛出异常,这是基础容错逻辑:
MapRoute path = OpenStreetMapProvider.Instance.GetRoute(start, end, false, false, 15); if(path == null || path.Points == null || path.Points.Count == 0) { // 可自行添加路线获取失败的提示逻辑 return; }
2. 检查基础配置和入参
- 确认GMap全局配置已正确初始化:
GMaps.Instance.Mode = AccessMode.ServerOnly; // 优先从服务端拉取数据 gmap.MapProvider = GMapProviders.OpenStreetMap; gmap.MinZoom = 2; gmap.MaxZoom = 18; - 确认程序有联网权限,防火墙、代理没有拦截OpenStreetMap的服务请求
- 调整
GetRoute入参测试:第三个参数为是否走步行路线,第四个参数为是否允许走高速,最后一个为缩放级别,可调整参数重试:// 示例:机动车路线、允许走高速、缩放级别改为14 MapRoute path = OpenStreetMapProvider.Instance.GetRoute(start, end, false, true, 14);
3. 替换路由服务提供者
GMap内置的OpenStreetMapProvider依赖的公共OSM路由服务经常出现访问限制、服务不稳定的情况,可替换为其他路由提供者:
- 选择
GoogleMapProvider/BingMapProvider,需提前申请对应平台的API密钥,示例:GMapProviders.BingMap.ClientKey = "你申请的Bing地图API密钥"; MapRoute path = GMapProviders.BingMap.GetRoute(start, end, false, false, 15); - 也可自行对接本地部署的OSRM开源路由服务,拿到路线坐标点后手动构造
GMapRoute对象。
4. 升级GMap.Net版本
部分旧版本GMap.Net的内置路由接口已失效,升级到最新稳定版后重试即可解决。
内容的提问来源于stack exchange,提问作者cryptosight
相关产品推荐
相关产品推荐

