The JTS Topology Suite is a Java library for creating and manipulating vector geometry.

Related tags

Geospatial jts
Overview

JTS Topology Suite

The JTS Topology Suite is a Java library for creating and manipulating vector geometry. It also provides a comprehensive set of geometry test cases, and the TestBuilder GUI application for working with and visualizing geometry and JTS functions.

JTS logo

Travis Build Status GitHub Action Status

Join the chat at https://gitter.im/locationtech/jts

JTS is a project in the LocationTech working group of the Eclipse Foundation.

LocationTech

Requirements

Currently JTS targets Java 1.8 and above.

Resources

Code

Websites

Communication

License

JTS is open source software. It is dual-licensed under:

See also:

Documentation

History

  • Version History
  • History from the previous JTS SourceForge repo is in the branch _old/history
  • Older versions of JTS can be found on SourceForge
  • There is an archive of distros of older versions here

Contributing

If you are interested in contributing to JTS please read the Contributing Guide.

Downstream Projects

Derivatives (ports to other languages)

Via GEOS

There are many projects using GEOS - for a list see the GEOS wiki.

Comments
  • Invalid union result from valid polygon inputs

    Invalid union result from valid polygon inputs

    I found a case in which the union of two valid small polygons result in an invalid output. NOTE I had to tweak the JTS testrunner slightly to get the HEXWKB printed in order to check for validity, I might send a PR to help with this in the future.

    The XML test file can be found on https://trac.osgeo.org/geos/ticket/838 (WARNING: the test expects the invalid result, so you'll need more care to check the bug)

    type-bug jts-core jts-core-overlay 
    opened by strk 43
  • Explicit CoordinateSequence support for XYZM

    Explicit CoordinateSequence support for XYZM

    Checklist:

    • [x] CoordinateSequence.getMeasures() default method
    • [x] Update to PackedCoordinateSequence
    • [x] discussion and feedback
    • [x] Introduce Coordinate accessors for getX(), getY(), getZ(), getM()
    • [x] Introduce explicit CoordinateXY, CoordinateXYM, CoordinateXYZM
    • [x] Updated CoordinateTest to cover subclasses
    • [x] Added CoordinateSequence hasZ and hasM default methods to perform common dimension and measures checks
    • [x] Updated PackedCoordinateSequenceTest to try out XY, XYM, XYZ, XYZM functionality
    • [x] Updated CoordinateArraySequence as well
    • [x] Added CoordinateSequence.createCoordinate() default method, to assist with client use
    • [x] Reworked ExtendedCoordinateSequence example

    Ideally:

    • [ ] proof of fitness with feedback from https://github.com/locationtech/jts/pull/291 WKT Reader/Writer enhancement
    type-improvement jts-core 
    opened by jodygarnett 29
  • Expose ordinal constants and use instead of reflection

    Expose ordinal constants and use instead of reflection

    Primary goal of this PR is to avoid use of reflection in GeometryExtracter. Keeps existing API as deprecated.

    The rename of SORTINDEX_* to ORDINAL_* is a suggestion from previous discussion.

    jts-core type-refactor 
    opened by bjornharrtell 18
  • Release schedule for 1.17?

    Release schedule for 1.17?

    Do we have any schedule for releasing 1.17 (or a bugfix 1.16.2)? In addition to bug #490, there's blocking bug for me that is fixed on master but not in 1.16.1. For a Presto release, we'd need to pin to a released version of JTS.

    For context, the bug is an off-by-one error in PackedCoordinateSequence that causes an IndexOutOfBounds exception.


    Release activities from RELEASING.md

    • [x] update release notes (see JTS_Version_History )
    • [ ] experiment: review fixed issue and assign to 1.17.0 milestone
    • [x] release process (resulting in a tag)
    • [x] submit for eclipse foundation review (a two week window for feedback)
    • [ ] release to maven central
    type-question build 
    opened by jagill 17
  • Import cleanup

    Import cleanup

    This is the first, and largest, of the patches needed for autotranslation to JavaScript (see https://github.com/bjornharrtell/jsts/issues/178) and aims to remove imports that are unused and resolve on demand imports.

    opened by bjornharrtell 17
  • NPE when using very large STRtree with concurrent insertion

    NPE when using very large STRtree with concurrent insertion

    I'm trying to build an stRTree large which contains 90,000,000 line strings. I'm getting a weird issue on first query (when it builds). A quadtree based version of this works fine. Are there any things to be aware of when I create a very large stRTree?

    java.lang.NullPointerException: null
    	at org.locationtech.jts.index.strtree.STRtree$1.compare(STRtree.java:83) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    	at java.util.TimSort.binarySort(TimSort.java:296) ~[?:?]
    	at java.util.TimSort.sort(TimSort.java:239) ~[?:?]
    	at java.util.Arrays.sort(Arrays.java:1515) ~[?:?]
    	at java.util.ArrayList.sort(ArrayList.java:1749) ~[?:?]
    	at java.util.Collections.sort(Collections.java:177) ~[?:?]
    	at org.locationtech.jts.index.strtree.STRtree.createParentBoundables(STRtree.java:123) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    	at org.locationtech.jts.index.strtree.AbstractSTRtree.createHigherLevels(AbstractSTRtree.java:157) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    	at org.locationtech.jts.index.strtree.AbstractSTRtree.build(AbstractSTRtree.java:107) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    	at org.locationtech.jts.index.strtree.AbstractSTRtree.query(AbstractSTRtree.java:243) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    	at org.locationtech.jts.index.strtree.STRtree.query(STRtree.java:205) ~[fastgeographic-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    

    UPDATE: This only occurs when doing parallel loading of the stRTree. I believe there must be a thread safety issue.

    status-DUP jts-core 
    opened by samgurtman-zz 16
  • Made RelateComputer aware of the LineIntersector used by GeometryGraphOperation

    Made RelateComputer aware of the LineIntersector used by GeometryGraphOperation

    Fixed isProper check for use of PrecisionModel in RobustLineIntersector Fixed RelateOp to pass its LineIntersector to RelateComputer. Added unit test.

    type-improvement status-WONT FIX jts-core 
    opened by FObermaier 16
  • Force StringUtil.toString(double) method to use Locale.ENGLISH

    Force StringUtil.toString(double) method to use Locale.ENGLISH

    Currently StringUtil.toString(double) function uses Locale.getDefault() to write a double to a String. This function is being used from within CoordinateSequences.toString(CoordinateSequence) making the output un[read|use]able in environments that have a comma as a decimal seperator (like e.g. german).

    This PR contains

    • Fix for StringUtil.toString(double) method to use Locale.ENGLISH
    • Add methods to change decimal format pattern
    • Add unit test

    Signed-off-by: Felix Obermaier [email protected]

    status-DUP type-improvement jts-core 
    opened by FObermaier 15
  • Clarification on JTS license questions for downstream projects

    Clarification on JTS license questions for downstream projects

    Recent State of JTS presentation brought to light some questions from downstream projects around license change.

    Downstream projects include both:

    • ports: GEOS, JSTS, etc..
    • use: GeoTools, GeoServer, etc ...

    Q: JTS no longer uses LGPL, what does this mean for downstream projects?

    License change gives downstream projects more options using a dual license approach:

    • We have a BSD-3 license (permissive license than LGPL) in part to allow iOS use of the project for mobile development.
    • We have an EPL license (similar permissive to LGPL with different wording around patents).

    Q: But I thought LGPL and EPL do not mix? How does this effect the LGPL GEOS project?

    For use of JTS by an LGPL project like GEOS:

    • Please use the BSD-3 License (the BSD-3 License is compatible with the LGPL license used by GEOS)
    • Long term the EPL license is being revised to work with GPL / LGPL allowing GEOS the choice of BSD-3 or EPL license.

    Q: How can the LGPL GEOS program contribute fixes to JTS?

    Using a contributor license agreement:

    • The GEOS team should be sure to have permission (via osgeo CLA or similar) to relicense the work in question. The JTS team wants to be in position to distribute any fix as both BSD and EPL.

    Q: Why do you keep saying BSD-3, I thought it was the Eclipse Distribution License (BSD-3)

    The BSD-3 license used is called Eclipse Distribution License (as eclipse is the distributing organization.)

    Should we would like to add a FAQ entry to handle these questions? Or just take to jts-dev email list (or [email protected] email list).

    type-improvement type-question doc 
    opened by jodygarnett 15
  • TWKB read and write implementation

    TWKB read and write implementation

    I continued previous work done with https://github.com/locationtech/jts/pull/452 and twkb branch.

    What I've done:

    • removed lombok dependency
    • moved reader and writer to jts-io-common module, since TWKB is an external format, it's more logical to have it outside jts-core
    • split TWKBIO code into TWKBReader and TWKBWriter
    • aligned optimizations on PostGis 2.5+ behavior, and removed disabling/enabling optimization from writer API
    • regenerated tests data from postgis
    jts-io type-new-feature 
    opened by murdos 13
  • The distance calculated from point projections and linear distance is different and difference is big

    The distance calculated from point projections and linear distance is different and difference is big

    Hello I am projecting two points onto the shape and trying to calculate the distance between two projections. I also calculated the distance between two coords . Two distances differ and the difference is big. Can you please help me to find a mistake or prove that it is expected result in calculations. the shape : LINESTRING (174.76716 -36.84489, 174.76715 -36.84489, 174.76719 -36.84481, 174.76598196955078 -36.84449656507264)

    point one: "lon": 174.76716, "lat": -36.84489, point two: "lon": 174.76646666666667, "lat": -36.844705,

    point one projection: 0.0 point two projection: 8.286513887779961E-4

    the difference between two projections is converted to meters and is equal to 92.2450506439055

    Please confirm that my calculations are correct or wrong With kind regards

    type-question 
    opened by b2bking 13
  • Polygonizer::getInvalidRingLines returns duplicate lines

    Polygonizer::getInvalidRingLines returns duplicate lines

    As reported in https://github.com/libgeos/geos/issues/782

    After polygonizing the following geometry, Polygonizer::getInvalidRingLines returns duplicates of the invalid ring.

    MULTILINESTRING ((0 0, 1 0, 1 1, 0 1, 0 0), (0 0, 0.5 0.5), (1 1, 2 2, 1 2, 2 1, 1 1))

    type-bug jts-core 
    opened by dbaston 0
  • Fix PolygonHoleJoiner

    Fix PolygonHoleJoiner

    Fixes PolygonHoleJoiner to work in all cases. This allows PolygonTriangulator, ConstrainedDelaunayTriangulator, and ConcaveHullOfPolygons to work correctly for all cases.

    Fixes #921

    type-improvement jts-core 
    opened by dr-jts 0
  • WKTReader silently adds dimensions when setIsOldJtsCoordinateSyntaxAllowed is true

    WKTReader silently adds dimensions when setIsOldJtsCoordinateSyntaxAllowed is true

    As the title says, WKTReader silently adds dimension.

    For example, it will create coordinate sequence 10 10 NaN after load POINT (10, 10). The following test can reproduce this behavior.

    public void testDimensionConsistence() throws Exception {
        //test 2-d point with XY coordinate
        CoordinateSequence seq1 = createSequence(Ordinate.createXY(), new double[] {10, 10});
        Point pt1 = (Point)readerXYOld.read("POINT (10 10)");
        assertTrue(isEqual(seq1, pt1.getCoordinateSequence()));
    }
    

    Is it designed to behave this way?

    I could fix the dimension change alone. But a thorough fix may need some more time, as there may need some conversion for mixed use of 2-d and 3-d coordinates. At present such conversion is useless as WKTReader always extend 2-d coordinates to 3-d.

    opened by chenhh021 0
  • Misleading documentation for LocationIndexedLine

    Misleading documentation for LocationIndexedLine

    A user of NetTopologySuite reported that there is some misleading documentation for LocationIndexedLine.project and LocationIndexedLine.indexOf. Both state to do only almost similar things while they exactly the same thing:

    https://github.com/locationtech/jts/blob/1c0902d47f96f383be3723cfc2c5c24f60cbe0dc/modules/core/src/main/java/org/locationtech/jts/linearref/LengthIndexedLine.java#L116-L136

    https://github.com/locationtech/jts/blob/1c0902d47f96f383be3723cfc2c5c24f60cbe0dc/modules/core/src/main/java/org/locationtech/jts/linearref/LengthIndexedLine.java#L185-L197

    opened by FObermaier 0
  • Add reading Feature properties to GeoJsonReader

    Add reading Feature properties to GeoJsonReader

    The current GeoJsonReader can import a whole FeatureCollection but it is difficult to later identify each Feature by its geometry. I think it would be very helpful to add the properties of a Feature as user data to the Feature geometry. For my own purposes I had to modify just one method in the current GeoJsonReader to achieve that.

      private Geometry createFeature(Map<String, Object> geometryMap, GeometryFactory geometryFactory)
          throws ParseException {
          try {
              @SuppressWarnings("unchecked")
              Map<String, Object> innerGeometryMap = (Map<String, Object>) geometryMap.get(GeoJsonConstants.NAME_GEOMETRY);
              @SuppressWarnings("unchecked")
              Map<String, Object> properties = (Map<String, Object>) geometryMap.get(GeoJsonConstants.NAME_PROPERTIES);
              Geometry geometry = create(innerGeometryMap, geometryFactory);
              geometry.setUserData(properties);
              return geometry;
          } catch (RuntimeException e) {
              throw new ParseException("Could not parse Feature from GeoJson string.", e);
          }
      }
    

    It would be nice if this could be added to the official GeoJsonReader.

    opened by mipastgt 1
Releases(1.19.0)
  • 1.19.0(Jun 21, 2022)

    Release Date: 06/21/2022

    New Features

    • Add ConstrainedDelaunayTriangulator and PolygonTriangulator (#775, #862)
    • Add Tri data structure for representing triangulations (#775)
    • Add DiscreteFrechetDistance (#764, #783)
    • Add OffsetCurve class (#810, #816)
    • Add ConcaveHull class for points (#823, #829)
    • Add ConcaveHullOfPolygons class (#870)
    • Add PolygonHullSimplifier class (#861, #880)
    • TWKB read and write implementation (#854)

    Functionality Improvements

    • Improve GeometryFixer behaviour for holes outside polygons (#772)
    • Simplify and fix logic of BufferParameters.setQuadSegs (#778)
    • Improve KdTree query code to avoid recursion (#779)
    • Add KdTree seeding toSnappingNoder (#780)
    • Add GeometryFixer option to preserve Multi geometry types when collapses occur (#791)
    • Make QuadTree thread-safe (#792)
    • Allow specifying a fixed PrecisionModel via grid size (#804)
    • Improve Densifier to interpolate Z values (#835)
    • Add support for GeoJSON Feature and FeatureCollection types (#837)
    • Add WKTReader.setFixStructure to fix WKT input (#848)
    • Improve LineSegment.hashCode to reduce collisions (#872)

    Performance Improvements

    • Improve performance of CoveageUnion by using boundary chains (#891)

    Bug Fixes

    • Fix WKTReader geometry typename parsing (#786)
    • Fix CoordinateArrays.reverse to handle zero-length arrays #787
    • Fix GeometryFixer to appply isKeepCollapsed flag to GeometryCollection elements (#790)
    • Fix RectangleIntersects to handle XYZM geometry (#794)
    • Fix various operations to handle XYZM geometry (#795)
    • Fix SnapRoundingNoder to use tolerance in noding (also fixes GeometryPrecisionReducer) (#802)
    • Fix MaximumInscribedCircle to avoid infinite-looping on flat collapsed input (#807)
    • Add OverlayNG result area heuristic check (#812)
    • Fix the buffers generated for mitred joins (#818)
    • Fix WKTReader to produce correct XY coordinate dimension for POLYGON EMPTY (#828)
    • Fix RelateOp for a snapped line boundary point (#839)
    • Fix IsValidOp for repeated node points (#845)
    • Fix IsSimpleOp for repeated endpoints (#851)
    • Fix GeometryFixer via noding check for zero-distance buffers (#867)
    • Fix MinimumDiameter.minimumRectangle for flat inputs (#875)
    • Fix BufferOp inverted ring check optimization (#878)
    • Fix STRtree nearest-neighbour queries on empty trees to avoid NPE (#886)
    • Remove transitive compile dependency on junit from jts-io-commmon (#855)
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.19.0-javadoc.jar(3.12 MB)
    jts-core-1.19.0-sources.jar(1.02 MB)
    jts-core-1.19.0.jar(1.05 MB)
    jts-io-common-1.19.0-javadoc.jar(59.31 KB)
    jts-io-common-1.19.0-sources.jar(20.46 KB)
    jts-io-common-1.19.0.jar(37.75 KB)
    JTSTestBuilder.jar(2.74 MB)
  • jts-1.18.2(Aug 27, 2021)

    Version 1.18.2

    Release Date: 08/27/2021

    API Changes

    • Move IsSimpleOp to org.locationtech.jts.operation.valid package (#717)

    Functionality Improvements

    • Add GeometryFixer class (#704)
    • Improve design and performance of IsSimpleOp (#717, #754)
    • Improve design and perforance of IsValidOp (#743, #748, #755, #756, #757)
    • Fix SortedPackedIntervalRtree to be thread-safe (fixes PreparedPolygon too) (#746)

    Bug Fixes

    • Fix InteriorPoint to handle partially-empty collections (#698)
    • Fix MultiPoint.isValid to check validity correctly (#700)
    • Fix WKTReader and WKTWriter handling of collections with all empty elements (#702)
    • Fix HalfEdge.prev() method (#703)
    • Fix BufferOp to remove invalid elements caused by inverted ring curves (#706)
    • Fix IsSimpleOp duplicate lines bug (#716)
    • Fix Angle.interiorAngle to produce interior angle correctly (#721)
    • Fix IsValidOp to correctly report invalidity for certain kinds of LinearRings (#737)
    • Fix GeometryPrecisionReducer to support the "keep collapsed components" semantics (#738)
    • Fix VoronoiDiagramBuilder to respect user-provided clip envelope (#740)
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.18.2-javadoc.jar(3.01 MB)
    jts-core-1.18.2-sources.jar(982.04 KB)
    jts-core-1.18.2.jar(994.34 KB)
    jts-io-common-1.18.2-javadoc.jar(40.55 KB)
    jts-io-common-1.18.2-sources.jar(8.74 KB)
    jts-io-common-1.18.2.jar(17.10 KB)
    JTSTestBuilder.jar(2.61 MB)
  • jts-1.18.1(Feb 26, 2021)

    Version 1.18.1

    Release Date: 02/26/2021

    Functionality Improvements

    • Check for invalid polygonal geometry before fixing in DouglasPeuckerSimplifier, VWSimplifier, Densifier (#656)
    • Add Coordinate and subclasses create() methods (#637)
    • Ensure OverlayNG input line order is preserved (#665)
    • Add UnaryUnionNG functions that accept Collections (#669 and #670)
    • Switch to using compact-SRID WKB format (#664)
    • Improve WKBReader error checking (#675)
    • Improve Densifier splitting algorithm to create longer segments (#677)
    • Allow constructing invalid Polygons and LinearRings with only 3 vertices (#682)
    • Ensure invalid 3-point polygons and rings are handled correctly (#683)
    • Fix GeoJSONReader to parse null and empty coordinates as empty geometry (#687)
    • Fix GeoJSONWriter to emit empty coordinates array for empty point and linestring (#688)
    • Add MaximumInscribedCircle check for invalid tolerance, to avoid infinite loops (#696)
    • Add GeoJsonWriter.setForceCCW method to emit polygons with CCW orientation, as per GeoJSON specification (#694)

    Bug Fixes

    • Ensure Densifier creates Coordinates with same class as input (#637)
    • Fix Relate for cases with closed linear geometry and empty geometry (#671)
    • Fix Densifier to avoid splitting segments with length equal to distance tolerance (#676)
    • Fix Geometry.compareTo to test polygon holes (#678)
    • Fix OverlayNG handling of polygons with interior flat lines (#685)
    • Fix Polygonizer to avoid NPE on invalid input (#692)

    WKBDump

    • Added utility to dump out formatted WKB (#673)
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.18.1-javadoc.jar(3.02 MB)
    jts-core-1.18.1-sources.jar(953.46 KB)
    jts-core-1.18.1.jar(972.56 KB)
    jts-io-common-1.18.1-javadoc.jar(40.87 KB)
    jts-io-common-1.18.1-sources.jar(8.53 KB)
    jts-io-common-1.18.1.jar(16.93 KB)
    JTSTestBuilder.jar(2.60 MB)
  • jts-1.18.0(Dec 23, 2020)

    Version 1.18.0

    Release Date: 12/23/2020

    API Changes

    • GeometryPrecisionReducer is less tolerant of invalid input (but also avoids failing on some valid ones) (#648)
    • Moved Position and Quadrant to org.locationtech.jts.geom package
    • Removed SimpleSnapRounder - use SnapRoundingNoder instead
    • Deprecated MCIndexSnapRounder - use SnapRoundingNoder instead

    Functionality Improvements

    • Improve Orientation.isCCW to handle flat topology collapse (#588)
    • Add KMLReader (#593)
    • Add Densifier.setValidated method to allow disabling expensive polygon validation (#595)
    • Add OverlayNG codebase (#599)
    • Add Z support in OverlayNG (#645)
    • Add system property jts.overlay=ng to enable use of OverlayNG in Geometry methods (#615)
    • Add SnapRoundingNoder (#599)
    • Add SnappingNoder (#599)
    • Change GeometryPrecisionReducer to use OverlayNG with Snap-Rounding
    • Change GeometryNoder to use SnapRoundingNoder
    • Add KdTree size and depth methods (#603)
    • Improve WKBWriter to write empty Polygons using a more compact representation (#623)
    • Support read and initialize internal structure of STRtree and Quadtree (#634)
    • Improve GeometryPrecisionReducer to handle GeometryCollections (#648)
    • Add Orientation.isCCWArea (#655)

    Performance Improvements

    • Improve performance of UnaryUnionOp by removing OverlayUnion optimization (#644)

    Bug Fixes

    • Fix RayCrossingCounter to handle XYZM coordinates (#589)
    • Fix PackedCoordinateSequence to always use XYZM coordinates when dimension is 4 (#591)
    • Fix OrdinateFormat to work around a JDK issue with the minus sign character in Locale.NO (#596)
    • Fix GeoJsonReader to throw a ParseException for empty arrays (#600)
    • Fix WKTFileReader handling of files with large amount of whitespace (#616)
    • Fix WKBWriter to output 3D empty Points with 3 ordinates (#622)
    • Fix Geometry.reverse to handle all geometry structures (#628)
    • Fix GeometryPrecisionReducer to avoid silently mangling input (#648)
    • Fix Geometry.buffer to avoid dropping large polygon areas in some situations (#655)
      • also fixes DouglasPeuckerSimplifier (#498)

    JTS TestBuilder

    Functionality Improvements

    • Add Geometry Inspector sorting by Area or Length
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.18.0-javadoc.jar(3.02 MB)
    jts-core-1.18.0-sources.jar(950.49 KB)
    jts-core-1.18.0.jar(970.72 KB)
    jts-io-common-1.18.0-javadoc.jar(35.46 KB)
    jts-io-common-1.18.0-sources.jar(6.77 KB)
    jts-io-common-1.18.0.jar(15.10 KB)
    JTSTestBuilder.jar(2.58 MB)
  • jts-1.17.1(Aug 28, 2020)

    Version 1.17.1

    Release Date: August 27, 2020

    Java Version: 1.8

    Functionality Improvements

    • Add WKBReader and WKBWriter support for POINT EMPTY (#567)

    Performance Improvements

    • Improve performance of PreparedPolygon covers and contains for point inputs (#577)

    Bug Fixes

    • Fix IndexedPointInAreaLocator thread-safety (#572)
    • Fix WKTReader to handle MultiPoints containing EMPTY (#575)
    • Fix API compile regression by removing deprecation on geometry reverse methods (#582)

    JTS TestBuilder

    Functionality Improvements

    • Add per-Layer palette control for Strokes and Fills

    JTS TestRunner

    Functionality Improvements

    • Enhance -geomfunc to load multiple function classes
    • Fix function registry to replace matching loaded functions (#569)
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.17.1-javadoc.jar(2.91 MB)
    jts-core-1.17.1-sources.jar(851.33 KB)
    jts-core-1.17.1.jar(869.47 KB)
    jts-io-common-1.17.1-javadoc.jar(35.47 KB)
    jts-io-common-1.17.1-sources.jar(6.72 KB)
    jts-io-common-1.17.1.jar(15.05 KB)
    JTSTestBuilder.jar(2.45 MB)
  • 1.17.0(Jun 30, 2020)

    Java Version: 1.8

    API Changes

    • Change Polygon getExteriorRing and getInteriorRingN accessors to return LinearRing.
      • This is a binary incompatible change to the method signature. Recompilation is necessary. No source code changes are required.

    Functionality Improvements

    • Added IndexedFacetDistance.isWithinDistance
    • Added OrdinateFormat to ensure that ordinate text output is accurate and consistent
    • Added Triangle.circumcentreDD
    • Added DD.determinant methods
    • Added Envelope methods getDiameter, copy, disjoint (#483)
    • Added Intersection class, refactored library to use it (#468)
    • Added CascadedPolygonUnion union-by-buffer on error capability (#470)
    • Added HalfEdge support for direction points (#479)
    • Added CoordinateList.toCoordinateArray(isForward) (#482)
    • Addded HPRtree Hilbert Packed R-tree (#494)
    • Added VariableBuffer class for computing varying-distance buffers (#495)
    • Added LineSegment.reflect method (#495)
    • Added MaximumInscribedCircle algorithm (#530)
    • Added LargestEmptyCircle algorithm (#530)

    Performance Improvements

    • Improve performance of UniqueCoordinateFilter (#422)
    • Improve performance of Polygonizer (#431)
    • Avoid use of ArrayList in MonotoneChain builders
    • Add DistanceOp line-line envelope short-circuit optimizations (#534)

    Bug Fixes

    • Fix PackedCoordinateSequence.Float construction methods (#379, #381)
    • Fix bug in Quadtree.ensureExtent (#416)
    • Fix bugs in LinearLocation endpoint handling (#421)
    • Fix bug in MinimumBoundingCircle maximum diameter algorithm, and provide method for it
    • Improve robustness of CascadedPolygonUnion by adding OverlapUnion
    • Fix bug in HalfEdge.insert method which caused CCW order not to be preserved in some cases
    • Fix generation of Voronoi diagrams for cases with sites in a square (#447)
    • Fix use of clipping envelope in VoronoiDiagramBuilder
    • Fix infinite loop on empty input in IndexedPointInAreaLocator and SortedPackedIntervalRTree (#462)
    • Fix WKT parsing in Turkish locale (#456)
    • Improve accuracy of LineSegment.lineIntersection (#468)
    • Fix Distance3DOp coordinate ordering (#480)
    • Fix Geometry.reverse() to have consistent behaviour and to copy all fields (#513)
    • Fix MinimumBoundingCircle.farthestPoints to work correctly (#522 and #533)
    • Fix DistanceOp handling of geometry collections with empty components (#524)
    • Fix GML parsing of coordinates and SRS name (#553)

    JTS TestBuilder

    Functionality Improvements

    • Add a UI to run external commands
    • Allow creating additional view layers
    • Add map view title, legend and border options
    • Support points in Reveal Topology mode
    • Add WKT panel Copy as WKB via Ctl-click

    JTS TestRunner

    Functionality Improvements

    • Allow test files/dirs to be specified as free args
    • Only load .xml files from directories

    JtsOp

    • Added command-line utility to run JTS operations
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.17.0-javadoc.jar(2.90 MB)
    jts-core-1.17.0-sources.jar(848.83 KB)
    jts-core-1.17.0.jar(867.37 KB)
    jts-io-common-1.17.0-javadoc.jar(35.49 KB)
    jts-io-common-1.17.0-sources.jar(6.72 KB)
    jts-io-common-1.17.0.jar(15.05 KB)
    JTSTestBuilder.jar(2.45 MB)
  • jts-1.16.1(Feb 19, 2019)

    Functionality Improvements

    • Added HilbertCode and HilbertCurveBuilder.
    • Added MortonCode and MortonCurveBuilder.
    • Improved InteriorPointArea algorithm performance and robustness

    Bug Fixes

    • Fix IsValidOp to handle empty components.
    • Fix ShapeWriter to handle Polygons with empty holes.
    • Fix CoordinteArraySequence to duplicate coordinate array if needed (rather than fix in place)

    JTS TestBuilder

    • Functionality Improvements
    Source code(tar.gz)
    Source code(zip)
    jts-core-1.16.1-javadoc.jar(2.81 MB)
    jts-core-1.16.1-sources.jar(814.25 KB)
    jts-core-1.16.1.jar(834.37 KB)
    jts-io-common-1.16.1-javadoc.jar(35.30 KB)
    jts-io-common-1.16.1-sources.jar(6.60 KB)
    jts-io-common-1.16.1.jar(15.01 KB)
    JTSTestBuilder.jar(2.31 MB)
  • jts-1.16.0(Sep 19, 2018)

    The JTS team is pleased to share the JTS 1.16.0 release.

    If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.

    API Changes

    • Added XYZM support to CoordinateSequence and CoordinateSequenceFactory with getDimension() and getMeasures() information.
    • Introduced Coordinate methods for getX(), getY(), getZ(), and getM().
    • Deprecated Coordinate.z field, use Coordinate.getZ()
    • Coordinate subclasses introduced for XY, XYM, XYZM representations.

    Functionality Improvements

    • Removed PackedCoordinateSequenceFactory constructor used to supply a default dimension, use appropriate create( size, dimension ) instead.
    • WKTReader and WKTWriter support for measures

    Acknowledgments

    • Thanks to Felix Obermaier for testing the release candidate and contributing fixes to the release!
    Source code(tar.gz)
    Source code(zip)
  • 1.16.0-RC1(Aug 20, 2018)

    The JTS team is pleased to share the release candidate JTS 1.16.0-RC1.

    If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.

    API Changes

    • Added XYZM support to CoordinateSequence and CoordinateSequenceFactory with getDimension() and getMeasures() information.
    • Introduced Coordinate methods for getX(), getY(), getZ(), and getM().
    • Deprecated Coordinate.z field, use Coordinate.getZ()
    • Coordinate subclasses introduced for XY, XYM, XYZM representations.

    Functionality Improvements

    • Removed PackedCoordinateSequenceFactory constructor used to supply a default dimension, use appropriate create( size, dimension ) instead.
    • WKTReader and WKTWriter support for measures
    Source code(tar.gz)
    Source code(zip)
  • jts-1.15.1(Aug 20, 2018)

    The JTS team is proud to announce the release of JTS 1.15.1.

    Thanks to everyone on the JTS team, and all the developers and users who contributed code and ideas for making this happen!

    If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.

    • Fix Geometry.copy() to copy instance fields

    The JTS Team

    Source code(tar.gz)
    Source code(zip)
  • jts-1.15.0(Nov 26, 2017)

    The JTS team is proud to announce the release of JTS 1.15.0.

    Thanks to everyone on the JTS team, and all the developers and users who contributed code and ideas for making this happen!

    If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.

    Functionality Improvements

    • Improve Quadtree to handle queries with null envelopes
    • Add STRtree K-Nearest Neighbours query

    We are also happy to announce that JTS is published to maven central:

    • org.locationtech.jts.jts-core-1.15.0.jar
    • org.locationtech.jts.jts-io-common-1.15.0.jar

    This release features a license change making the library available under your choice of the Eclipse Distribution License (a BSD 3 clause license) or Eclipse Public License. We provide a License FAQ based questions received by the team.

    This release changes the package structure, search and replace instructions are available for upgrading to this release.

    Martin Davis (JTS Lead)

    Source code(tar.gz)
    Source code(zip)
    jts-release-1.15.0-bin.zip(2.86 MB)
  • jts-1.15.0-M1(Nov 21, 2017)

Owner
LocationTech
LocationTech
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Jan 7, 2023
Planetiler - Flexible tool to build planet-scale vector tilesets from OpenStreetMap data in a few hours

Planetiler Planetiler (pla·nuh·tai·lr, formerly named "Flatmap") is a tool that generates Mapbox Vector Tiles from geographic data sources like OpenSt

On The Go Map 749 Jan 2, 2023
Flexible tool to build planet-scale vector tilesets from OpenStreetMap data in a few hours

Planetiler Planetiler (pla·nuh·tai·lr, formerly named "Flatmap") is a tool that generates Vector Tiles from geographic data sources like OpenStreetMap

On The Go Map 748 Dec 27, 2022
Open source routing engine for OpenStreetMap. Use it as Java library or server.

GraphHopper Routing Engine GraphHopper is a fast and memory efficient Java routing engine, released under Apache License 2.0. By default it uses OpenS

GraphHopper 4k Jan 3, 2023
LocationTech Spatial4j: A Geospatial Library for Java

Spatial4j (note: Spatial4j's official home page is at LocationTech: https://projects.eclipse.org/projects/locationtech.spatial4j but this README has r

LocationTech 880 Dec 23, 2022
LocationTech Spatial4j: A Geospatial Library for Java

Spatial4j (note: Spatial4j's official home page is at LocationTech: https://projects.eclipse.org/projects/locationtech.spatial4j but this README has r

LocationTech 880 Dec 23, 2022
An easy-to-implement library for the GeoHash algorithm

Overview An easy-to-implement library that can assist Java developers in using the GeoHash algorithm in order to create geocodes based on custom latit

Asterios Raptis 63 Mar 25, 2022
OpenMap is an Open Source JavaBeans-based programmer's toolkit. Using OpenMap, you can quickly build applications and applets that access data from legacy databases and applications.

$Source: /cvs/distapps/openmap/README,v $ $RCSfile: README,v $ $Revision: 1.11 $ $Date: 2002/11/06 19:11:02 $ $Author: bmackiew $ OpenMap(tm) What

OpenMap 65 Nov 12, 2022
GeoServer is an open source software server written in Java that allows users to share and edit geospatial data

GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using open standards.

GeoServer 3k Jan 1, 2023
An open-source GIS and remote sensing package

Whitebox Geospatial Analysis Tools This page is related to the open-source GIS Whitebox GAT. If you are instead interested in the stand-alone command-

John Lindsay 170 Apr 5, 2021
Geohash utitlies in java

geo Java utility methods for geohashing. Status: production, available on Maven Central Maven site reports are here including javadoc. Add this to you

Dave Moten 385 Dec 27, 2022
Geohash utitlies in java

geo Java utility methods for geohashing. Status: production, available on Maven Central Maven site reports are here including javadoc. Add this to you

Dave Moten 386 Jan 1, 2023
Java/JNI bindings to libpostal for for fast international street address parsing/normalization

jpostal These are the Java/JNI bindings to libpostal, a fast, multilingual NLP library (written in C) for parsing/normalizing physical addresses aroun

openvenues 94 Oct 15, 2022
HopLa Burp Suite Extender plugin - Adds autocompletion support and useful payloads in Burp Suite

HopLa ?? All the power of PayloadsAllTheThings, without the overhead. This extension adds autocompletion support and useful payloads in Burp Suite to

Synacktiv 522 Dec 24, 2022
Java libraries for serializing, deserializing, and manipulating JSON values

java-json-toolkit The json-toolkit repository contains the code to the following libraries: json-toolkit-text: basic library for conversion between te

d-coding GmbH 2 Jan 26, 2022
Source Code for TransRot, molecular modeling software for simulated annealing Monte Carlo geometry optimizations of atomic and molecular clusters.

TransRot Version 1.5.3 Steven L. Topper and Robert Q. Topper School of Engineering The Cooper Union   for the Advancement of Science and Art New York,

Steven Topper 5 Dec 14, 2022
Java implementation of BSP based CSG (Constructive Solid Geometry)

JCSG Java implementation of BSP based CSG (Constructive Solid Geometry). It is the only simple and free Java implementation I am aware of. This implem

Michael Hoffer 154 Sep 25, 2022
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Dec 30, 2022
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Jan 7, 2023