Ejemplo n.º 1
0
def test_ogr_factory_6():

    src_wkt_list = [
        None,
        'POINT EMPTY',
        'LINESTRING EMPTY',
        'POLYGON EMPTY',
        'MULTIPOINT EMPTY',
        'MULTILINESTRING EMPTY',
        'MULTIPOLYGON EMPTY',
        'GEOMETRYCOLLECTION EMPTY',
        'POINT(0 0)',
        'LINESTRING(0 0)',
        'POLYGON((0 0))',
        'POLYGON(EMPTY,(0 0),EMPTY,(1 1))',
        'MULTIPOINT(EMPTY,(0 0),EMPTY,(1 1))',
        'MULTILINESTRING(EMPTY,(0 0),EMPTY,(1 1))',
        'MULTIPOLYGON(((0 0),EMPTY,(1 1)),EMPTY,((2 2)))',
        'GEOMETRYCOLLECTION(POINT EMPTY)',
        'GEOMETRYCOLLECTION(LINESTRING EMPTY)',
        'GEOMETRYCOLLECTION(POLYGON EMPTY)',
        'GEOMETRYCOLLECTION(MULTIPOINT EMPTY)',
        'GEOMETRYCOLLECTION(MULTILINESTRING EMPTY)',
        'GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY)',
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY)',
        'GEOMETRYCOLLECTION(POINT(0 0))',
        'GEOMETRYCOLLECTION(LINESTRING(0 0),LINESTRING(1 1))',
        'GEOMETRYCOLLECTION(POLYGON((0 0),EMPTY,(2 2)), POLYGON((1 1)))',
        'CURVEPOLYGON EMPTY',
        'CURVEPOLYGON ((0 0,0 1,1 1,1 0,0 0))',
        'CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
        'COMPOUNDCURVE EMPTY',
        'COMPOUNDCURVE ((0 0,0 1,1 1,1 0,0 0))',
        'COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
        'CIRCULARSTRING EMPTY',
        'CIRCULARSTRING (0 0,1 0,0 0)',
        'MULTISURFACE EMPTY',
        'MULTISURFACE (((0 0,0 1,1 1,1 0,0 0)))',
        'MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,1 0,0 0)))',
        'MULTICURVE EMPTY',
        'MULTICURVE ((0 0,0 1))',
        'MULTICURVE (COMPOUNDCURVE((0 0,0 1)))',
        'MULTICURVE (CIRCULARSTRING (0 0,1 0,0 0))',
    ]

    for src_wkt in src_wkt_list:
        if src_wkt is None:
            src_geom = None
        else:
            src_geom = ogr.CreateGeometryFromWkt(src_wkt)

        ogr.ForceToPolygon(src_geom)
        ogr.ForceToMultiPolygon(src_geom)
        ogr.ForceToMultiPoint(src_geom)
        ogr.ForceToMultiLineString(src_geom)
        ogr.ForceToLineString(src_geom)
        for target_type in range(ogr.wkbMultiSurface):
            gdal.PushErrorHandler('CPLQuietErrorHandler')
            ogr.ForceTo(src_geom, 1 + target_type)
            gdal.PopErrorHandler()
Ejemplo n.º 2
0
def test_ogr_factory_failed_forceTo():

    tests = [
        ('MULTICURVE ZM ((0.0 0.0,0 0,0 0,0 0,0.0 0.0))', ogr.wkbTINM,
         'MULTICURVE ZM ((0.0 0.0,0 0,0 0,0 0,0.0 0.0))'),
    ]
    for (src_wkt, target_type, exp_wkt) in tests:
        src_geom = ogr.CreateGeometryFromWkt(src_wkt)
        dst_geom = ogr.ForceTo(src_geom, target_type)

        if ogrtest.check_feature_geometry(dst_geom, exp_wkt):
            print(src_wkt)
            print(target_type)
            pytest.fail(dst_geom.ExportToIsoWkt())
Ejemplo n.º 3
0
def ogr_factory_8():

    tests = [
        ('POINT(2 5)', 'MULTIPOINT (2 5)', ogr.wkbMultiPoint),
        ('LINESTRING(2 5,10 20)', 'LINESTRING(2 5,10 20)', ogr.wkbLineString),
        ('LINESTRING(2 5,10 20)', 'COMPOUNDCURVE ((2 5,10 20))',
         ogr.wkbCompoundCurve),
        ('LINESTRING(2 5,10 20)', 'MULTILINESTRING ((2 5,10 20))',
         ogr.wkbMultiLineString),
        ('LINESTRING(2 5,10 20)', 'MULTICURVE ((2 5,10 20))',
         ogr.wkbMultiCurve),
        ('LINESTRING(2 5,10 20)', None, ogr.wkbPolygon),
        ('LINESTRING(2 5,10 20)', None, ogr.wkbCurvePolygon),
        ('LINESTRING(2 5,10 20)', None, ogr.wkbMultiSurface),
        ('LINESTRING(2 5,10 20)', None, ogr.wkbMultiPolygon),
        ('LINESTRING(0 0,0 1,1 1,0 0)', 'POLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbPolygon),
        ('LINESTRING(0 0,0 1,1 1,0 0)', 'CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbCurvePolygon),
        ('LINESTRING(0 0,0 1,1 1,0 0)', 'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         ogr.wkbMultiPolygon),
        ('LINESTRING(0 0,0 1,1 1,0 0)', 'MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         ogr.wkbMultiSurface),
        ('LINESTRING EMPTY', 'COMPOUNDCURVE EMPTY', ogr.wkbCompoundCurve),
        ('LINESTRING EMPTY', 'MULTILINESTRING EMPTY', ogr.wkbMultiLineString),
        ('LINESTRING EMPTY', 'MULTICURVE EMPTY', ogr.wkbMultiCurve),
        ('MULTILINESTRING ((2 5,10 20))', 'LINESTRING(2 5,10 20)',
         ogr.wkbLineString),
        ('MULTILINESTRING ((2 5,10 20))', 'COMPOUNDCURVE ((2 5,10 20))',
         ogr.wkbCompoundCurve),
        ('MULTILINESTRING ((2 5,10 20))', 'MULTICURVE ((2 5,10 20))',
         ogr.wkbMultiCurve),
        ('MULTILINESTRING ((2 5,10 20))', None, ogr.wkbPolygon),
        ('MULTILINESTRING ((2 5,10 20))', None, ogr.wkbCurvePolygon),
        ('MULTILINESTRING ((2 5,10 20))', None, ogr.wkbMultiPolygon),
        ('MULTILINESTRING ((2 5,10 20))', None, ogr.wkbMultiSurface),
        ('MULTILINESTRING ((0 0,0 1,1 1,0 0))', 'POLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbPolygon),
        ('MULTILINESTRING ((0 0,0 1,1 1,0 0))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbCurvePolygon),
        ('MULTILINESTRING ((0 0,0 1,1 1,0 0))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('MULTILINESTRING ((0 0,0 1,1 1,0 0))',
         'MULTISURFACE (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiSurface),
        ('MULTILINESTRING EMPTY', 'LINESTRING EMPTY', ogr.wkbLineString),
        ('MULTILINESTRING EMPTY', 'COMPOUNDCURVE EMPTY', ogr.wkbCompoundCurve),
        ('MULTILINESTRING EMPTY', 'MULTICURVE EMPTY', ogr.wkbMultiCurve),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'COMPOUNDCURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbCompoundCurve),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'MULTICURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbMultiCurve),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'CURVEPOLYGON (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbCurvePolygon),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'POLYGON ((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0))',
         ogr.wkbPolygon),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'MULTIPOLYGON (((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0)))',
         ogr.wkbMultiPolygon),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'MULTISURFACE (CURVEPOLYGON (CIRCULARSTRING (0 0,1 0,0 0)))',
         ogr.wkbMultiSurface),
        ('CIRCULARSTRING(0 0,1 0,0 0)',
         'LINESTRING (0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0)',
         ogr.wkbLineString),

        # Degenerated case
        ('CIRCULARSTRING(0 0,0 0,0 0)', 'LINESTRING (0 0,0 0,0 0)',
         ogr.wkbLineString),
        ('CIRCULARSTRING(0 0,1 1,2 2)', 'LINESTRING (0 0,1 1,2 2)',
         ogr.wkbLineString),
        ('CIRCULARSTRING(0 0,1 1,2 2)', 'MULTILINESTRING ((0 0,1 1,2 2))',
         ogr.wkbMultiLineString),
        ('CIRCULARSTRING(0 0,1 1,2 2)', None, ogr.wkbPolygon),
        ('CIRCULARSTRING(0 0,1 1,2 2)', None, ogr.wkbCurvePolygon),
        ('CIRCULARSTRING(0 0,1 1,2 2)', None, ogr.wkbMultiSurface),
        ('CIRCULARSTRING(0 0,1 1,2 2)', None, ogr.wkbMultiPolygon),
        ('COMPOUNDCURVE ((2 5,10 20))', 'LINESTRING(2 5,10 20)',
         ogr.wkbLineString),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 1,2 2))',
         'LINESTRING (0 0,1 1,2 2)', ogr.wkbLineString),
        ('COMPOUNDCURVE ((2 5,10 20),(10 20,30 40))',
         'LINESTRING(2 5,10 20,30 40)', ogr.wkbLineString),
        ('COMPOUNDCURVE ((2 5,10 20),(10 20,30 40))',
         'MULTILINESTRING((2 5,10 20,30 40))', ogr.wkbMultiLineString),
        ('COMPOUNDCURVE ((2 5,10 20),(10 20,30 40))',
         'MULTICURVE (COMPOUNDCURVE ((2 5,10 20),(10 20,30 40)))',
         ogr.wkbMultiCurve),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
         'CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 0,1 0,0 0)))',
         ogr.wkbCurvePolygon),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
         'POLYGON ((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0))',
         ogr.wkbPolygon),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTISURFACE (CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 0,1 0,0 0))))',
         ogr.wkbMultiSurface),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTIPOLYGON (((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0)))',
         ogr.wkbMultiPolygon),
        ('COMPOUNDCURVE (CIRCULARSTRING(0 0,1 0,0 0))',
         'LINESTRING (0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0)',
         ogr.wkbLineString),
        ('COMPOUNDCURVE((0 0,0 1,1 1,0 0))', 'POLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbPolygon),
        ('COMPOUNDCURVE((0 0,0 1,1 1,0 0))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('COMPOUNDCURVE((0 0,0 1,1 1,0 0))',
         'MULTISURFACE (CURVEPOLYGON (COMPOUNDCURVE ((0 0,0 1,1 1,0 0))))',
         ogr.wkbMultiSurface),
        ('COMPOUNDCURVE((0 0,0 1,1 1,0 0))',
         'CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         ogr.wkbCurvePolygon),
        ('POLYGON ((0 0,0 1,1 1,0 0))', 'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         ogr.wkbMultiPolygon),
        ('POLYGON ((0 0,0 1,1 1,0 0))', 'MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         ogr.wkbMultiSurface),
        ('POLYGON ((0 0,0 1,1 1,0 0))', 'CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbCurvePolygon),
        ('POLYGON ((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25))',
         ogr.wkbCurvePolygon),
        ('POLYGON ((0 0,0 1,1 1,0 0))', 'LINESTRING (0 0,0 1,1 1,0 0)',
         ogr.wkbLineString),
        ('POLYGON ((0 0,0 1,1 1,0 0))', 'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))',
         ogr.wkbCompoundCurve),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))', 'POLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbPolygon),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         'MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         ogr.wkbMultiSurface),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbCurvePolygon),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))', 'LINESTRING (0 0,0 1,1 1,0 0)',
         ogr.wkbLineString),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))', ogr.wkbCompoundCurve),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         'MULTILINESTRING ((0 0,0 1,1 1,0 0))', ogr.wkbMultiLineString),
        ('CURVEPOLYGON ((0 0,0 1,1 1,0 0))', 'MULTICURVE ((0 0,0 1,1 1,0 0))',
         ogr.wkbMultiCurve),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'POLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbPolygon),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'MULTISURFACE (CURVEPOLYGON (COMPOUNDCURVE ((0 0,0 1,1 1,0 0))))',
         ogr.wkbMultiSurface),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         ogr.wkbCurvePolygon),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'LINESTRING (0 0,0 1,1 1,0 0)', ogr.wkbLineString),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))', ogr.wkbCompoundCurve),
        ('CURVEPOLYGON (COMPOUNDCURVE((0 0,0 1),(0 1,1 1,0 0)))',
         'POLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbPolygon),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'POLYGON ((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0))',
         ogr.wkbPolygon),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTISURFACE (CURVEPOLYGON ( CIRCULARSTRING (0 0,1 0,0 0)))',
         ogr.wkbMultiSurface),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTIPOLYGON (((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0)))',
         ogr.wkbMultiPolygon),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'COMPOUNDCURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbCompoundCurve),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTICURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbMultiCurve),
        ('CURVEPOLYGON (CIRCULARSTRING(0 0,1 0,0 0))',
         'MULTILINESTRING ((0 0,0.116977778440514 -0.321393804843282,0.413175911166547 -0.49240387650611,0.75 -0.433012701892224,0.969846310392967 -0.171010071662835,0.969846310392967 0.171010071662835,0.75 0.433012701892224,0.413175911166547 0.49240387650611,0.116977778440514 0.321393804843282,0 0))',
         ogr.wkbMultiLineString),
        ('MULTICURVE ((2 5,10 20))', 'LINESTRING(2 5,10 20)',
         ogr.wkbLineString),
        ('MULTICURVE ((2 5,10 20))', 'COMPOUNDCURVE ((2 5,10 20))',
         ogr.wkbCompoundCurve),
        ('MULTICURVE ((2 5,10 20))', 'MULTILINESTRING ((2 5,10 20))',
         ogr.wkbMultiLineString),
        ('MULTICURVE (COMPOUNDCURVE((2 5,10 20)))', 'LINESTRING(2 5,10 20)',
         ogr.wkbLineString),
        ('MULTICURVE (COMPOUNDCURVE((2 5,10 20)))',
         'COMPOUNDCURVE ((2 5,10 20))', ogr.wkbCompoundCurve),
        ('MULTICURVE (COMPOUNDCURVE((2 5,10 20)))',
         'MULTILINESTRING ((2 5,10 20))', ogr.wkbMultiLineString),
        ('MULTICURVE ((0 0,0 1,1 1,0 0))', 'POLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbPolygon),
        ('MULTICURVE ((0 0,0 1,1 1,0 0))', 'CURVEPOLYGON ((0 0,0 1,1 1,0 0))',
         ogr.wkbCurvePolygon),
        ('MULTICURVE ((0 0,0 1,1 1,0 0))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('MULTICURVE ((0 0,0 1,1 1,0 0))',
         'MULTISURFACE (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiSurface),
        ('MULTICURVE (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('MULTICURVE (COMPOUNDCURVE((0 0,0 1,1 1,0 0)))',
         'MULTISURFACE (CURVEPOLYGON (COMPOUNDCURVE ((0 0,0 1,1 1,0 0))))',
         ogr.wkbMultiSurface),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbUnknown),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'MULTISURFACE (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiSurface),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbCurvePolygon),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25))',
         ogr.wkbCurvePolygon),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', 'LINESTRING (0 0,0 1,1 1,0 0)',
         ogr.wkbLineString),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))', ogr.wkbCompoundCurve),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'MULTILINESTRING ((0 0,0 1,1 1,0 0))', ogr.wkbMultiLineString),
        ('MULTIPOLYGON (((0 0,0 1,1 1,0 0)))',
         'MULTICURVE ((0 0,0 1,1 1,0 0))', ogr.wkbMultiCurve),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbCurvePolygon),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25))',
         ogr.wkbCurvePolygon),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))', 'LINESTRING (0 0,0 1,1 1,0 0)',
         ogr.wkbLineString),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))', ogr.wkbCompoundCurve),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         'MULTILINESTRING ((0 0,0 1,1 1,0 0))', ogr.wkbMultiLineString),
        ('MULTISURFACE (((0 0,0 1,1 1,0 0)))',
         'MULTICURVE ((0 0,0 1,1 1,0 0))', ogr.wkbMultiCurve),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'MULTIPOLYGON (((0 0,0 1,1 1,0 0)))', ogr.wkbMultiPolygon),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0))', ogr.wkbCurvePolygon),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25)))',
         'CURVEPOLYGON ((0 0,0 1,1 1,0 0),(0.25 0.25,0.25 0.75,0.75 0.75,0.25 0.25))',
         ogr.wkbCurvePolygon),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'LINESTRING (0 0,0 1,1 1,0 0)', ogr.wkbLineString),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'COMPOUNDCURVE ((0 0,0 1,1 1,0 0))', ogr.wkbCompoundCurve),
        ('MULTISURFACE (CURVEPOLYGON(CIRCULARSTRING(0 0,1 0,0 0)))',
         'COMPOUNDCURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbCompoundCurve),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'MULTILINESTRING ((0 0,0 1,1 1,0 0))', ogr.wkbMultiLineString),
        ('MULTISURFACE (CURVEPOLYGON((0 0,0 1,1 1,0 0)))',
         'MULTICURVE ((0 0,0 1,1 1,0 0))', ogr.wkbMultiCurve),
        ('MULTISURFACE (CURVEPOLYGON(CIRCULARSTRING(0 0,1 0,0 0)))',
         'MULTICURVE (CIRCULARSTRING (0 0,1 0,0 0))', ogr.wkbMultiCurve),
        ('MULTIPOINT (2 5)', 'POINT(2 5)', ogr.wkbPoint),
    ]
    for (src_wkt, exp_wkt, target_type) in tests:

        src_geom = ogr.CreateGeometryFromWkt(src_wkt)
        gdal.SetConfigOption('OGR_ARC_STEPSIZE', '45')
        dst_geom = ogr.ForceTo(src_geom, target_type)
        gdal.SetConfigOption('OGR_ARC_STEPSIZE', None)

        if exp_wkt is None:
            exp_wkt = src_wkt
        elif target_type != ogr.wkbUnknown and dst_geom.GetGeometryType(
        ) != target_type:
            gdaltest.post_reason('fail')
            print(src_wkt)
            print(target_type)
            print(dst_geom.ExportToWkt())
            return 'fail'

        if ogrtest.check_feature_geometry(dst_geom, exp_wkt):
            gdaltest.post_reason('fail')
            print(src_wkt)
            print(target_type)
            print(dst_geom.ExportToWkt())
            return 'fail'

    return 'success'