blob: f0cdf332f4fc300190cdbd3e775e8aae4a42a554 [file] [log] [blame]
Title: New contributor
Notice: 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.
Improving and extending SIS requires extensive knowledge of geographic information science,
object oriented programming, the Java language, and of the library itself. Contributors should
expect that they will need to learn a great deal before being able to become productive.
However, the effort required to become productive should improve the contributor's understanding
and knowledge of geographic information systems, of geodetic and geographic science, and of
effective computer programming.
This document is expected to evolve as the SIS project develops its own mode of operation.
[TOC]
Background Knowledge {#knowledge}
====================================
All contributors arrive to the project with different knowledge bases, some with scientific
backgrounds, some with a background in computer science, and others with geographic backgrounds
or even no training in geographic information science at all. By sharing the richness of our
individual backgrounds we have acquired a list of subjects which we consider critical to fully
understanding the SIS project. New contributors are highly encouraged to explore these
areas if they have no or little knowledge of them.
Geographic Information Systems and Science {#science}
--------------------------------------------------------
While a background in the field is not required, it nonetheless proves exceedingly useful along the way.
GIS has developed its own language and has particular concerns which return frequently.
Issues of spatial representation, data size, spatial scale, information workflows and other topics
arise frequently and are worth understanding.
A good general introduction to the field is the book _Geographic Information Systems and Science_
by Paul A. Longley, Michael F. Goodchild, David J. Maguire and David W. Rhind published in its
second edition by John Wiley and Sons Ltd. in 2004.
Apache SIS also provides an introduction in the [Developer guide](book/en/developer-guide.html).
The ISO/OGC Geospatial Model {#ogc}
--------------------------------------
SIS builds on the standards developed through a collaboration between the International
Organization for Standardization (ISO) and the Open Geospatial Consortium (OGC).
Contributors to SIS should have at least a basic understanding of the model developed in the
ISO 19000 series of specifications, starting with the Abstract model and working through the
_Feature_ model. While the ISO specifications are sold, the OGC releases its own, essentially
identical versions of standards which have evolved from the collaboration. The OGC specifications
are available for the [OGC standards and specification][standards] page.
As time progresses, we hope to develop documentation material to introduce the ISO 19000 specification series.
Most of the documentation provided by SIS can be found in the [Developer guide](book/en/developer-guide.html).
Object-Oriented Programming in Java {#java}
----------------------------------------------
SIS is a library designed to be used by other programmers. To play this role effectively,
SIS must consider the various ways that users can reuse Java code: not only through object
instantiation and method calls but also through inheritance. SIS pays special attention to
accessibility constraints ensuring that only the classes and methods which are offered for
use are publicly accessible and that these methods are fully and correctly documented in javadoc.
Contributors are highly recommended to read the book _Effective Java_ by Joshua Block, published
in its second edition by Addison-Wesley in 2008. The book explains the importance of certain
elements in the Java language and discusses subtleties of the language and its use.
Most importantly, the book reveals the full scope a programmer must consider when developing a code library.
The [Recommended code patterns](code-patterns.html) page also discusses some elements
of special importance to Apache SIS.
Mathematical Background {#math}
----------------------------------
SIS frequently deals with complex calculations using relatively simple mathematics of
trigonometry and matrix algebra. The coordinate operations of the Referencing modules involve
trigonometric transformations on a flattened ellipsoid of rotation, the image transformations in
the Coverage modules and in the Rendering system involve extensive use of Affine transforms, and
the Analytic modules often use their own mathematical operations.
These mathematics cannot be simplified — they reflect the richness of the world around us.
Affine transformations are not particularly complex but critically important both to the
geo-referencing operations of the Referencing modules and to the image transformations of the
Coverage modules. Affines transform coordinates through translation, scaling, rotations, and
shear, though this latter component is used infrequently in the library. Mathematically,
affine transformations are usually applied as a matrix operation applied to a coordinate vector.
There are numerous introductions to affine transformations available on the World Wide Web since
the concept is central to all graphics programming.
The GeoAPI Interfaces {#geoapi}
----------------------------------
SIS is build partially as an implementation of the GeoAPI interfaces. GeoAPI defines a set
of objects offering particular methods thereby providing an interpretation of the ISO/OGC
standards in the Java language. GeoAPI therefore defines the core of the model implemented
by Apache SIS.
GeoAPI can most easily be learned by exploring the [GeoAPI Javadoc][geoapi].
The SIS library modules {#modules}
-------------------------------------
Contributors should gain a basic understanding of the core library including the separation into modules,
the functionality available in the base module, and the functioning of the modules of interest.
*[ISO]: International Organization for Standardization
*[OGC]: Open Geospatial Consortium
[standards]: https://www.ogc.org/standards
[geoapi]: https://www.geoapi.org/3.0/javadoc/index.html