You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:45:00