double distanceLineStringGeometry3D( const LineString& gA, const Geometry& gB ) { //SFCGAL_DEBUG( boost::format("dispatch distanceLineStringGeometry3D(%s,%s)") % gA.asText() % gB.asText() ); switch ( gB.geometryTypeId() ) { case TYPE_POINT: return distancePointLineString3D( gB.as< Point >(), gA ); //symetric case TYPE_LINESTRING: return distanceLineStringLineString3D( gA, gB.as< LineString >() ); case TYPE_TRIANGLE: return distanceLineStringTriangle3D( gA, gB.as< Triangle >() ); case TYPE_POLYGON: return distanceLineStringPolygon3D( gA, gB.as< Polygon >() ); case TYPE_SOLID: return distanceLineStringSolid3D( gA, gB.as< Solid >() ); case TYPE_MULTIPOINT: case TYPE_MULTILINESTRING: case TYPE_MULTIPOLYGON: case TYPE_MULTISOLID: case TYPE_GEOMETRYCOLLECTION: case TYPE_TRIANGULATEDSURFACE: case TYPE_POLYHEDRALSURFACE: return distanceGeometryCollectionToGeometry3D( gB, gA ); } BOOST_THROW_EXCEPTION( Exception( ( boost::format( "distance3D(%s,%s) is not implemented" ) % gA.geometryType() % gB.geometryType() ).str() ) ); }