text: //
  //  GPXWaypoint.h
  //  GPX Framework
  //
  //  Created by NextBusinessSystem on 12/04/06.
  //  Copyright (c) 2012 NextBusinessSystem Co., Ltd. All rights reserved.
  //
  
  #import "GPXElement.h"
  
  @class GPXExtensions;
  @class GPXLink;
  
  
  /** wpt represents a waypoint, point of interest, or named feature on a map.
   */
  @interface GPXWaypoint : GPXElement
  
  
  /// ---------------------------------
  /// @name Accessing Properties
  /// ---------------------------------
  
  /** Elevation (in meters) of the point. */
  @property (nonatomic) CLLocationDistance elevation;
  
  /// Returns nil if elevation is not present in waypoint information.
  @property (nonatomic, readonly) NSNumber * _Nullable elevationBoxed;
  
  /** Creation/modification timestamp for element. 
      Date and time in are in Univeral Coordinated Time (UTC), not local time! 
      Conforms to ISO 8601 specification for date/time representation.
      Fractional seconds are allowed for millisecond timing in tracklogs */
  @property (strong, nonatomic) NSDate * _Nonnull time;
  
  /** Magnetic variation (in degrees) at the point */
  @property (nonatomic) CGFloat magneticVariation;
  
  /** Height (in meters) of geoid (mean sea level) above WGS84 earth ellipsoid. As defined in NMEA GGA message. */
  @property (nonatomic) CLLocationDistance geoidHeight;
  
  /** The GPS name of the waypoint. This field will be transferred to and from the GPS. 
      GPX does not place restrictions on the length of this field or the characters contained in it. 
      It is up to the receiving application to validate the field before sending it to the GPS. */
  @property (strong, nonatomic) NSString * _Nullable name;
  
  /** GPS waypoint comment. Sent to GPS as comment. */
  @property (strong, nonatomic) NSString * _Nullable comment;
  
  /** A text description of the element. Holds additional information about the element intended for the user, not the GPS. */
  @property (strong, nonatomic) NSString * _Nullable desc;
  
  /** Source of data. Included to give user some idea of reliability and accuracy of data. 
      "Garmin eTrex", "USGS quad Boston North", e.g. */
  @property (strong, nonatomic) NSString * _Nullable source;
  
  /** Link to additional information about the waypoint. */
  @property (strong, nonatomic) NSArray<GPXLink *> * _Nullable links;
  
  /** Text of GPS symbol name. For interchange with other programs, use the exact spelling of the symbol as displayed on the GPS. 
      If the GPS abbreviates words, spell them out. */
  @property (strong, nonatomic) NSString * _Nullable symbol;
  
  /** Type (classification) of the waypoint. */
  @property (strong, nonatomic) NSString * _Nullable type;
  
  /** Instantaneous speed at the point in m/s. */
  @property (strong, nonatomic) NSNumber * _Nullable speed;
  
  /** Instantaneous course at the point. */
  @property (strong, nonatomic) NSNumber * _Nullable course;
  
  /** Type of GPX fix. */
  @property (nonatomic) NSInteger fix;
  
  /** Number of satellites used to calculate the GPX fix. */
  @property (nonatomic) NSInteger satellites;
  
  /** Horizontal dilution of precision. */
  @property (nonatomic) double horizontalDilution;
  
  /** Vertical dilution of precision. */
  @property (nonatomic) double verticalDilution;
  
  /** Position dilution of precision. */
  @property (nonatomic) double positionDilution;
  
  /** Number of seconds since last DGPS update. */
  @property (nonatomic) double ageOfDGPSData;
  
  /** ID of DGPS station used in differential correction. */
  @property (nonatomic) NSInteger DGPSid;
  
  /** You can add extend GPX by adding your own elements from another schema here. */
  @property (strong, nonatomic) GPXExtensions * _Nullable extensions;
  
  /** The latitude of the point. Decimal degrees, WGS84 datum. */
  @property (nonatomic) CLLocationDegrees latitude;
  
  /** The longitude of the point. Decimal degrees, WGS84 datum. */
  @property (nonatomic) CLLocationDegrees longitude;
  
  
  /// ---------------------------------
  /// @name Create Waypoint
  /// ---------------------------------
  
  /** Creates and returns a new waypoint element.
   @param latitude The latitude of the point.
   @param longitude The longitude of the point.
   @return A newly created waypoint element.
   */
  + (GPXWaypoint * _Nonnull)waypointWithLatitude:(CGFloat)latitude longitude:(CGFloat)longitude;
  
  
  /// ---------------------------------
  /// @name Creating Link
  /// ---------------------------------
  
  /** Creates and returns a new link element.
   @param href URL of hyperlink
   @return A newly created link element.
   */
  - (GPXLink * _Nonnull)newLinkWithHref:(NSString * _Nonnull)href;
  
  
  /// ---------------------------------
  /// @name Adding Link
  /// ---------------------------------
  
  /** Inserts a given GPXLink object at the end of the link array.
   @param link The GPXLink to add to the end of the link array.
   */
  - (void)addLink:(GPXLink * _Nonnull)link;
  
  /** Adds the GPXLink objects contained in another given array to the end of the link array.
   @param array An array of GPXLink objects to add to the end of the link array.
   */
  - (void)addLinks:(NSArray<GPXLink *> * _Nonnull)array;
  
  
  /// ---------------------------------
  /// @name Removing Link
  /// ---------------------------------
  
  /** Removes all occurrences in the link array of a given GPXLink object.
   @param link The GPXLink object to remove from the link array.
   */
  - (void)removeLink:(GPXLink * _Nonnull)link;
  
  @end
  