NetTopologySuite Versions Save

A .NET GIS solution that is fast and reliable for the .NET platform.

v2.5.0

1 year ago

Release of Milestone: 2.5

  • Updated JTS compatibility to 1.19.0

NTS issues resolved:

  • GeometryFixer changes GeometryType from MultiPolygon to Polygon #566
  • WKTReader creates XYZ sequence when IsOldNtsCoordinateSyntaxAllowed even though no z-ordinates are provided #589
  • KMLReader stuck infinite loop on <Polygon> #594
  • Consider adding EnvelopeCombiner.CombineAsGeometry #610
  • Line Segment GetHashCode is prone to hash collision #607

v2.4.0

2 years ago

Release of Milestone: 2.4

  • Updated JTS compatibility to 1.18.2. NOTES:
    • NetTopologySuite now contains a GeometryFixer class. To fix an invalid geometry call
      var geom = NetTopologySuite.Geometries.Utilities.GeometryFixer.Fix(invalidGeom);
      
    • Due to a small negligence NetTopologySuite.dll claims it is in sync with some JTS v18.2-SNAPSHOT.
      This is not true, it is in sync with JTS v1.18.2.
  • Reuse the objects to improve the performance of parsing WKTs (#548)
  • Add CoordinateList(int capacity) constructor overload (#552)
  • First and Last property to CoordinateSequence (#555)
  • Optimize CoordinateSequence.Copy for known types (#516)
  • Fix: GML3Writer writes in wrong namespace

NOTE: Due to a small negligence NetTopologySuite.dll claims it is in sync with some JTS v18.2-SNAPSHOT.
This is not true, it is in sync with JTS v1.18.2.

v2.3.0

2 years ago

Milestone: 2.3

  • Updated JTS compatibility to 1.18.1.
  • Add customizable variant of PackedDoubleCoordinateSequence (#482)
  • Remove usage of GeometryCollectionEnumerator from IEnumerable<Geometry> implementation (#508)
  • Address one issue that prevented the OverlayNG code from kicking in under certain circumstances, even when configured (#527)

v2.2.0

3 years ago

Milestone: 2.2

  • Updated JTS compatibility to 1.18.0. Try out the new OverlayNG code!
  • Added a way to invalidate the weak reference in PackedCoordinateSequence (#449)
  • Added some helpers to make it slightly easier to get new NtsGeometryServices and PrecisionModel instances.
  • Improve WKTReader parsing in certain edge cases (#484).
  • More work on improving geometry equality comparisons (#447).
  • Enable GML3 writing (thanks @kristofdegrave).
  • Improved consistency in accessing non-X/Y/Z/M values in coordinate sequences.
  • Copy GeometryFactory instances more faithfully when the only reason for the copy is to use a different SRID value (#437).

v2.1.0

3 years ago
  • Updated JTS compatibility to 1.17.0.
    • See JTS' own release notes for details of what's included in this; those will not be reproduced here.
    • Note that the API breaking change included in JTS 1.17.0 was not ported to this release. You may safely cast Polygon.ExteriorRing, any element of Polygon.InteriorRings, and the return value of Polygon.GetInteriorRingN to LinearRing instead.
  • Improve xmldoc.
  • Fix some packaging issues.
  • Add GeometryFactoryEx, which allows callers to force polygon rings to be a certain orientation.
  • Unseal NtsGeometryServices in order to allow subclasses to alter the behavior of CreateGeometryFactory.
  • Mark a few useful members on QuadEdge as public instead of internal (they are public in JTS).
  • GML readers read Z values now.
  • CoordinateSequence and Coordinate methods that accept Ordinate enum values now treat values greater than Measure16 the same way they treat all other "Ordinate value is not present in this instance" situations. In the most literal sense, this is technically a behavior breaking change, but only for people who are both casting integer values >32 to Ordinate enum values and actually using them with Coordinate or CoordinateSequence instances with at least 19 dimensions, at least 17 of which are measures.
  • STRtree<T>.Remove now has a possibility of working as expected when T is a value type, instead of never removing anything. It now uses the default equality comparer for the type. Reference types still use object reference equality, for backwards compatibility and performance reasons (it's OK to do this for value types, because Remove was essentially a really slow no-op for them anyway).
  • The internal Coordinate subclass that we use for everything other than XY / XYZ / XYM / XYZM now handles "missing" ordinate values consistently with how other Coordinate types handle them.
  • Copying a Geometry no longer clobbers its GeometryFactory with a brand new one based on the SRID (JTS uses a separate field for this, so this is more faithful).
  • More methods on GeometryFactory have been marked virtual, for consistency with JTS.
  • Fix an incorrect port: GeometryTransformer.Transform was inappropriately transforming a LinearRing into a plain LineString, which is never better.
  • The center of a Bintree Interval is now computed correctly (JTS does not have a method for this; previously, it was the same as the width).
  • Add Envelope.Diameter to get the largest possible distance between any two points that both intersect the bounding box.
  • Fix an issue with VoronoiDiagramBuilder clipping.
  • Start using Microsoft.DotNet.ApiCompat to help us avoid accidentally making API breaking changes.
  • In the same spirit of the improvements to WKT number formatting that came with JTS 1.17.0, also work around a very old bug in .NET Framework / earlier versions of .NET Core before 3.0. For details of the bug and its fix in .NET Core 3.0, see: https://devblogs.microsoft.com/dotnet/floating-point-parsing-and-formatting-improvements-in-net-core-3-0/
  • Add IEntireCoordinateSequenceFilter. Very similar to ICoordinateSequenceFilter, but it is only called once per CoordinateSequence, to enable some significant performance optimizations. We do not currently take advantage of this in NTS, but we're already looking at opportunities, and we're excited to see what you do with it!

v2.0.0

4 years ago

This major release represents several efforts to improve usability and consistency throughout NTS, brought on by some changes in JTS 1.16.0 that we felt would not be best to port as-is.

As such, this release contains many breaking changes, some of which are very significant. Because the NuGet ecosystem heavily favors using SemVer for versioning, we felt that it's time to start deviating from using the JTS compatibility version numbering scheme that we have used in the past, and call this first release 2.0.0.

Some of the breaking changes:

  1. NetTopologySuite is, again, the primary NTS package.
  2. GeoAPI has been gutted. The relevant useful parts are now inside of NTS.
  3. Many interfaces have been removed, in favor of just using their corresponding classes.
  4. Coordinate.Z is no longer stored in a field on the base class. Full Z support is added by subclasses.
  5. Ordinate / Ordinates now define 16 spatial dimensions and 16 measure dimensions.
  6. ICoordinateSequence (now just CoordinateSequence) now uses integer ordinate indexes.
  7. By default, reading WKT without "Z", "M", or "ZM" tags using WKTReader will now give a geometry that appears to support holding Z values, even if no Z values are actually present.
    • Set IsOldNtsCoordinateSyntaxAllowed to false to prevent this, but keep in mind that this will break things like "POINT (1 2 3)" that older versions of NTS supported.

GeoAPI issues addressed in 2.0.0, in the order they were closed:

  1. NetTopologySuite/GeoAPI#54: Remove obsolete interfaces, classes and members
  2. NetTopologySuite/GeoAPI#55: Future of Coordinate class
  3. NetTopologySuite/GeoAPI#59: Remove ICloneable implementations across the board
  4. NetTopologySuite/GeoAPI#64: Target just .NET Standard 2.0
  5. NetTopologySuite/GeoAPI#65: Remove reflection-based GeometryServiceProvider.Instance bootstrap
  6. NetTopologySuite/GeoAPI#68: Replace notable interfaces with abstract classes, for multiple reasons
  7. NetTopologySuite/GeoAPI#70: Remove (standalone) GeoAPI

NTS issues addressed in 2.0.0, in the order they were closed:

  1. #265: Update to JTS 1.16.0
  2. #292: Target just .NET Standard 2.0
  3. #294: Update to JTS 1.16.1
  4. #282: Exception while fetching Interior Point - NetTopologySuite.Geometries.TopologyException
  5. #291: Remove obsolete types and members
  6. #316: Mark a few more things obsolete
  7. #289: DistanceComputer.PointToSegmentString skips the last vertex of an ICoordinateSequence
  8. #308: Remove IGeometry warts
  9. #315: Tweak NuGet packages again
  10. #244: Consider replacing AssemblyInfo.cs and *.nuspec with additional things in *.csproj
  11. #309: Make IsWithinDistance an extension method
  12. #311: Fix the design of Ordinate values to be consistent and behave predictably
  13. #246: Aggregate operations
  14. #324: Support MSSQL-compatible WKT writing
  15. #156: WKTWriter doesn't create the expected result

v1.15.3

4 years ago

Issues resolved since v1.15.2:

  1. UnaryUnionOp used OverlayOp instead of SnapIfNeededOverlayOp (#326)
  2. v1.15.2 tried to use .snupkg for the symbols like v2 will be doing, but .snupkg has requirements that are incompatible with our v1.x builds, so I think debugging symbols were broken that whole time 🤦‍♂.

v1.15.2

5 years ago

Issues resolved since v1.15.1:

  1. Buffer(0) throws exception with a particular valid geometry (#260)
  2. NetTopologySuite packages do not specify that they are incompatible with GeoAPI 2.x (#283)

v1.15.1

5 years ago

v1.15

5 years ago

NOTE: NetTopologySuite.Common.props has a wrong value for GeoAPIPackageReferenceVersion. It is set to 1.7.5-pre024 and needs to be 1.7.5