NmeaParser/docs/concepts/ArcGISRuntime.md
Morten Nielsen 52b90b2f45 Revert "Move the docs folder to docfx"
This reverts commit d8be33581d.
2020-01-19 18:50:47 -08:00

1.7 KiB

Creating a location provider for ArcGIS Runtime SDK

Below is an implementation for use with the ArcGIS Runtime SDK for .NET. Use this location provider on the MapView's LocationDisplay to send it location data from your NMEA device to display your current location on a map.

Usage:

NmeaParser.NmeaDevice device = new NmeaParser.NmeaFileDevice("NmeaSampleData.txt");
mapView.LocationDisplay.LocationProvider = new NmeaLocationProvider(device);
mapView.LocationDisplay.IsEnabled = true;

NmeaLocationProvider.cs

using System;
using System.Threading.Tasks;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Location;

namespace NmeaParser.ArcGIS
{
    public class NmeaLocationProvider : ILocationProvider
    {
        public event EventHandler<LocationInfo> LocationChanged;
        private readonly NmeaParser.NmeaDevice device;

        public NmeaLocationProvider(NmeaParser.NmeaDevice device)
        {
            this.device = device;
            device.MessageReceived += device_MessageReceived;
        }

        void device_MessageReceived(object sender, NmeaParser.NmeaMessageReceivedEventArgs e)
        {
            var message = e.Message;
            if (message is NmeaParser.Messages.Rmc rmc && rmc.Active)
            {
                LocationChanged?.Invoke(this, new LocationInfo()
                {
                    Course = rmc.Course,
                    Speed = rmc.Speed,
                    Location = new MapPoint(rmc.Longitude, rmc.Latitude, SpatialReferences.Wgs84)
                });
            }
        }

        public Task StartAsync() => device.OpenAsync();

        public Task StopAsync() => device.CloseAsync();
    }
}