Simone Giannecchini a écrit :
> Yeah, I would like to have a bit more details about what you did
From memory. I don't remember all the work done.
Changes in AuthorityBackedFactory
---------------------------------
This class is in charge of looking for transformations in the EPSG database
using authority codes.
Added the following steps:
- When a transformation has been found in the database, check the source and
target CRS
*as they are defined in the database* (not as the user specified - we
can't trust him
since the axis order may be modified).
- If the source CRS in the database disagree with the user-supplied source
CRS (for the
same authority code), get the transformation from the "user-supplied
source CRS" to the
"database supplied source CRS". Note that for this particular step,
AuthorityBackedFactory
itself must be disabled (I means, Geotools must not try to looks for the
above-cited
transformation in the EPSG database - it must figure it out by itself
using the usual
DefaultCoordinateOperationFactory).
- Concatenate (prepend) the transformation found in the above step with the
transformation
found in the EPSG database.
- Do the same process for "database supplied target CRS" to "user-supplied
target CRS".
Changes in Hints, AbstractFactory, etc.
---------------------------------------
- Added FORCE_LONGITUDE_FIRST_AXIS_ORDER, FORCE_STANDARD_AXIS_DIRECTIONS and
FORCE_STANDARD_AXIS_UNITS hints. I suspect that most users will care only
about the first of those hints.
- Solved a few bugs in hints management by FactoryRegistry, in order to make
the above-cited hints to actually work.
- Added 'toString()', 'equals()' and 'hashCode()' methods in AbstractFactory,
for making debugging a little bit easier.
Changes in OrderedAxisAuthorityFactory
--------------------------------------
- Deprecated the 'register' static method. Use the system property instead (see
next
point below).
- Added a LongitudeFirstFactory subclasses (in
org.geotools.referencing.factory.epsg).
This subclass is specifically about (longitude,latitude) axis order from
EPSG database.
LongitudeFirstFactory is registered like any other authority factories, with
a priority
level slightly different than the EPSG DefaultFactory:
* By default, LongitudeFirstFactory has a lower priority level than
DefaultFactory.
This means that the default factory should be preferred by FactoryFinder
if no
implementation hints were explicitly specified.
* If the org.geotools.referencing.forceXY system property is defined to
'true', then
LongitudeFirstFactory has a upper priority level than DefaultFactory.
The check for
this system property is performed when FactoryFinder loads
LongitudeFirstFactory
(it should be when the user invoke
FactoryFinder.getCRSAuthorityFactory(...) for
the first time).
Changes in FactoryRegistry, FactoryGroup, etc.
----------------------------------------------
The addition of LongitudeFirstFactory as a CRSAuthorityFactory service provider
revealed some bugs
in FactoryRegistry (used by FactoryFinder). The bugs was caused by cyclic
dependencies, which caused
infinite loops (with recursive method calls). I will not go in details, but one
cause for cyclic
dependencies was the CoordinateOperationFactory dependency in FactoryGroup.
This dependency has been
removed from FactoryGroup (it should never has been added there anyway). Many
other changes were
done in various place of the referencing package in order to make
FactoryRegistry more robust to
cyclic dependencies. Actually, this cyclic dependencies problem has been the
most difficult one I
faced in the context of the axis order issue (more difficult than managing the
axis order itself).
Changes in DefaultCoordinateOperation
-------------------------------------
- Improved to 'toString()' formatting. It is actually a side effect of the
above-cited
AuthorityBackedFactory work. It make debugging easier, and now provides more
useful
informations anyway.
Changes in CRS, AbstractAuthorityFactory and its friends
--------------------------------------------------------
- Added a CRS.decode(String code, boolean longitudeFirst) convenience method.
Note: this work is not yet finished.
- Reimplemented CRS.decode on top of AllAuthoritiesFactory.
- Added a FallbackAuthorityFactory, used internally by AllAuthoritiesFactory.
This class
can also provides a migration path away from gt2-epsg-wkt (because the later
provides
some non-official EPSG code in addition to the usual ones).
- Refactored some AbstractAuthorityFactory subclasses. Better separation of
concern
between AuthorityFactoryAdapter and the new TransformedAutorityFactory class.
Martin.
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel