Executive Summary
This page details the findings of the pre-acceptance code review for the GeoTools ISO 19107 implementation backed by JTS wrappers. This code was developed by the employees of Sys Technologies, Inc. and refactored into the GeoTools namespace by Colin Combe.
The primary findings of this review
|
Detailed review of this code may be found in the database attached to this page. This database is a "mini-issue-tracker" implemented in OpenOffice 2.0 Base. This database contains information about which classes are present, which interfaces are implemented, and which classes or methods are "stubs". As of this moment, I have not implmented reports, but this may be achieved by the knowledgable user. The database itself is fully populated by observations.
Overview of Geometry Root package
Class |
GeoAPI Interface |
Status |
Comment |
|---|---|---|---|
DirectPosition1D |
DirectPosition |
|
|
DirectPosition2D |
DirectPosition |
|
|
DirectPositionImpl |
DirectPosition |
|
Arbitrary Dimensionality |
GeometryImpl |
Geometry |
|
|
TransfiniteSetImpl |
TransfiniteSet |
|
All methods are stubs, but are implemented by GeometryImpl, the immediate (only) child of this class. Recommend removing this class. |
EnvelopeImpl |
Envelope |
|
|
BoundaryImpl |
Boundary |
|
|
Overview of Geometric Primitive package
Class |
GeoAPI Interface |
Status |
Comment |
|---|---|---|---|
BearingImpl |
Bearing |
|
Angles and direction are unrelated, angles have no associated units. |
CurveImpl |
Curve |
|
|
CurveBoundaryImpl |
CurveBoundary |
|
|
CurveSegmentImpl |
CurveSegment |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
OrientableCurveImpl |
OrientableCurve |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
OrientablePrimitiveImpl |
OrientablePrimitive |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
OrientableSurfaceImpl |
OrientableSurface |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
PointImpl |
Point |
|
Will not calculate bearing to another point; when setting location, attempts to convert to this Point's current CRS instead of adopting the new CRS. OK? |
PrimitiveImpl |
Primitive |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
PrimitiveBoundaryImpl |
PrimitiveBoundary |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
PrimitiveFactoryImpl |
PrimitiveFactory |
|
|
RingImpl |
Ring |
|
Need to ensure that |
ShellImpl |
Shell |
|
Stub, not used, remove. |
SolidImpl |
Solid |
|
Stub, not used, remove. |
SolidBoundaryImpl |
SolidBoundary |
|
Stub, not used, remove. |
SurfaceImpl |
Surface |
|
|
SurfaceBoundaryImpl |
SurfaceBoundary |
|
|
SurfacePatchImpl |
SurfacePatch |
|
|
Overview of Geometric Complex package
Class |
GeoAPI Interface |
Status |
Comment |
|---|---|---|---|
ComplexImpl |
Complex |
|
Candidate for a "Notifying Set" |
ComplexBoundaryImpl |
ComplexBoundary |
|
|
CompositeImpl |
Composite |
|
Should be an abstract class to prevent instantiation. |
CompositeCurveImpl |
CompositeCurve |
|
|
CompositeSurfaceImpl |
CompositeSurface |
|
|
Overview of Coordinate Geometry package
Class |
GeoAPI Interface |
Status |
Comment |
|---|---|---|---|
ArcStringImpl |
ArcString |
|
Everything is stubbed out. |
ArcImpl |
Arc |
|
Everything is stubbed out. |
CircleImpl |
Circle |
|
Adds nothing to |
ArcStringByBulgeImpl |
ArcStringByBulge |
|
Everything is stubbed out. |
ArcByBulgeImpl |
ArcByBulge |
|
Adds nothing to |
ConicImpl |
Conic |
|
Everything is stubbed out. |
GenericCurveImpl |
GenericCurve |
|
Manages caching of JTS peer object. |
GenericSurfaceImpl |
GenericSurface |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
GeodesicStringImpl |
GeodesicString |
|
Everything is stubbed out. |
GeodesicImpl |
Geodesic |
|
Adds nothing to |
GeometryFactoryImpl |
GeometryFactory |
|
Some stubs could be fleshed out easily: e.g. LineSegment... |
LineSegmentImpl |
LineSegment |
|
|
LineStringImpl |
LineString |
|
|
ParamForPointImpl |
ParamForPoint |
|
Everything is stubbed out. |
PointArrayImpl |
PointArray |
|
Likely to need efficiency improvements for large arrays... |
PointGridImpl |
PointGrid |
|
Suggest using |
PolygonImpl |
Polygon |
|
|
PolyhedralSurfaceImpl |
PolyhedralSurface |
|
Class does not constrain surface patches to be polygons. Needs to move from primitives to coordinate geometry package. |
PositionImpl |
Position |
|
This is just another name for "DirectPosition". Interface is superfluous. |
Overview of Geometric Aggregate Package
Class |
GeoAPI Interface |
Status |
Comment |
|---|---|---|---|
AggregateImpl |
Aggregate |
|
Candidate for "Notifying Set" usage. |
MultiPointImpl |
MultiPoint |
|
Neither GeoAPI nor this class define the derived "position" attribute. |
MultiPrimitiveImpl |
MultiPrimitive |
|
Abstract class with no methods. Either consolidate subclass functionality or remove. |
2 Comments
Hide/Show CommentsJun 04, 2006
Martin Desruisseaux
A few very basic (mostly
DirectPositionandEnvelope) geometry interfaces were implemented in the referencing module, because it needed them. Do we have a duplication between the following classes?JTS Geometry
Referencing module
DirectPosition1DDirectPosition1DDirectPosition2DDirectPosition2DDirectPositionImplGeneralDirectPositionEnvelopeImplGeneralEnvelopeorReferencedEnvelopeNote: I prefer
GeneralDirectPositionrather thanDirectPositionImplsince theGeneralprefix suggest that thisDirectPositionis about arbitrary dimension.Generally speaking, I would vote for something else than the
Implsuffix. What aboutJTS(prefix or suffix) as an indication that those implementations are JTS wrappers?Jun 13, 2006
Bryce Nordgren
I believe that these would indeed be duplicates. Is your usage such that you can manipulate just GeoAPI interfaces or do you need to reference an implementation? If we eliminate your implementation, then referencing and geometry have a codependency, which may not be all that bad...
As to naming: no one should ever see the names. These are created with a GeometryFactory. We can change the names however you'd like, though.