- Updates to make this compatible with v2 of the core NTS library.
- 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 thexmlns
declaration for extensions that are declared in the standard GPX namespace (#33).
GpxReaderSettings
now has anIgnoreBadDateTime
property to use for ignoring a timestamp value that we cannot parse as an instance of theDateTime
struct, to work around a0000-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 byIgnoreVersionAttribute
, which enables the same situations asAllowMissingVersionAttribute
did, plus situations whereversion
was specified as something other thanversion='1.1'
(#28).
GpxReaderSettings
now has an opt-inAllowMissingVersionAttribute
property, to allow reading files without aversion
attribute (#27).
GpxReaderSettings
now has aDefaultCreatorIfMissing
property to use for filling in a missingGpxMetadata.Creator
value, to help read values saved from legacy versions of IHM (#23).- Custom
GpxExtensionReader
andGpxExtensionWriter
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)
andGetHashCode()
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 returnsImmutableXElementContainer
, 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'sEquals(object)
andGetHashCode()
semantics match what you want the container's semantics to be.
- If you do not use a custom
- Mutable types, such as
GpxWebLink
now has a constructor that accepts just the value forHref
, 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
, andGpxDgpsStationId
now all have staticMinValue
andMaxValue
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 aGeoAPI.Geometries.Coordinate
instance, for convenience (#20).GpxWaypoint
constructors and helper method now both reject infinite values ofelevationInMeters
(#24).GpxWaypoint
constructors and helper methods now throwArgumentOutOfRangeException
instead ofArgumentException
in situations where the former is more appropriate.- Trying to set
GpxFile.Metadata
tonull
now throwsArgumentNullException
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 inNetTopologySuiteFeatureBuilderGpxVisitor
. - 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 requiresImmutableGpxWaypointTable
now throwsArgumentException
if it encounters anull
waypoint.- Rename
GpxMetadata.CreationTime
toGpxMetadata.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)
- Initial release.