Геолокация и карты в C# (.NET): библиотеки, примеры и рекомендации

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Геолокация и карты в C# (.NET): обзор библиотек и инструментов

Работа с геолокацией и картами — востребованная задача в современных .NET-приложениях: от трекинга курьеров до визуализации данных на карте. В этой статье мы разберём основные библиотеки и инструменты для C# (.NET), которые помогут вам реализовать функционал геопозиционирования и отображения карт.

1. Встроенные средства .NET: пространство имён Windows.Devices.Geolocation

Для UWP-приложений (Universal Windows Platform) в .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)

Класс GeoCoordinate из System.Device.Location доступен для классических .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 можно использовать встроенный элемент MapControl из Windows.UI.Xaml.Controls.Maps. Он позволяет отображать карты 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. Google Maps API для .NET

Для работы с Google Maps из C# (.NET Core / .NET 5+) используйте библиотеку 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);
}

Не забудьте получить API-ключ в Google Cloud Console и включить биллинг (бесплатный лимит — 40 000 запросов/месяц).

5. Библиотека NetTopologySuite для работы с геометрией

Если вам нужно анализировать географические данные (полигоны, линии, точки), используйте NetTopologySuite (NTS). Это порт Java-библиотеки JTS для .NET.

using NetTopologySuite.Geometries;

public double CalculatePolygonArea(Coordinate[] coordinates)
{
    var polygon = new Polygon(new LinearRing(coordinates));
    return polygon.Area; // площадь в квадратных единицах координат
}

NTS хорошо сочетается с PostGIS и другими ГИС-системами.

6. MapControl в ASP.NET Core (Leaflet + C#)

Для веб-приложений на ASP.NET Core удобно использовать JavaScript-библиотеку Leaflet в связке с серверной частью на C#. На сервере вы можете подготавливать GeoJSON-данные, а на клиенте отображать их на карте.

// Контроллер ASP.NET Core
[HttpGet("api/points")]
public I                    

Рекомендаций