Apache Spatial Information System (SIS)
Copyright 2010-2022 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).

The Javadoc contains documentation from the Open Geospatial Consortium
(OGC®) specifications (https://www.ogc.org/standards/), also known as OpenGIS.

Apache SIS depends on GeoAPI published by OGC under BSD-style license.
https://www.ogc.org/ogc/software/1.0

Apache SIS depends on JSR-363 (API only) published under BSD license.
https://jcp.org/en/jsr/detail?id=363

Apache SIS depends on JAXB (API only) published under Eclipse Distribution License license.
http://www.eclipse.org/org/documents/edl-v10.php

The `org.apache.sis.referencing.operation.matrix` package contains code
adapted from JAMA Java Matrix Package in public domain.
http://math.nist.gov/javanumerics/jama/

The `sis-feature` module can optionally use the Esri Geometry API
developed by ESRI under Apache license 2.
https://github.com/Esri/geometry-api-java/

The `sis-netcdf` module can optionally use the UCAR netCDF library
developed by Unidata under MIT-style license.
https://www.unidata.ucar.edu/software/netcdf-java/

The `sis-cloud-aws` module depends on the Amazon SDK library
developed by Amazon under Apache 2 license.
https://aws.amazon.com/sdk-for-java/

The test suite uses software developed by the JUnit community
under Eclipse public license version 2.
https://junit.org/junit4/


-------------------------------------------------------------
  Optional modules NOT included unless explicitly requested
-------------------------------------------------------------
The optional `non-free` group of modules contain geodetic data
collected by the International Association of Oil and Gas Producers.
https://epsg.org/terms-of-use.html

The optional `sis-javafx` module depends on JavaFX
published under GPL 2 with classpath exception.
https://github.com/openjdk/jfx/blob/master/LICENSE
