Package Structure

Overall Package Structure.
    The GISToolkit is condensed into eight main packages.  Each package is responsable for a particular area of functionality.

Features:
The Features package contains the basic building block features of the GIS.  These are the features such as Point, MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon.  There is also a RasterShape for displaying images.  There are a couple of sub packages of Features that are used for manipulating the features.

Common:
This pacakge contains all of the non feature classes that are used for the operation of the system.  The only class contained in common at the moment is the "Node" class.  This class is used to save configuration information from all layers of the toolkit, and is used by the application to generate configuration files using the Config package.

Config:
Config is used to convert the "Node" information into configuration information.  It reads and writes to an XML file at the moment, but configuration information could presumably be stored in any persistent storage that supports trees of named value pairs.

Projection:
Projections are used in several layers of the toolkit.  This is mostly for performance reasons, and to enable the support of database level projection features.  There are two levels of projection, the projection the map uses, and the projection the data resides within.  This allows the toolkit to display data in a dynamic projection, while reading data in a static projection.  A common use of this functionality is the storing of imagery in a UTM projection, but displaying it in a Connic Conformal Projection.  Most common projections are cuurently supported, and adding more can be done fairly easilly.

Datasources:
Data can be read from a variety of data sources.  Each data source has it's own package, with the generic base classes and interfaces residing in the root.  Datasources include ESRI shapefile, ARCSDE, IBM DB2, Image, PostGIS, memory (kind of a scratch data source), seamless, terraserver, and webservice.  It is expected that more datasources will be added in the future.  The AGCSDE and ARCIMS datasources are kept in a separate package under proprietary, because they statically links to a priprietary ESRI jar file, these packages are "proprietary.datasources.arcsde" and "proprietary.datasources.arcims".

Display:
All Elements associated with displaying geographic objects are stored in the display class.  The basic element is the GISDisplay which is a swing widget for embedding GIS functionality into swing GUIs.  The basic building block of the display package is the Layer object.  Each layer object is responsible for drawing it's data on to the graphics context it is sent.  Assisting it is a Converter object which is responsible for converting pixel screen coordinates to World coordinates and back.  Each layer has a single data source, and contains the Style object which tells actually renders the data.

Style objects contain multiple Labelers and Renderers but only a single Shader.  The Renderers determine how the features should be drawn, the Labelers determine how the labels should be drawn, and the Shader provids the colors, patterns, and other information required by the Labelers and Shaders for them to render the objects.

Drawmodels are used bye the GISDisplay to add behavior.  They determine what happens when a user clicks on a map, drags a map, etc.  They provide the select tools, and add highlight information to the map.  Mostly they react to mouse movement on the map.

Shapeeditors are gui classes that can be used to modify a shape.  They allow the user to type in exact coordinates to a shape, as well as modify shape contents from a tabular point of view, instead of a geographical one.

In addition, there is a scale bar that allows the user interface to represent distances on the map, and some commonly used gui widgets that may help in generating an application with this toolkit.

Application:
The application package contains the classes that are used to create the GISToolkitEditor.  This package has become rather large, and uses every other part of the GISToolkit, except for the Server.   It serves as an example of how an applicaiton could be created using this toolkit.

Server:
These are the classes that are used to create the WebMapService.  They are an example of how this toolkit can be used to create a server side application that generates maps for a client.

Diagram of the Package Structure.
  
The UML documentation for the GISToolkit can be found in CVS as a Poseidon document UML.zora.