Refactor GeoShape implementation into sub interfaces and separate descriptors