Skip to content

Latest commit

 

History

History
78 lines (65 loc) · 8.85 KB

release-notes.md

File metadata and controls

78 lines (65 loc) · 8.85 KB

NetTopologySuite.IO.GPX Release Notes

  • GpxReader will now throw an XmlException when it encounters an unexpected top-level child element of the root gpx element, instead of running into an infinite loop (#41).
    • "Unexpected top-level child elements" are elements whose names we do not recognize, metadata or extensions showing up more than once, or the metadata element showing up somewhere after the first child element.
  • GpxReaderSettings now has an IgnoreUnexpectedChildrenOfTopLevelElement property to use to ignore those elements instead of throwing XmlException.
  • Allow specifying arbitrary namespaces (+prefixes) on the root element so that they don't have to be repeated on every extensions element (#36).
  • Add opt-in support in GpxWebLink for URI strings longer than 65519 characters, as a workaround for dotnet/runtime#1875 (#39).
    • If upstream relaxes this restriction in a later release, then this code will automatically "upgrade" to fully support the new higher restriction.
  • Updates to make this compatible with v2 of the core NTS library.

0.6.0

  • Mark upper-bounds on package dependencies to make it clear that this only supports the 1.x series.
  • GpxWriterSettings.TimeZoneInfo is no longer completely ignored (#30).
  • Fix an issue where written timestamps were being rounded to the nearest second instead of preserving as many significant digits as DateTime allows (#31).
  • Tweak the settings used for GpxFile.BuildString to avoid repeating the xmlns declaration for extensions that are declared in the standard GPX namespace (#33).
  • GpxReaderSettings now has an IgnoreBadDateTime property to use for ignoring a timestamp value that we cannot parse as an instance of the DateTime struct, to work around a 0000-00-00T00:00:00Z coming from CompeGPS (#29).
  • Update referenced packages to latest revisions.
  • The opt-in GpxReaderSettings.AllowMissingVersionAttribute property added in 0.3.1 has been replaced by IgnoreVersionAttribute, which enables the same situations as AllowMissingVersionAttribute did, plus situations where version was specified as something other than version='1.1' (#28).
  • GpxReaderSettings now has an opt-in AllowMissingVersionAttribute property, to allow reading files without a version attribute (#27).
  • GpxReaderSettings now has a DefaultCreatorIfMissing property to use for filling in a missing GpxMetadata.Creator value, to help read values saved from legacy versions of IHM (#23).
  • Custom GpxExtensionReader and GpxExtensionWriter subclasses can now override just one method if there's a common way to handle extensions regardless of where they show up (#26).
  • All immutable data model types now override Equals(object) and GetHashCode() to have "value" semantics (#9).
    • Mutable types, such as GpxFile, do not do this, for your own safety.
    • In all lists, including lists of web links, ordering matters. [A, B] is not considered equal to [B, A].
    • Extensions values are considered for equality.
      • If you do not use a custom GpxExtensionReader for extensions, or if yours always returns ImmutableXElementContainer, then this should work like you would expect it to work.
      • Otherwise, whenever you return non-null, it is your responsibility to make sure that the result's Equals(object) and GetHashCode() semantics match what you want the container's semantics to be.
  • GpxWebLink now has a constructor that accepts just the value for Href, since that's the only required value.
  • GpxLongitude no longer permits +180 as a legal value, in keeping with the GPX 1.1 schema. (#25).
    • Converting from NTS features will automatically replace +180 with the equivalent -180.
  • GpxLongitude, GpxLatitude, GpxDegrees, and GpxDgpsStationId now all have static MinValue and MaxValue fields to get the smallest and largest legal values.
  • GpxBounds now has a shortcut for getting the a value that covers the entire WGS-84 ellipsoid.
  • GpxWaypoint now has a constructor that accepts a GeoAPI.Geometries.Coordinate instance, for convenience (#20).
  • GpxWaypoint constructors and helper method now both reject infinite values of elevationInMeters (#24).
  • GpxWaypoint constructors and helper methods now throw ArgumentOutOfRangeException instead of ArgumentException in situations where the former is more appropriate.
  • Trying to set GpxFile.Metadata to null now throws ArgumentNullException right away (#21).
  • Add methods on GpxFile to allow converting to / from string, for convenience (#19).
  • Add a default constructor for GpxTrackSegment so that its .WithX methods are actually meaningful (#22).
  • Give most data objects constructors and .WithX methods to make it easier to create instances that only set a few members (#13).
  • Add GpxFile as a significantly easier way to read + write our underlying data object representation all in one go (#12 / #14).
  • Make NetTopologySuiteFeatureBuilderGpxVisitor internal, since it's really just an implementation detail.
  • Some more appropriate early null handling in miscellaneous places across-the-board.
  • Default time zone is now UTC instead of local, since the documentation indicates that this is the convention.
  • Reorder some data members (both in constructors and .ToString() overrides) according to XSD order.
  • Remove the awkward GpxReader.ReadFeatures overload that took in NetTopologySuiteFeatureBuilderGpxVisitor.
  • Fix an off-by-one issue that would cause features to get skipped over when not separated by whitespace. (#18).
  • Fix an issue where values very close to zero would be written in scientific notation, violating the GPX spec. (#15).
  • Add some more ToString() overrides
  • GpxWaypoint constructor parameters reordered to match the order of the elements that the XSD schema requires
  • ImmutableGpxWaypointTable now throws ArgumentException if it encounters a null waypoint.
  • Rename GpxMetadata.CreationTime to GpxMetadata.CreationTimeUtc and validate that it is, in fact, marked as UTC (when specified at all).
  • xmldoc (#6)
  • No longer exposing save / load methods on individual data elements.
  • Fix a copy-paste error in GpxTrack (#11)

0.1.0

  • Initial release.