==============================================
Welcome to Apache SIS <https://sis.apache.org>
==============================================

SIS is a Java language library for developing geospatial applications.
The library is an implementation of GeoAPI 3.0.1 interfaces and can be used
for desktop or server applications. Apache SIS provides data structures for
geographic features and associated metadata along with methods to manipulate
those data structures. The SIS metadata module forms the base of the library
and enables the creation of metadata objects which comply with the ISO 19115
international standard. The SIS referencing module enable the construction of
geodetic data structures for geospatial referencing as defined by ISO 19111
standard, along with the associated operations which enable the transformation
of coordinates between different reference systems. The SIS storage modules
provide a common approach to the reading and writing of metadata, features and
coverages applicable to simple imagery as to many dimensional data structures.

SIS is a project of the Apache Software Foundation <https://www.apache.org/>.

Apache SIS, SIS, Apache, the Apache feather logo, and the Apache SIS
project logo are trademarks of The Apache Software Foundation.


Getting Started
===============

Running the library part of Apache SIS requires Java 8 or higher.
Running the JavaFX application part requires Java 16 or higher.
Building SIS requires Java 17 or higher
together with Maven 3 <https://maven.apache.org/> build system.
To build SIS, use the following command in this directory:

    mvn install

Information for running a command-line tool can be found on the web site:
(<https://sis.apache.org/command-line.html>)


License (see also LICENSE)
==========================

Collective work: Copyright 2010-2022 The Apache Software Foundation.

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Some Apache SIS subcomponents have dependencies subject to different
license terms. All those dependencies except GeoAPI and JSR-363 are
optional. Your use of those dependencies is subject to the terms and
conditions of the licenses listed in the NOTICE file.


Mailing Lists
=============

Discussion about SIS takes place on the following mailing lists:

    user@sis.apache.org    - About using SIS
    dev@sis.apache.org     - About developing SIS

Notification on all code changes are sent to the following mailing list:

    commits@sis.apache.org

The mailing lists are open to anyone and publicly archived.

You can subscribe the mailing lists by sending a message to
<LIST>-subscribe@sis.apache.org (for example user-subscribe@...).
To unsubscribe, send a message to <LIST>-unsubscribe@sis.apache.org.
For more instructions, send a message to <LIST>-help@sis.apache.org.


Issue Tracker
=============

If you encounter errors in SIS or want to suggest an improvement or
a new feature, please visit the SIS issue tracker at
https://issues.apache.org/jira/browse/SIS There you can also find the
latest information on known issues and recent bug fixes and enhancements.
