Exemple #1
0
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()
                           ) );
}