Skip to content
Commits on Source (34)
.idea
*.iml
target
.classpath
.project
.settings
.externalToolBuilders
build
\ No newline at end of file
language: java
jdk:
- oraclejdk8
sudo: false
cache:
directories:
- $HOME/.m2
install: mvn install -B -V
# Contributing to JTS
The project welcomes contributions. JTS is a mature, widely-used library, so contributions will be reviewed carefully to ensure they do not compromise the quality of the codebase.
To start, it helps to announce what you are working on ahead of time to confirm that it is an acceptable contribution. To do this post to the [JTS Mailing List](https://locationtech.org/mailman/listinfo/jts-dev).
The following sections outline workflows involved with contributions.
## Become a Contributor
In order to have code contributions accepted, the submitter must:
1. Sign the [Eclipse Contributor Agreement](https://www.eclipse.org/legal/ECA.php) (ECA) with the Eclipse Foundation. Use the registered email with the Git commits associated to the GitHub pull request.
## Develop a Contribution
Code contributions must include a license header at the top of each file. A sample header for Java files is [here](doc/sample_java_header.txt).
Code contributions should include the following:
* Javadoc on classes and methods
* Unit Tests to demonstrate code correctness and allow this to be maintained going forward. In the case of bug fixes the unit test should demonstrate the bug in the absence of the fix (if any). Unit Tests are usually JUnit classes, or in some cases may be JTS TestRunner test cases
* License information on __all__ provided source files. An example license header can be found [here](doc/sample_java_header.txt).
## Make a Pull Request
The easiest and most visible way to make a contribution is to submit a Pull Request (PR) to the [GitHub repo](https://github.com/locationtech/jts).
When preparing a PR please do the following:
1. Acknowledge that the code contribution is IP clean by 'signing off' the commits in the pull request with the '-s' option to 'git commit'.
2. Labeling the PR helps to track and prioritize the contribution. Use the following labels:
* The contribution type: enhancement, bug, api
* The module being contributed to: jts-core, jst-io, jts-app, jts-doc, jts-build
3. When a PR is submitted Travis CI will run to check the commiter Eclipse status and the build correctness.
Please check the PR status, and fix any reported problems
If you have questions about this, please ask on the jts-dev list.
# JTS Developing Guide
## Building
The JTS build chain uses Maven. Build commands are executed at the project root directory (this one).
* Build JTS, with tests:
mvn clean install
* Build JTS, no tests:
mvn clean install -DskipTests
* Build `jts-io-ora`:
mvn install -Poracle
* Build `jts-io-sde`:
mvn install -Parcsde
* Build everything:
mvn install -Pall
## Javadoc
* Build Javadoc for core modules
mvn javadoc:aggregate
## Eclipse Configuration
* Generate Eclipse configuration using `mvn eclipse:eclipse`
* Import the generated projects into an Eclipse workspace
### Run Configurations
It is convenient to define the following Run Configurations:
* **JTS TestRunner** - for executing XML tests:
Field | Value
------|------
Type | Java Application
Project | `jts-tests`
Main class | `org.locationtech.jtstest.testrunner.JTSTestRunnerCmd`
Program arguments | `-files validate general`
Working directory | `${workspace_loc:jts-tests/src/test/resources/testxml}`
* **JTS TestBuilder** - for viewing and processing geometry with JTS
Field | Value
------|------
Type | Java Application
Project | `jts-app`
Main class | `org.locationtech.jtstest.testbuilder.JTSTestBuilder`
Program arguments (optional) | `-geomfunc <classname> ...`
VM args | `-Xmx1000M`
VM args (optional, for Mac) | `-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel`
Working directory | Default
## Testing
JTS aims for 100% code coverage for unit tests.
There are two kinds of unit tests:
### JUnit tests
Used for verifying API code, internal data structures, and ancillary algorithms.
### XML Tests
JTS provides a code-independent, declarative XML-based format for expressing geometric functional tests.
This format has the following advantages:
* allows encoding large geometries
* provides geometric test cases in a reusable way
* easily consumed by external tools such as the JTS TestBuilder or other geometry libraries (e.g. GEOS)
* allows geometric tests to be used with other operation implementations, for testing or comparison purposes
This format should be used for tests which involve large geometries, or which
express fundamental geometric semantics of the JTS library.
# JTS Licensing FAQ
JTS is dual-licensed under:
* the [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html) ("EPL")
* the [Eclipse Distribution License 1.0](http://www.eclipse.org/org/documents/edl-v10.php) (a Revised BSD-style license).
More detail is provided in the [LICENSES](LICENSES.md) document.
This FAQ clarifies the implications of the JTS software licensing.
## Terminology
* **Downstream projects** are codebases which link to JTS libraries
* e.g. GeoTools, GeoServer, etc.
* **Derivative projects** are ports of JTS to other languages
* e.g. GEOS, JSTS, etc.
## Licensing Frequently Asked Questions
**A1. What is the difference between EDL and Revised BSD?**
Revised BSD is a license *family* (see [Wikipedia entry](https://en.wikipedia.org/wiki/BSD_licenses#3-clause_license_.28.22BSD_License_2.0.22.2C_.22Revised_BSD_License.22.2C_.22New_BSD_License.22.2C_or_.22Modified_BSD_License.22.29)).
Revised BSD is also known as "Modified BSD", "BSD 2.0" or "3-clause BSD". It is a less restrictive version of the original BSD license.
EDL is the actual defined license.
It is called that because Eclipse is the distributing organization.
**A2. JTS no longer uses LGPL. What does this mean for downstream projects?**
JTS is now released under a dual license: EDL **or** EPL.
Dual-licensing gives downstream projects their choice of either:
* The **EDL** is a Revised BSD-style license. This license is **more** permissive than the LGPL, allowing a wider variety of uses.
* The **EPL** provides a similar permissiveness to LGPL, with different wording around patents and requires a notice of where source code for JTS is available.
The choice of which license to use is up to you.
**A3. But I thought LGPL and EPL do not mix? How does this affect derivative projects like the LGPL GEOS project?**
An LGPL project (like GEOS or GeoTools) can use JTS as a dependency, under the terms of the EDL license.
The three clauses in the EDL (common to all BSD-style licenses) allow GEOS to
port the JTS work to C and distribute the resulting work under the LGPL.
Although the LGPL license contains additional restrictions
(notably a requirement to share modifications under the same license)
that exceed what is required by the EDL, these do not conflict with the EDL.
For further information about the compatibility of Revised BSD-style licenses
with the GPL see the [FSF License Comments](https://www.gnu.org/licenses/license-list.en.html).
**A4. How can an LGPL-licensed project (such as GEOS) contribute code to JTS?**
From the JTS perspective this works in the same way as any other contribution.
The contributor must have an Eclipse *Contributor License Agreement* (CLA) in place.
For details see the [**Contributing Guide**](CONTRIBUTING.md).
Code contributed to JTS **must** be releasable under the EDL & EPL licenses.
Therefore the contributor must have permission from the contributing project (e.g. via OSGeo CLA or similar)
to relicense the work in question.
# JTS Topology Suite Licensing
May 30th, 2017
## Project Licenses
The Eclipse Foundation makes available all content in this project ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of either the [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html) ("EPL") or the [Eclipse Distribution License 1.0](http://www.eclipse.org/org/documents/edl-v10.php) (a BSD Style License). For purposes of the EPL, "Program" will mean the Content.
If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party ("Redistributor") and different terms and conditions may apply to your use of any object code in the Content. Check the Redistributor's license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise indicated below, the terms and conditions of the EPL still apply to any source code in the Content and such source code may be obtained at http://www.eclipse.org.
## Third Party Content
The Content includes items that have been sourced from third parties as set out below. If you did not receive this Content directly from the Eclipse Foundation, the following is provided for informational purposes only, and you should look to the Redistributor's license for terms and conditions of use.
### GeoTools
JTS includes some code from the GeoTools project. This code has been licensed to the JTS project under the OSGeo BSD License [2] by the GeoTools PSC [3,4].
[2] https://www.osgeo.org/sites/osgeo.org/files/Page/osgeo-bsd-license.txt
[3] https://github.com/geotools/geotools/wiki/JTS-ORA-Contribution
[4] https://github.com/geotools/geotools/wiki/JTS-Shapefile-Contribution
Eclipse Distribution License - v 1.0
Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither the name of the Eclipse Foundation, Inc. nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Eclipse Public License, Version 1.0 (EPL-1.0)
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS
"Contribution" means:
a) in the case of the initial Contributor, the initial code and
documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program;
where such changes and/or additions to the Program originate from and are
distributed by that particular Contributor. A Contribution 'originates'
from a Contributor if it was added to the Program by such Contributor itself
or anyone acting on such Contributor's behalf. Contributions do not include
additions to the Program which: (i) are separate modules of software
distributed in conjunction with the Program under their own license agreement,
and (ii) are not derivative works of the Program.
"Contributor" means any person or entity that distributes the Program.
"Licensed Patents " mean patent claims licensable by a Contributor which are
necessarily infringed by the use or sale of its Contribution alone or
when combined with the Program.
"Program" means the Contributions distributed in accordance with
this Agreement.
"Recipient" means anyone who receives the Program under this Agreement,
including all Contributors.
2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free copyright license to
reproduce, prepare derivative works of, publicly display, publicly
perform, distribute and sublicense the Contribution of such
Contributor, if any, and such derivative works,
in source code and object code form.
b) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free patent license under
Licensed Patents to make, use, sell, offer to sell, import and
otherwise transfer the Contribution of such Contributor, if any,
in source code and object code form. This patent license shall apply
to the combination of the Contribution and the Program if, at the time
the Contribution is added by the Contributor, such addition of the
Contribution causes such combination to be covered by the
Licensed Patents. The patent license shall not apply to any other
combinations which include the Contribution.
No hardware per se is licensed hereunder.
c) Recipient understands that although each Contributor grants the
licenses to its Contributions set forth herein, no assurances are
provided by any Contributor that the Program does not infringe the
patent or other intellectual property rights of any other entity.
Each Contributor disclaims any liability to Recipient for claims
brought by any other entity based on infringement of intellectual
property rights or otherwise. As a condition to exercising the
rights and licenses granted hereunder, each Recipient hereby assumes
sole responsibility to secure any other intellectual property rights
needed, if any. For example, if a third party patent license is
required to allow Recipient to distribute the Program, it is
Recipient's responsibility to acquire that license
before distributing the Program.
d) Each Contributor represents that to its knowledge it has sufficient
copyright rights in its Contribution, if any, to grant the copyright
license set forth in this Agreement.
3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under
its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties
and conditions, express and implied, including warranties or
conditions of title and non-infringement, and implied warranties or
conditions of merchantability and fitness for a particular purpose;
ii) effectively excludes on behalf of all Contributors all liability
for damages, including direct, indirect, special, incidental and
consequential damages, such as lost profits;
iii) states that any provisions which differ from this Agreement are
offered by that Contributor alone and not by any other party; and
iv) states that source code for the Program is available from such
Contributor, and informs licensees how to obtain it in a reasonable
manner on or through a medium customarily used for software exchange.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and
b) a copy of this Agreement must be included with each copy of the Program.
Contributors may not remove or alter any copyright notices contained
within the Program.
Each Contributor must identify itself as the originator of its Contribution,
if any, in a manner that reasonably allows subsequent Recipients to
identify the originator of the Contribution.
4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with
respect to end users, business partners and the like. While this license is
intended to facilitate the commercial use of the Program, the Contributor who
includes the Program in a commercial product offering should do so in a manner
which does not create potential liability for other Contributors. Therefore,
if a Contributor includes the Program in a commercial product offering,
such Contributor ("Commercial Contributor") hereby agrees to defend and
indemnify every other Contributor ("Indemnified Contributor") against any
losses, damages and costs (collectively "Losses") arising from claims,
lawsuits and other legal actions brought by a third party against the
Indemnified Contributor to the extent caused by the acts or omissions of
such Commercial Contributor in connection with its distribution of the Program
in a commercial product offering. The obligations in this section do not apply
to any claims or Losses relating to any actual or alleged intellectual
property infringement. In order to qualify, an Indemnified Contributor must:
a) promptly notify the Commercial Contributor in writing of such claim,
and b) allow the Commercial Contributor to control, and cooperate with the
Commercial Contributor in, the defense and any related settlement
negotiations. The Indemnified Contributor may participate in any such
claim at its own expense.
For example, a Contributor might include the Program in a commercial product
offering, Product X. That Contributor is then a Commercial Contributor.
If that Commercial Contributor then makes performance claims, or offers
warranties related to Product X, those performance claims and warranties
are such Commercial Contributor's responsibility alone. Under this section,
the Commercial Contributor would have to defend claims against the other
Contributors related to those performance claims and warranties, and if a
court requires any other Contributor to pay any damages as a result,
the Commercial Contributor must pay those damages.
5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Each Recipient is solely responsible for determining the appropriateness of
using and distributing the Program and assumes all risks associated with its
exercise of rights under this Agreement , including but not limited to the
risks and costs of program errors, compliance with applicable laws, damage to
or loss of data, programs or equipment, and unavailability
or interruption of operations.
6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
7. GENERAL
If any provision of this Agreement is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of the
remainder of the terms of this Agreement, and without further action by
the parties hereto, such provision shall be reformed to the minimum extent
necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Program itself
(excluding combinations of the Program with other software or hardware)
infringes such Recipient's patent(s), then such Recipient's rights granted
under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to
comply with any of the material terms or conditions of this Agreement and
does not cure such failure in a reasonable period of time after becoming
aware of such noncompliance. If all Recipient's rights under this
Agreement terminate, Recipient agrees to cease use and distribution of the
Program as soon as reasonably practicable. However, Recipient's obligations
under this Agreement and any licenses granted by Recipient relating to the
Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement,
but in order to avoid inconsistency the Agreement is copyrighted and may
only be modified in the following manner. The Agreement Steward reserves
the right to publish new versions (including revisions) of this Agreement
from time to time. No one other than the Agreement Steward has the right to
modify this Agreement. The Eclipse Foundation is the initial
Agreement Steward. The Eclipse Foundation may assign the responsibility to
serve as the Agreement Steward to a suitable separate entity. Each new version
of the Agreement will be given a distinguishing version number. The Program
(including Contributions) may always be distributed subject to the version
of the Agreement under which it was received. In addition, after a new version
of the Agreement is published, Contributor may elect to distribute the Program
(including its Contributions) under the new version. Except as expressly
stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
licenses to the intellectual property of any Contributor under this Agreement,
whether expressly, by implication, estoppel or otherwise. All rights in the
Program not expressly granted under this Agreement are reserved.
This Agreement is governed by the laws of the State of New York and the
intellectual property laws of the United States of America. No party to
this Agreement will bring a legal action under this Agreement more than one
year after the cause of action arose. Each party waives its rights to a
jury trial in any resulting litigation.
JTS Upgrade Guide
=================
The JTS Topology Suite has a long history, and in 2016/2017, [Vivid Solutions](http://www.vividsolutions.com/) brought the project to the LocationTech working group of the Eclipse Foundation.
During that transition, the Java package names and Maven GAVs have changed. For package names (typically used in imports), the change is reflected below:
| | **JTS 1.14.0 and before** | **JTS 1.15.0 and later** |
|---------------|:--------------------------|:----------------------------|
| Maven GroupId | com.vividsolutions | org.locationtech.jts |
| Package names | com.vividsolutions.jts.* | org.locationtech.jts.* |
To upgrade a Maven project (or another build tool using Maven dependency management), one can do a find and replace on ```pom.xml``` files (or similiar build files). In the source code, one could do a find and replace on the package names. As a concrete example, one could use these two commands to handle most of the migration.
```
git grep -l com.vividsolutions | grep pom.xml | xargs sed -i "s/com.vividsolutions/org.locationtech.jts/g"
git grep -l com.vividsolutions | xargs sed -i "s/com.vividsolutions/org.locationtech/g"
```
## Using JTS with Maven
To include JTS in a Maven project, add a dependency block like the following:
```xml
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>${jts.version}</version>
</dependency>
```
Where ${jts.version} is the released version of JTS one chooses to use. See the [releases](https://github.com/locationtech/jts/releases) page for options.
Copyright (c) 2003, Open Source Geospatial Foundation.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the Open Source Geospatial Foundation, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
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](jts_logo.png)
[![Build Status](https://api.travis-ci.org/locationtech/jts.svg)](http://travis-ci.org/locationtech/jts) [![Join the chat at https://gitter.im/locationtech/jts](https://badges.gitter.im/locationtech/jts.svg)](https://gitter.im/locationtech/jts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
JTS is in incubation with the [LocationTech](http://www.locationtech.org) working group of the Eclipse Foundation.
![LocationTech](locationtech_mark.png)
## Locations
* Git Repo: [github.com/locationtech/jts](https://github.com/locationtech/jts)
* Mailing List: [locationtech.org/mailman/listinfo/jts-dev](https://locationtech.org/mailman/listinfo/jts-dev)
* LocationTech Home: [locationtech.org/projects/technology.jts](https://locationtech.org/projects/technology.jts)
* GitHub web pages: [locationtech.github.io/jts/](https://locationtech.github.io/jts/)
* Gitter Channel: [gitter.im/locationtech/jts](https://gitter.im/locationtech/jts)
## License
JTS is open source software. It is dual-licensed under:
* [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
* [Eclipse Distribution License 1.0](http://www.eclipse.org/org/documents/edl-v10.php) (a BSD Style License)
See also:
* [License details](LICENSES.md)
* Licensing [FAQ](FAQ-LICENSING.md)
## Documentation
* [**Javadoc**](https://locationtech.github.io/jts/javadoc)
* Frequently Asked Questions are documented in the [**FAQ**](https://locationtech.github.io/jts/jts-faq.html)
* Installing and using JTS is described in the [**User Guide**](USING.md).
* Building and developing with JTS is described in the [**Developing Guide**](DEVELOPING.md).
* Migrating from previous versions of JTS is described in the [**Upgrade Guide**](MIGRATION.md).
## Contributing
If you are interested in contributing to JTS please read the [**Contributing Guide**](CONTRIBUTING.md).
## Downstream Projects
### Derivative (ports to other languages)
* [**GEOS**](https://trac.osgeo.org/geos) - C++
* [**NetTopologySuite**](https://github.com/NetTopologySuite/NetTopologySuite) - .NET
* [**JSTS**](https://github.com/bjornharrtell/jsts) - JavaScript
### Via GEOS
* [**Shapely**](https://github.com/Toblerity/Shapely) - Python wrapper of GEOS
* [**R-GEOS**](https://cran.r-project.org/web/packages/rgeos/index.html) - R wrapper of GEOS
* [**rgeo**](https://github.com/rgeo/rgeo) - Ruby wrapper of GEOS
* [**GEOSwift**](https://github.com/GEOSwift/GEOSwift)- Swift library using GEOS
# JTS Release Guide
This guide is intended for JTS project maintainers,
to assist them in preparing releases of the project.
## Release Checklist
* Set the version number in the following artifacts:
* Maven POMs
* Java class `JTSVersion`
* Create a Release Milestone, and tag it to Issues and PRs wanted in the release
* Confirm Maven build executes with no errors
* Review scripts in `bin` to confirm correctness
* Update the Version History, to record significant changes
# JTS User Guide
## Project Structure
JTS consists of several Java modules.
Each one corresponds to a separate JAR file.
The core modules are:
* `jts-core` - The JTS core: geometry model, operations, algorithms, and spatial data structures
* `jts-io-common` - I/O classes for open spatial formats
The following modules depend on proprietary libraries, and are not built by default:
* `jts-io-ora` - Oracle reader and writer
* `jts-io-sde` - SDE reader and writer
The following modules are applications and data for testing and working with JTS
* `jts-tests` - The JTS XML test suite and the Test Runner application
* `jts-app` -The TestBuilder GUI, for working with JTS geometry interactively
## Using JTS with Maven
To include JTS in a Maven project, add a dependency block like the following:
```xml
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>${jts.version}</version>
</dependency>
```
JTS snapshot artifacts are published to the LocationTech Maven repository. To include JTS in a project, add the following repositories to the pom.
```xml
<repositories>
<repository>
<id>locationtech-releases</id>
<url>https://repo.locationtech.org/content/groups/releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>jts-snapshots</id>
<url>https://repo.locationtech.org/content/repositories/jts-snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
```
## Using older versions of JTS with Maven
Older versions of JTS are available on Maven Central.
### 1.14
```xml
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts-core</artifactId>
<version>1.14.0</version>
</dependency>
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts-io</artifactId>
<version>1.14.0</version>
</dependency>
```
### 1.13
```xml
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
```
## Using JTS with Jigsaw
JTS uses [#ModuleNameInManifest](http://openjdk.java.net/projects/jigsaw/spec/issues/#ModuleNameInManifest) to export a module name for each of the JARs published for use as a library. In this way, you can depend on the various JTS modules in your `module-info.java` in the following way:
```java
// module-info.java for project org.foo.baz
module org.foo.baz {
requires org.locationtech.jts; // jts-core
requires org.locationtech.jts.io; // jts-io-common
requires org.locationtech.jts.io.oracle; // jts-io-ora
requires org.locationtech.jts.io.sde; // jts-io-sde
}
```
@echo off
rem A batch file to run a XML test files
set CLASSPATH=
for %%i in (..\lib\*.*) do (
set jarfile=%%i
rem If we append to a variable inside the for, only the last entry will
rem be kept. So append to the variable outside the for.
rem See http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20561701.html.
rem [Jon Aquino]
call :setclass
)
java com.vividsolutions.jtstest.testrunner.TopologyTestApp -Files ..\testxml\stmlf -geomop com.vividsolutions.jtstest.geomop.OverlayValidatedGeometryOperation
pause
goto :eof
:setclass
set CLASSPATH=%jarfile%;%CLASSPATH%
set jarfile=
:eof
\ No newline at end of file
@echo off
rem A batch file to run the JTS Test Builder
rem Windows batch file to run the JTS Test Builder from the Maven target directory
set CLASSPATH=
for %%i in (..\lib\*.*) do (
set jarfile=%%i
set JAVA_OPTS=-Xms256M -Xmx1024M
rem If we append to a variable inside the for, only the last entry will
rem be kept. So append to the variable outside the for.
rem See http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20561701.html.
rem [Jon Aquino]
REM to change L&F if desired. Blank is default
REM JAVA_LOOKANDFEEL="-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel"
set JAVA_LOOKANDFEEL=
call :setclass
)
REM Default app options can be added here
set APP_OPTS=%*
set MEMSIZE=256
start javaw -Xmx%MEMSIZE%M com.vividsolutions.jtstest.testbuilder.JTSTestBuilder
goto :eof
:setclass
set CLASSPATH=%jarfile%;%CLASSPATH%
set jarfile=
:eof
\ No newline at end of file
javaw %JAVA_OPTS% %JAVA_LOOKANDFEEL% -jar %~dp0\..\modules\app\target\JTSTestBuilder.jar %APP_OPTS%
......@@ -9,20 +9,10 @@ JAVA_OPTS="-Xms256M -Xmx1024M"
APP_OPTS=""
if test "x$JTS_LIB_DIR" = "x"; then
JTS_LIB_DIR=`dirname $0`/../lib/
JTS_LIB_DIR=`dirname $0`/../modules/app/target
fi
#---------------------------------#
# dynamically build the classpath #
#---------------------------------#
CP=
for i in `ls ${JTS_LIB_DIR}/*.jar`
do
CP=${CP}:${i}
done
#---------------------------#
# run the program #
#---------------------------#
MAIN=com.vividsolutions.jtstest.testbuilder.JTSTestBuilder
java -cp ".:${CP}" $JAVA_OPTS $JAVA_LOOKANDFEEL $MAIN $APP_OPTS
java -jar ${JAVA_OPTS} ${JAVA_LOOKANDFEEL} -jar ${JTS_LIB_DIR}/JTSTestBuilder.jar ${APP_OPTS}
@echo off
rem A batch file to run the JTS test runner.
REM A batch file to run the JTS Test Runner.
REM Requirements: Maven build must be run to create fat jar (mvn clean install)
set CLASSPATH=
for %%i in (..\lib\*.*) do (
set jarfile=%%i
java -jar %~dp0\..\modules\tests\target\JTSTestRunner.jar %*
rem If we append to a variable inside the for, only the last entry will
rem be kept. So append to the variable outside the for.
rem See http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20561701.html.
rem [Jon Aquino]
call :setclass
)
start javaw com.vividsolutions.jtstest.testrunner.TopologyTestApp -Properties testrunner.properties -GUI
goto :eof
:setclass
set CLASSPATH=%jarfile%;%CLASSPATH%
set jarfile=
:eof
\ No newline at end of file