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

WPF应用创建地图路线遇GMapRoute相关错误求助

解决WPF中GMap.NET路线创建的API适配问题

你遇到的问题核心是WPF版与WinForms版GMap.NET的API差异,直接照搬WinForms代码会出现属性/成员找不到的错误,以下是针对性的解决步骤:

1. 确认依赖与命名空间

  • 确保安装的是WPF专属的NuGet包:GMap.NET.Wpf,卸载WinForms版本的GMap.NET.WindowsForms(如果误装)。
  • 代码中引用正确的WPF命名空间,避免混入WinForms的命名空间:
using GMap.NET;
using GMap.NET.Wpf;
using GMap.NET.WindowsPresentation;

2. 正确创建并添加路线

WPF版GMap.NET用Layers替代WinForms的Overlays,且GMapRoute的样式属性(如Stroke)属于WPF的绘图体系,以下是完整代码示例:

// 1. 将CSV提取的坐标转换为GMap.NET的PointLatLng集合
List<PointLatLng> routePoints = new List<PointLatLng>();
// 示例:遍历你的数据对象,填充坐标(注意纬度在前,经度在后)
foreach (var dataItem in yourCsvDataList)
{
    routePoints.Add(new PointLatLng(dataItem.Latitude, dataItem.Longitude));
}

// 2. 创建路线并设置样式
GMapRoute mapRoute = new GMapRoute(routePoints, "测量路线");
mapRoute.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.DarkBlue);
mapRoute.StrokeThickness = 2; // 路线粗细
mapRoute.StrokeDashArray = new System.Windows.Media.DoubleCollection { 2, 1 }; // 可选:设置虚线样式

// 3. 创建图层并添加路线
GMapOverlay routeOverlay = new GMapOverlay("routeLayer");
routeOverlay.Routes.Add(mapRoute);

// 4. 将图层添加到地图控件
yourGMapControl.Layers.Add(routeOverlay);

// 可选:让地图自动缩放并居中到路线范围
yourGMapControl.ZoomAndCenterRoute(mapRoute);

3. 常见问题排查

  • 命名空间冲突:如果代码中同时存在GMap.NET.WindowsForms和GMap.NET.Wpf的引用,会导致编译器误选WinForms版的GMapRoute,此时需移除WinForms相关命名空间。
  • 坐标顺序错误:PointLatLng的构造参数是(纬度, 经度),如果CSV中是经度在前,需调换顺序,否则路线会显示到错误区域。
  • 地图控件初始化:确保你的GMapControl已正确设置地图提供者(如yourGMapControl.MapProvider = GMap.NET.MapProviders.BingMapProvider.Instance;),并启用了相关权限(如网络访问,若使用在线地图)。

内容的提问来源于stack exchange,提问作者Koko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:07:10