Hello Chris
Le 31/07/12 03:55, Mattmann, Chris A (388J) a écrit :
Before we create a utils package, I like to find classes that don't fit in any
of the other
categories. Do you have some ideas as to what would fit into here now?
Example of things in the utilities modules are:
* Specialized collections implementations. Apache has a special
project for that, but some time it is useful to control the details
of the implementation like exception handling inside the iterator
(especially when the iterator is backed by I/O operations), thread
management when there is some "cleaner" background thread at work, etc.
* Localized resources for internationalisation. Years ago my first
approach was to let each modules managing its own resources. But I
realized that the amount of duplicated resources (e.g. "Argument foo
can not be null") is so high that it was impracticable. We don't
need to put all resources in a utility module, but at least the most
frequently used ones.
* A few mathematical functions, utility methods dealing with units of
measurement, an AngleFormat for parsing/formatting angles in a
DD°MM'SS format, utility methods for formatting tables or trees from
TreeModel, a TreeTableNode interface in complement to the standard
TreeNode interface.
* A small framework which allow to redirect loggings message to Log4J
or other frameworks. I know there is common-loggings and SLF4J for
that, but those frameworks define their own API. I don't know why
they are doing that, since it is possible to do the same on top of
the standard JDK API, which is what we are doing.
* For those who are fine with the standard JDK logging framework, a
log formatter for producing logging message on one line (like Log4J)
instead of two lines. Additionally this formatter uses colors on
terminal that support it (warnings messages appear in red, info in
green, etc.).
* Logging level for operations that take a long time ("slow",
"slower", "slowest") in order to help us detect potential bottleneck
in production (without profiler). The logging level is determined by
the time that the operation took to execute. If it is above some
threshold, a message is logged using one of the above-cited levels.
* Some basic JAXB adapter for XML marshalling/unmashalling, not yet
specific to an other module (rather the basic elements that we find
in all ISO standards).
I would imagine metadata here would refer to arbitrary metadata support and/or
specific Geo metadata models?
This is mostly about supporting the ISO 19115 standard
(http://www.iso.org/iso/catalogue_detail?csnumber=26020) and its ISO
19115-2 extension. Those standards are mandatory in European
governmental agencies as per the INSPIRE legislation. I think that NOAA
participated to this standard, or at least the -2 extension. This module
would provide "plain old Java objects" (POJO) for the various elements
defined by the standard (about 100). For example there is a class
GeographicBoundingBox with getEastBoundLongitude(),
getNorthBoundLatitude(), etc. methods. This module contains also the
JAXB adapters for marshalling/unmarshalling to ISO 19139 conformant XML
(ISO 19115 defines the metadata model, ISO 19139 defines how to express
it in XML).
A general framework for supporting arbitrary metadata would be an other
topic. Actually we already use Lucene for that, but this is at a higher
level than providing POJO specifically for the ISO 19115 standard.
We also provide bridges from the NetCDF CF conventions to ISO 19115
metadata and conversely.
* referencing
Is this like geo-location and geo-referencing for coordinate system support?
Yes. This is a very big topic on its own. Include also
parsing/formatting Well Known Text (WKT) format, creating Coordinate
Reference System objects from the definition provided in the EPSG
database, coordinates transformations, etc. This topic is one of the
strongest point of Geotk.
If so, I filed an issue already for this:
https://issues.apache.org/jira/browse/SIS-9
Thanks for the tip. If this issue means "create a referencing" module, I
would see it more as a whole component on the JIRA tracker instead than
a single issue :).
* geometry
Seems similar to:
https://issues.apache.org/jira/browse/SIS-51
(distance being just one of the many possible geometric functions)
Actually, on our side we put distance calculations in the referencing
module instead. I see geometry more as an implemention of the ISO 19107
standard. Two Ph.D. students worked on this subject up to date and we
are not yet there, so I think it still a very long-term task...
* coverage
WCS?
I would consider web services (WCS, WFS, WMS...) only as protocols for
transferring data between whatever model the library use, and external
servers or clients. Here by "coverage" I mean implementation of the ISO
19123 standard, which define a Coverage class with attributes like
"domain", "range" and various sub-classes like
ContinuousQuadrilateralGridCoverage, HexagonalGridCoverage,
SegmentedCurveCoverage, ThiessenPolygonCoverage, TinCoverage, etc. Once
we implemented at least the GridCoverage class, WCS is simply a way to
export that class on the web.
The coverage module includes also I/O services for reading/formatting
from various formats like NetCDF, some operations like raster
reprojections, etc.
* processing
What type of processing would this be? Like raster processing? Tiling?
The idea is to define an abstract framework for launching arbitrary
process. The goal is to support the "Web Processing Service". But
actually I'm not sure if "processing" deserve its own module. We could
define a basic framework in the "utility" module, and let each modules
like "coverage" define their processes. I think we can defer this group
to a later stage.
* index
I think I called this "storage" -- this would be the persistence layer for the
spatial data structures, e.g.,
https://issues.apache.org/jira/browse/SIS-8
https://issues.apache.org/jira/browse/SIS-33
Yes. In this proposal "index" was a separated group for RTree, QuadTree
and the like, but like "processing" I'm not sure it deserve it own
module. Furthermore some index are closely related to the storage
format. So I guess we can also omit this group for a while.
* display
For us, this would be:
https://issues.apache.org/jira/browse/SIS-43
Yes, however the "renderer engine" probably need a separated topic.
* client
I think for us this would be:
https://issues.apache.org/jira/browse/SIS-11
https://issues.apache.org/jira/browse/SIS-46
In this case the proposal is more for clients of web services. For
example a WCS client would be a source of data connected to a web
server. The WCS clients is responsible for constructing Coverage object
from the data received from a server. Same apply for WFS, sensor data,
processing...
If we said that SIS support WCS, it can be both ways: as a server or as
a client. This group of modules would take care of the "client" side of
things. Maybe "web-client" would be a better name.
Think about the above in the context of the JIRA issues I sent you and I would
be happy
to discuss smallish, intermediate next steps to get there.
If we forget "utilities" for now, the first step would be ISO-19115
metadata. Everything else depend on it. But if we agree to start with
metadata, before discussing the details of this module, maybe it would
be worth to make some plan about the overall architecture? For example
if we apply the proposal to define some group of modules, it would imply
moving around the existing SIS classes. Would it be done on the
Subversion repository, or would it be easier to start an initially empty
Git repository and move classes there (possibly in different
directories) as modules are created?
Martin