C# (.NET) 中的地理定位与地图:库、示例与建议

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 中的地理定位与地图:库与工具概览



在现代 .NET 应用程序中,处理地理定位和地图是一项常见需求:从快递员追踪到在地图上可视化数据。本文将介绍 C# (.NET) 的主要库和工具,帮助您实现地理定位和地图显示功能。



1. .NET 内置工具:Windows.Devices.Geolocation 命名空间



对于 UWP(通用 Windows 平台)应用程序,.NET 提供了用于获取设备当前位置的内置 API。主要类是 Geolocator。



using Windows.Devices.Geolocation;

public async Task<BasicGeoposition> GetCurrentPosition(){ var geolocator = new Geolocator(); geolocator.DesiredAccuracy = PositionAccuracy.High;

Geoposition pos = await geolocator.GetGeopositionAsync(); return pos.Coordinate.Point.Position;}


此方法返回设备的纬度和经度。重要提示:需要用户权限并启用 GPS/网络。



2. GeoCoordinate 库 (System.Device.Location)



来自 System.Device.Location 的 GeoCoordinate 类可用于经典的 .NET Framework 应用程序(Windows Forms、WPF)。它不仅可以获取坐标,还可以计算两点之间的距离。



using System.Device.Location;

public double CalculateDistance(double lat1, double lon1, double lat2, double lon2){ var coord1 = new GeoCoordinate(lat1, lon1); var coord2 = new GeoCoordinate(lat2, lon2); return coord1.GetDistanceTo(coord2); // 以米为单位}


对于 .NET Core / .NET 5+,此库不可用——请使用下面描述的替代方案。



3. 地图处理:MapControl (WPF/UWP)



在 WPF 和 UWP 中,您可以使用来自 Windows.UI.Xaml.Controls.Maps 的内置 MapControl 元素。它默认显示 Bing Maps,或可连接第三方图块。



<!-- XAML 标记 --><Maps:MapControl x:Name="MyMap"                  ZoomLevel="12"                  Center="55.7558, 37.6173" />


要添加图钉(标记),请使用 MapIcon:



using Windows.Devices.Geolocation;using Windows.UI.Xaml.Controls.Maps;

public void AddMarker(double latitude, double longitude, string title){ var pin = new MapIcon { Location = new Geopoint(new BasicGeoposition { Latitude = latitude, Longitude = longitude }), Title = title, NormalizedAnchorPoint = new Point(0.5, 1.0) }; MyMap.MapElements.Add(pin);}


4. 适用于 .NET 的 Google Maps API



要从 C# (.NET Core / .NET 5+) 使用 Google Maps,请使用 GoogleMapsApi 库(NuGet:GoogleMapsApi)。它为地理编码、反向地理编码和路线规划提供了便捷的接口。



using GoogleMapsApi;using GoogleMapsApi.Entities.Geocoding.Request;using GoogleMapsApi.Entities.Geocoding.Response;

public async Task<GeocodingResponse> GeocodeAddress(string address){ var request = new GeocodingRequest { Address = address, ApiKey = "YOUR_API_KEY" }; var geocodingEngine = new GeocodingEngine(); return await geocodingEngine.GeocodeAsync(request);}


别忘了在 Google Cloud Console 中获取 API 密钥并启用结算(免费限额为每月 40,000 次请求)。



5. 用于几何处理的 NetTopologySuite 库



如果您需要分析地理数据(多边形、线、点),请使用 NetTopologySuite (NTS)。这是 Java 库 JTS 的 .NET 移植版本。



using NetTopol                    

推荐