The 'createDatum' method in the EPSG authority factory (org.geotools.referencing.factory.epsg.DefaultFactory) maps all VerticalDatum to VerticalDatumType.GEOIDAL. This is not correct; we can see from the "Origin description" column in the EPSG database that some vertical measurements are height above the main sea-level, but there is other types too. Unfortunatly, I have found no programatic way in the EPSG database (other than parsing the human-readeable string) that allows me to infer the vertical datum type.
An exact vertical datum type is an important information. An VerticalDatumType.ELLIPSOIDAL value means that CoordinateOperationFactory is allowed to use this vertical values in datum shift, which is wrong if the type is actually VerticalDatumType.GEOIDAL for example. If we find some way to fetch this information from the EPSG database in a programatic way, then DefaultFactory.createDatum(...) should take this information in account.
CodeHaus Comment From: desruisseaux - Time: Thu, 17 Feb 2005 18:03:03 -0600
Replaced ELLIPSOIDAL type by GEOIDAL as of revision 11509.
CodeHaus Comment From: desruisseaux - Time: Tue, 2 May 2006 07:56:50 -0500
No additional action were taken. All vertical datum in EPSG database 6.9 seem to be implicitly height above the ellipsoid. EPSG documentation (Surveying and Positionning Guidance Note Number 7, part1 April 2006: Using the EPSG Geodetic Parameter Dataset) said "A vertical datum defines the relationship of a gravity-related coordinate system to earth".
Note that applying vertical coordinate transformations is a different problem and is the topic of <a href="https://jira.codehaus.org/browse/GEOT-352" title="Need transformation from a geoidal to an ellipsoidal height" class="issue-link" data-issue-key="GEOT-352">GEOT-352</a> (at least partially).