diff --git a/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsPosition.cs b/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsPosition.cs deleted file mode 100644 --- a/GMap.NET.WindowsMobile/GMap.NET.GPS/GpsPosition.cs +++ /dev/null @@ -1,477 +0,0 @@ -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// -// Use of this sample source code is subject to the terms of the Microsoft -// license agreement under which you licensed this sample source code. If -// you did not accept the terms of the license agreement, you are not -// authorized to use this sample source code. For the terms of the license, -// please see the license agreement between you and Microsoft or, if applicable, -// see the LICENSE.RTF on your install media or the root of your tools installation. -// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES. -// -#region Using directives - -using System; -using System.Runtime.InteropServices; -using System.Collections; -using System.Collections.Generic; - -#endregion - -namespace GMap.NET.GPS -{ - #region Internal Native Structures - [StructLayout(LayoutKind.Sequential)] - internal struct SystemTime - { - internal short year; - internal short month; - internal short dayOfWeek; - internal short day; - internal short hour; - internal short minute; - internal short second; - internal short millisecond; - } - - [StructLayout(LayoutKind.Sequential)] - internal struct SatelliteArray - { - int a, b, c, d, e, f, g, h, i, j, k, l; - - public int Count - { - get - { - return 12; - } - } - - public int this[int value] - { - get - { - if(value == 0) - return a; - else if(value == 1) - return b; - else if(value == 2) - return c; - else if(value == 3) - return d; - else if(value == 4) - return e; - else if(value == 5) - return f; - else if(value == 6) - return g; - else if(value == 7) - return h; - else if(value == 8) - return i; - else if(value == 9) - return j; - else if(value == 10) - return k; - else if(value == 11) - return l; - else - throw new ArgumentOutOfRangeException("value must be 0 - 11"); - } - } - } - #endregion - - public enum FixQuality : int - { - Unknown=0, - Gps, - DGps - } - public enum FixType : int - { - Unknown=0, - XyD, - XyzD - } - - public enum FixSelection : int - { - Unknown=0, - Auto, - Manual - } - - public struct Satellite - { - public Satellite(int id, int elevation, int azimuth, int signalStrength, bool inUse) - { - this.id = id; - this.elevation = elevation; - this.azimuth = azimuth; - this.signalStrength = signalStrength; - this.inUse = inUse; - } - - bool inUse; - public bool InSolution - { - get - { - return inUse; - } - set - { - inUse = value; - } - } - - int id; - /// - /// Id of the satellite - /// - public int Id - { - get - { - return id; - } - set - { - id = value; - } - } - - - int elevation; - /// - /// Elevation of the satellite - /// - public int Elevation - { - get - { - return elevation; - } - set - { - elevation = value; - } - } - - - int azimuth; - /// - /// Azimuth of the satellite - /// - public int Azimuth - { - get - { - return azimuth; - } - set - { - azimuth = value; - } - } - - - int signalStrength; - /// - /// SignalStrenth of the satellite - /// - public int SignalStrength - { - get - { - return signalStrength; - } - set - { - signalStrength = value; - } - } - - } - - [StructLayout(LayoutKind.Sequential)] - public class GpsPosition - { - internal GpsPosition() - { - } - - internal static int GPS_VALID_UTC_TIME = 0x00000001; - internal static int GPS_VALID_LATITUDE = 0x00000002; - internal static int GPS_VALID_LONGITUDE = 0x00000004; - internal static int GPS_VALID_SPEED = 0x00000008; - internal static int GPS_VALID_HEADING = 0x00000010; - internal static int GPS_VALID_MAGNETIC_VARIATION = 0x00000020; - internal static int GPS_VALID_ALTITUDE_WRT_SEA_LEVEL = 0x00000040; - internal static int GPS_VALID_ALTITUDE_WRT_ELLIPSOID = 0x00000080; - internal static int GPS_VALID_POSITION_DILUTION_OF_PRECISION = 0x00000100; - internal static int GPS_VALID_HORIZONTAL_DILUTION_OF_PRECISION = 0x00000200; - internal static int GPS_VALID_VERTICAL_DILUTION_OF_PRECISION = 0x00000400; - internal static int GPS_VALID_SATELLITE_COUNT = 0x00000800; - internal static int GPS_VALID_SATELLITES_USED_PRNS = 0x00001000; - internal static int GPS_VALID_SATELLITES_IN_VIEW = 0x00002000; - internal static int GPS_VALID_SATELLITES_IN_VIEW_PRNS = 0x00004000; - internal static int GPS_VALID_SATELLITES_IN_VIEW_ELEVATION = 0x00008000; - internal static int GPS_VALID_SATELLITES_IN_VIEW_AZIMUTH = 0x00010000; - internal static int GPS_VALID_SATELLITES_IN_VIEW_SIGNAL_TO_NOISE_RATIO = 0x00020000; - - internal int dwVersion = 1; // Current version of GPSID client is using. - internal int dwSize = 0; // sizeof(_GPS_POSITION) - - // Not all fields in the structure below are guaranteed to be valid. - // Which fields are valid depend on GPS device being used, how stale the API allows - // the data to be, and current signal. - // Valid fields are specified in dwValidFields, based on GPS_VALID_XXX flags. - internal int dwValidFields = 0; - - // Additional information about this location structure (GPS_DATA_FLAGS_XXX) - internal int dwFlags = 0; - - //** Time related - internal SystemTime stUTCTime = new SystemTime(); // UTC according to GPS clock. - - //** Position + heading related - internal double dblLatitude = 0.0; // Degrees latitude. North is positive - internal double dblLongitude = 0.0; // Degrees longitude. East is positive - internal float flSpeed = 0.0f; // Speed in knots - internal float flHeading = 0.0f; // Degrees heading (course made good). True North=0 - internal double dblMagneticVariation = 0.0; // Magnetic variation. East is positive - internal float flAltitudeWRTSeaLevel = 0.0f; // Altitute with regards to sea level, in meters - internal float flAltitudeWRTEllipsoid = 0.0f; // Altitude with regards to ellipsoid, in meters - - // Where did we get fix from? - internal FixQuality fixQuality = FixQuality.Unknown; - - // Is this 2d or 3d fix? - internal FixType fixType = FixType.Unknown; - - // Auto or manual selection between 2d or 3d mode - internal FixSelection selectionType = FixSelection.Unknown; - - // Position Dilution Of Precision - internal float flPositionDilutionOfPrecision = 0.0f; - - // Horizontal Dilution Of Precision - internal float flHorizontalDilutionOfPrecision = 0.0f; - - // Vertical Dilution Of Precision - internal float flVerticalDilutionOfPrecision = 0.0f; - - // Number of satellites used in solution - internal int dwSatelliteCount = 0; - - // PRN numbers of satellites used in the solution - internal SatelliteArray rgdwSatellitesUsedPRNs = new SatelliteArray(); - - // Number of satellites in view. From 0-GPS_MAX_SATELLITES - internal int dwSatellitesInView = 0; - - // PRN numbers of satellites in view - internal SatelliteArray rgdwSatellitesInViewPRNs = new SatelliteArray(); - - // Elevation of each satellite in view - internal SatelliteArray rgdwSatellitesInViewElevation = new SatelliteArray(); - - // Azimuth of each satellite in view - internal SatelliteArray rgdwSatellitesInViewAzimuth = new SatelliteArray(); - - // Signal to noise ratio of each satellite in view - internal SatelliteArray rgdwSatellitesInViewSignalToNoiseRatio = new SatelliteArray(); - - // ... - - public FixQuality FixQuality - { - get - { - return fixQuality; - } - } - - public FixType FixType - { - get - { - return fixType; - } - } - - public FixSelection FixSelection - { - get - { - return selectionType; - } - } - - /// - /// UTC according to GPS clock. - /// - public DateTime? Time - { - get - { - return ((dwValidFields & GPS_VALID_UTC_TIME) != 0) ? ((DateTime?) new DateTime(stUTCTime.year, stUTCTime.month, stUTCTime.day, stUTCTime.hour, stUTCTime.minute, stUTCTime.second, stUTCTime.millisecond)) : null; - } - } - - /// - /// Satellites in view - /// - /// Array of Satellites - public IEnumerable GetSatellitesInView() - { - // if valid view - if((dwValidFields & GPS_VALID_SATELLITES_IN_VIEW) != 0 && dwSatellitesInView != 0) - { - for(int index = 0; index < dwSatellitesInView; index++) - { - Satellite ret = new Satellite(rgdwSatellitesInViewPRNs[index], rgdwSatellitesInViewElevation[index], rgdwSatellitesInViewAzimuth[index], rgdwSatellitesInViewSignalToNoiseRatio[index], false); - - // if valid solution - if((dwValidFields & GPS_VALID_SATELLITES_USED_PRNS) != 0) - { - for(int index2 = 0; index2 < dwSatelliteCount; index2++) - { - if(rgdwSatellitesUsedPRNs[index2] == ret.Id) - { - ret.InSolution = true; - break; - } - } - } - - yield return ret; - } - } - } - - /// - /// Number of satellites used in solution - /// - public int? SatelliteCount - { - get - { - return (((dwValidFields & GPS_VALID_SATELLITE_COUNT) != 0) ? (int?) dwSatelliteCount : null); - } - } - - /// - /// Number of satellites in view. - /// - public int? SatellitesInViewCount - { - get - { - return ((dwValidFields & GPS_VALID_SATELLITES_IN_VIEW) != 0) ? (int?) dwSatellitesInView : null; - } - } - - /// - /// Speed in km/h - /// - public float? Speed - { - get - { - return ((dwValidFields & GPS_VALID_SPEED) != 0) ? (float?) (flSpeed*1.852f) : null; - } - } - - /// - /// Altitude with regards to ellipsoid, in meters - /// - public float? EllipsoidAltitude - { - get - { - return ((dwValidFields & GPS_VALID_ALTITUDE_WRT_ELLIPSOID) != 0) ? (float?) flAltitudeWRTEllipsoid : null; - } - } - - /// - /// Altitute with regards to sea level, in meters - /// - public float? SeaLevelAltitude - { - get - { - return ((dwValidFields & GPS_VALID_ALTITUDE_WRT_SEA_LEVEL) != 0) ? (float?) flAltitudeWRTSeaLevel : null; - } - } - - /// - /// Latitude in decimal degrees. North is positive - /// - public double? Latitude - { - get - { - return ((dwValidFields & GPS_VALID_LATITUDE) != 0) ? (float?) dblLatitude : null; - } - } - - /// - /// Longitude in decimal degrees. East is positive - /// - public double? Longitude - { - get - { - return ((dwValidFields & GPS_VALID_LONGITUDE) != 0) ? (float?) dblLongitude : null; - } - } - - /// - /// Degrees heading (course made good). True North=0 - /// - public float? Heading - { - get - { - return ((dwValidFields & GPS_VALID_HEADING) != 0) ? (float?) flHeading : null; - } - } - - /// - /// Position Dilution Of Precision - /// - public float? PositionDilutionOfPrecision - { - get - { - return ((dwValidFields & GPS_VALID_POSITION_DILUTION_OF_PRECISION) != 0) ? (float?) flPositionDilutionOfPrecision : null; - } - } - - /// - /// Horizontal Dilution Of Precision - /// - public float? HorizontalDilutionOfPrecision - { - get - { - return ((dwValidFields & GPS_VALID_HORIZONTAL_DILUTION_OF_PRECISION) != 0) ? (float?) flHorizontalDilutionOfPrecision : null; - } - } - - /// - /// Vertical Dilution Of Precision - /// - public float? VerticalDilutionOfPrecision - { - get - { - return ((dwValidFields & GPS_VALID_VERTICAL_DILUTION_OF_PRECISION) != 0) ? (float?) flVerticalDilutionOfPrecision : null; - } - } - } -}