Hi Karl Wright,
I propose to add a new interface call PlanetObject which all shapes should implement. It is actually extracted from class BasePlanetObject. The motivation is that currently the method getPlanetModel() is not visible and therefore there is no possibility to know to which PlanetModel a shape belongs to.
The side effect for this change is that the constructors for composite shapes change as they need to be created with a PlanetModel. I think this is correct as then we can check the planet model when adding a shape and make sure all objects in a composite belongs to the same Planet model.
In addition, we check that two shape belongs to the shape Planet model when calling getRelationship(GeoShape geoShape).