Improving and extending Geotk 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 Geotk project develops its own mode of operation.
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 Geotk project. New contributors are highly encouraged to explore these areas if they have no or little knowledge of them.
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.
The best 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.
Geotk builds on the standards developed through a collaboration between the International Organization for Standardization (ISO) and the Open Geospatial Consortium (OGC). Contributors to Geotk 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 page.
As time progresses, we hope to develop documentation material to introduce the ISO 19000 specification series.
Geotk is a library designed to be used by other programmers. To play this role effectively, Geotk must consider the various ways that users can reuse Java code: not only through object instantiation and method calls but also through inheritance. Geotk 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.
In order to contribute source code to the Geotk library, a solid background in the Java language is necessary. Contributors should at least know of the existence of all the operators in the language and should have explored the core library to have an idea of the functionality available there.
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 such as the .equals(Object obj) method 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.
Geotk 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. One such introduction is available here.
Geotk 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 Geotk.
GeoAPI can most easily be learned by exploring the GeoAPI Javadoc.
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.
Geotk follows a number of conventions to ensure collaboration can occur while minimizing the impact on various users. These conventions aim to ensure the production of a high quality library and protect ongoing collaboration between contributors. Contribution should follow the following guidelines:
Contributors are expected to sign a copyright assignment agreement so that the copyright can be held jointly by a non-profit foundation dedicated to free software. This both provides a layer of legal protection between the contributors and the end users and ensures that it is possible to re-license the source code to maintain the same freedoms and obligations even as the collective understanding of free software licenses evolves.
The project has not yet worked out a formal approach to integrate modifications into the main repository but is currently working using a mix of approaches: by direct commits to the repository, by sending patches for review, and by pushing to temporary clones of the repository. We expect this latter mode to become more important as the project grows.