def ogr_wasp_roughness_from_polygon_z(): if ogr_wasp_create_ds() != 'success': return 'skip' if not ogrtest.have_geos() : gdal.PushErrorHandler('CPLQuietErrorHandler') layer = gdaltest.wasp_ds.CreateLayer('mylayer', geom_type=ogr.wkbPolygon25D ) if not ogrtest.have_geos() : gdal.PopErrorHandler() if layer == None: if ogrtest.have_geos(): gdaltest.post_reason( 'unable to create layer') return 'fail' else: return 'success' dfn = ogr.FeatureDefn() for i in range(6): feat = ogr.Feature( dfn ) ring = ogr.Geometry( type = ogr.wkbLinearRing ) ring.AddPoint( 0, 0, i ) ring.AddPoint( round(math.cos(i*math.pi/3),6), round(math.sin(i*math.pi/3),6), i ) ring.AddPoint( round(math.cos((i+1)*math.pi/3),6), round(math.sin((i+1)*math.pi/3),6), i ) ring.AddPoint( 0, 0, i ) poly = ogr.Geometry( type = ogr.wkbPolygon25D ) poly.AddGeometry(ring) feat.SetGeometry( poly ) if layer.CreateFeature( feat ) != 0: gdaltest.post_reason( 'unable to create feature') return 'fail' del gdaltest.wasp_ds del layer f = open('tmp.map') for i in range(4): f.readline() i = 0 j = 0 res = set() for line in f: if not i%2: [l,r,n] = [v for v in line.split()] if int(n) != 2: gdaltest.post_reason( 'number of points sould be 2 and is %d' % int(n) ) return 'fail' if float(r) > float(l) : res.add((float(l), float(r))) else : res.add((float(r), float(l))) j+=1 i+=1 if j != 6: gdaltest.post_reason( 'there should be 6 boundaries and there are %d' %j ) return 'fail' if res != set([(0,1),(0,5),(1,2),(2,3),(3,4),(4,5)]): print(res) gdaltest.post_reason( 'wrong values f=in boundaries' ) return 'fail' return 'success'
def test_ogr_wasp_roughness_from_polygon_field(): test_ogr_wasp_create_ds() if not ogrtest.have_geos(): gdal.PushErrorHandler('CPLQuietErrorHandler') layer = gdaltest.wasp_ds.CreateLayer('mylayer', options=['WASP_FIELDS=roughness'], geom_type=ogr.wkbPolygon) if not ogrtest.have_geos(): gdal.PopErrorHandler() if layer is None: assert not ogrtest.have_geos(), 'unable to create layer' return layer.CreateField(ogr.FieldDefn('roughness', ogr.OFTReal)) layer.CreateField(ogr.FieldDefn('dummy', ogr.OFTString)) for i in range(6): feat = ogr.Feature(layer.GetLayerDefn()) feat.SetField(0, float(i)) ring = ogr.Geometry(type=ogr.wkbLinearRing) ring.AddPoint(0, 0) ring.AddPoint(round(math.cos(i * math.pi / 3), 6), round(math.sin(i * math.pi / 3), 6)) ring.AddPoint(round(math.cos((i + 1) * math.pi / 3), 6), round(math.sin((i + 1) * math.pi / 3), 6)) ring.AddPoint(0, 0) poly = ogr.Geometry(type=ogr.wkbPolygon) poly.AddGeometry(ring) feat.SetGeometry(poly) assert layer.CreateFeature(feat) == 0, 'unable to create feature' del gdaltest.wasp_ds del layer f = open('tmp.map') for i in range(4): f.readline() i = 0 j = 0 res = set() for line in f: if not i % 2: [l, r, n] = [v for v in line.split()] assert int(n) == 2, ('number of points should be 2 and is %d' % int(n)) if float(r) > float(l): res.add((float(l), float(r))) else: res.add((float(r), float(l))) j += 1 i += 1 assert j == 6, ('there should be 6 boundaries and there are %d' % j) assert res == set([(0, 1), (0, 5), (1, 2), (2, 3), (3, 4), (4, 5)]), \ 'wrong values f=in boundaries'
def test_ogr_wasp_merge(): test_ogr_wasp_create_ds() if not ogrtest.have_geos(): gdal.PushErrorHandler('CPLQuietErrorHandler') layer = gdaltest.wasp_ds.CreateLayer('mylayer', geom_type=ogr.wkbPolygon25D) if not ogrtest.have_geos(): gdal.PopErrorHandler() if layer is None: assert not ogrtest.have_geos(), 'unable to create layer' return dfn = ogr.FeatureDefn() for i in range(6): feat = ogr.Feature(dfn) ring = ogr.Geometry(type=ogr.wkbLinearRing) h = i % 2 ring.AddPoint(0, 0, h) ring.AddPoint(round(math.cos(i * math.pi / 3), 6), round(math.sin(i * math.pi / 3), 6), h) ring.AddPoint(round(math.cos((i + 1) * math.pi / 3), 6), round(math.sin((i + 1) * math.pi / 3), 6), h) ring.AddPoint(0, 0, h) poly = ogr.Geometry(type=ogr.wkbPolygon25D) poly.AddGeometry(ring) feat.SetGeometry(poly) assert layer.CreateFeature(feat) == 0, 'unable to create feature' del gdaltest.wasp_ds del layer f = open('tmp.map') for i in range(4): f.readline() i = 0 j = 0 res = [] for line in f: if not i % 2: [l, r, n] = [v for v in line.split()] assert int(n) == 2, \ ('number of points should be 2 and is %d (unwanted merge ?)' % int(n)) if float(r) > float(l): res.append((float(l), float(r))) else: res.append((float(r), float(l))) j += 1 i += 1 assert j == 6, ('there should be 6 boundaries and there are %d' % j) assert res == [(0, 1)] * 6, 'wrong values f=in boundaries'
def test_ogr_wasp_elevation_from_linestring_z_toler(): test_ogr_wasp_create_ds() ref = osr.SpatialReference() ref.ImportFromProj4('+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999978254 +pm=2.337229167 +units=m +no_defs') if not ogrtest.have_geos(): gdal.PushErrorHandler('CPLQuietErrorHandler') layer = gdaltest.wasp_ds.CreateLayer('mylayer', ref, options=['WASP_TOLERANCE=.1'], geom_type=ogr.wkbLineString25D) if not ogrtest.have_geos(): gdal.PopErrorHandler() assert layer is not None, 'unable to create layer' dfn = ogr.FeatureDefn() for i in range(10): feat = ogr.Feature(dfn) line = ogr.Geometry(type=ogr.wkbLineString25D) line.AddPoint(i, 0, i) line.AddPoint(i, 0.5, i) line.AddPoint(i, 1, i) feat.SetGeometry(line) assert layer.CreateFeature(feat) == 0, 'unable to create feature' del gdaltest.wasp_ds del layer f = open('tmp.map') for i in range(4): f.readline() i = 0 j = 0 for line in f: if not i % 2: [h, n] = line.split() if int(n) != 2: if ogrtest.have_geos(): pytest.fail('number of points should be 2 and is %s' % n) elif int(n) != 3: pytest.fail('number of points should be 3 and is %s' % n) assert float(h) == j, ('altitude should be %d and is %s' % (j, h)) j += 1 i += 1 assert j == 10, ('nb of feature should be 10 and is %d' % j)
def algebra_erase(): if not ogrtest.have_geos(): return 'skip' recreate_layer_C() # Erase; this should return 2 polygons err = A.Erase( B, C ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Erase' ) return 'fail' if C.GetFeatureCount() != 2: gdaltest.post_reason( 'Layer.Erase returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() err = A.Erase( B, C, options = ['PROMOTE_TO_MULTI=YES'] ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Erase' ) return 'fail' if C.GetFeatureCount() != 2: gdaltest.post_reason( 'Layer.Erase returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() # Erase with self ; this should return 0 features err = D1.Erase( D2, C ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Erase' ) return 'fail' if C.GetFeatureCount() != 0: gdaltest.post_reason( 'Layer.Erase returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() return 'success'
def algebra_identify(): if not ogrtest.have_geos(): return 'skip' recreate_layer_C() # Identity; this should return 4 polygons err = A.Identity( B, C ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Identity' ) return 'fail' if C.GetFeatureCount() != 4: gdaltest.post_reason( 'Layer.Identity returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() err = A.Identity( B, C, options = ['PROMOTE_TO_MULTI=YES'] ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Identity' ) return 'fail' if C.GetFeatureCount() != 4: gdaltest.post_reason( 'Layer.Identity returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() # Identity with self ; this should return 2 polygons err = D1.Identity( D2, C, ['KEEP_LOWER_DIMENSION_GEOMETRIES=NO'] ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Identity' ) return 'fail' if not is_same(D1, C): gdaltest.post_reason( 'D1 != C' ) return 'fail' return 'success'
def test_algebra_union(): if not ogrtest.have_geos(): pytest.skip() recreate_layer_C() # Union; this should return 5 polygons err = A.Union(B, C) if ogrtest.have_geos(): assert err == 0, ('got non-zero result code ' + str(err) + ' from Layer.Union') assert C.GetFeatureCount() == 5, \ ('Layer.Union returned ' + str(C.GetFeatureCount()) + ' features') recreate_layer_C() err = A.Union(B, C, options=['PROMOTE_TO_MULTI=YES']) if ogrtest.have_geos(): assert err == 0, ('got non-zero result code ' + str(err) + ' from Layer.Union') assert C.GetFeatureCount() == 5, \ ('Layer.Union returned ' + str(C.GetFeatureCount()) + ' features') recreate_layer_C() # Union with self ; this should return 2 polygons err = D1.Union(D2, C, ['KEEP_LOWER_DIMENSION_GEOMETRIES=NO']) if ogrtest.have_geos(): assert err == 0, ('got non-zero result code ' + str(err) + ' from Layer.Union') assert is_same(D1, C), 'D1 != C' recreate_layer_C() # Union of a polygon and a point within : should return the point and the polygon (#4772) err = B.Union(pointInB, C) if ogrtest.have_geos(): assert err == 0, ('got non-zero result code ' + str(err) + ' from Layer.Union') assert C.GetFeatureCount() == 2, \ ('Layer.Union returned ' + str(C.GetFeatureCount()) + ' features')
def algebra_clip(): if not ogrtest.have_geos(): return 'skip' recreate_layer_C() # Clip; this should return 2 polygons err = A.Clip( B, C ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Clip' ) return 'fail' if C.GetFeatureCount() != 2: gdaltest.post_reason( 'Layer.Clip returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() err = A.Clip( B, C, options = ['PROMOTE_TO_MULTI=YES'] ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Clip' ) return 'fail' if C.GetFeatureCount() != 2: gdaltest.post_reason( 'Layer.Clip returned '+str(C.GetFeatureCount())+' features' ) return 'fail' recreate_layer_C() # Clip with self ; this should return 2 polygons err = D1.Update( D2, C ) if ogrtest.have_geos(): if err != 0: gdaltest.post_reason( 'got non-zero result code '+str(err)+' from Layer.Clip' ) return 'fail' if not is_same(D1, C): gdaltest.post_reason( 'D1 != C' ) return 'fail' return 'success'
def test_ogr2ogr_27(): if test_cli_utilities.get_ogr2ogr_path() is None: return 'skip' if not ogrtest.have_geos(): return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass f = open('tmp/clip.csv', 'wt') f.write('foo,WKT\n') f.write('foo,"POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"\n') f.close() gdaltest.runexternal(test_cli_utilities.get_ogr2ogr_path() + ' -nlt MULTIPOLYGON tmp/poly.shp ../ogr/data/poly.shp -clipdst tmp/clip.csv -clipdstsql "SELECT * from clip"') ds = ogr.Open('tmp/poly.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason('unexpected extent') return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') os.remove('tmp/clip.csv') return 'success'
def test_ogr2ogr_24(): if test_cli_utilities.get_ogr2ogr_path() is None: return 'skip' if not ogrtest.have_geos(): return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass gdaltest.runexternal(test_cli_utilities.get_ogr2ogr_path() + ' tmp/poly.shp ../ogr/data/poly.shp -clipsrc "POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"') ds = ogr.Open('tmp/poly.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason('unexpected extent') return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') return 'success'
def cutline_2(): if not ogrtest.have_geos(): return 'skip' tst = gdaltest.GDALTest('VRT', 'cutline_blend.vrt', 1, 21395) return tst.testOpen()
def test_ogr2ogr_py_26(): script_path = test_py_scripts.get_py_script("ogr2ogr") if script_path is None: return "skip" if not ogrtest.have_geos(): return "skip" try: os.stat("tmp/poly.shp") ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("tmp/poly.shp") except: pass test_py_scripts.run_py_script( script_path, "ogr2ogr", 'tmp/poly.shp ../ogr/data/poly.shp -clipdst "POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"', ) ds = ogr.Open("tmp/poly.shp") if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return "fail" if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason("unexpected extent") return "fail" ds.Destroy() ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("tmp/poly.shp") return "success"
def ogr_geos_overlaps(): if not ogrtest.have_geos(): return "skip" g1 = ogr.CreateGeometryFromWkt("POLYGON((0 0, 10 10, 10 0, 0 0))") g2 = ogr.CreateGeometryFromWkt("POLYGON((-90 -90, -90 90, 190 -90, -90 -90))") result = g2.Overlaps(g1) # g1 and g2 intersect, but their intersection is equal to g1 if result != 0: gdaltest.post_reason("wrong result (got true)") return "fail" g1.Destroy() g2.Destroy() g1 = ogr.CreateGeometryFromWkt("POLYGON((0 0, 10 10, 10 0, 0 0))") g2 = ogr.CreateGeometryFromWkt("POLYGON((0 -5,10 5,10 -5,0 -5))") result = g2.Overlaps(g1) if result == 0: gdaltest.post_reason("wrong result (got false)") return "fail" g1.Destroy() g2.Destroy() return "success"
def ogr_geos_crosses(): if not ogrtest.have_geos(): return "skip" g1 = ogr.CreateGeometryFromWkt("LINESTRING(0 0, 10 10)") g2 = ogr.CreateGeometryFromWkt("LINESTRING(10 0, 0 10)") result = g1.Crosses(g2) g1.Destroy() g2.Destroy() if result == 0: gdaltest.post_reason("wrong result (got false)") return "fail" g1 = ogr.CreateGeometryFromWkt("LINESTRING(0 0, 10 10)") g2 = ogr.CreateGeometryFromWkt("LINESTRING(0 0, 0 10)") result = g1.Crosses(g2) g1.Destroy() g2.Destroy() if result != 0: gdaltest.post_reason("wrong result (got true)") return "fail" return "success"
def ogr_geos_intersect(): if not ogrtest.have_geos(): return "skip" g1 = ogr.CreateGeometryFromWkt("LINESTRING(0 0, 10 10)") g2 = ogr.CreateGeometryFromWkt("LINESTRING(10 0, 0 10)") result = g1.Intersect(g2) g1.Destroy() g2.Destroy() if result == 0: gdaltest.post_reason("wrong result (got false)") return "fail" g1 = ogr.CreateGeometryFromWkt("LINESTRING(0 0, 10 10)") g2 = ogr.CreateGeometryFromWkt("POLYGON((20 20, 20 30, 30 20, 20 20))") result = g1.Intersect(g2) g1.Destroy() g2.Destroy() if result != 0: gdaltest.post_reason("wrong result (got true)") return "fail" return "success"
def test_ogr2ogr_py_26(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: return 'skip' if not ogrtest.have_geos(): return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass test_py_scripts.run_py_script(script_path, 'ogr2ogr', 'tmp/poly.shp ../ogr/data/poly.shp -clipdst "POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"') ds = ogr.Open('tmp/poly.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason('unexpected extent') return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') return 'success'
def ogr_geos_overlaps(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((-90 -90, -90 90, 190 -90, -90 -90))') result = g2.Overlaps( g1 ) # g1 and g2 intersect, but their intersection is equal to g1 if result != 0: gdaltest.post_reason( 'wrong result (got true)' ) return 'fail' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((0 -5,10 5,10 -5,0 -5))') result = g2.Overlaps( g1 ) if result == 0: gdaltest.post_reason( 'wrong result (got false)' ) return 'fail' return 'success'
def test_ogr2ogr_py_3(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass test_py_scripts.run_py_script(script_path, 'ogr2ogr', 'tmp/poly.shp ../ogr/data/poly.shp -spat 479609 4764629 479764 4764817') ds = ogr.Open('tmp/poly.shp') if ogrtest.have_geos(): if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' else: if ds is None or ds.GetLayer(0).GetFeatureCount() != 5: return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') return 'success'
def test_ogr2ogr_py_3(): script_path = test_py_scripts.get_py_script("ogr2ogr") if script_path is None: return "skip" try: os.stat("tmp/poly.shp") ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("tmp/poly.shp") except: pass test_py_scripts.run_py_script( script_path, "ogr2ogr", "tmp/poly.shp ../ogr/data/poly.shp -spat 479609 4764629 479764 4764817" ) ds = ogr.Open("tmp/poly.shp") if ogrtest.have_geos(): if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return "fail" else: if ds is None or ds.GetLayer(0).GetFeatureCount() != 5: return "fail" ds.Destroy() ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("tmp/poly.shp") return "success"
def cutline_3(): if not ogrtest.have_geos(): return 'skip' tst = gdaltest.GDALTest('VRT', 'cutline_multipolygon.vrt', 1, 20827) return tst.testOpen()
def test_cutline_2(): if not ogrtest.have_geos(): pytest.skip() tst = gdaltest.GDALTest('VRT', 'cutline_blend.vrt', 1, 21395) return tst.testOpen()
def test_gdal_grid_clipsrc(): if gdal_grid is None: pytest.skip() if not ogrtest.have_geos(): pytest.skip() ################# outfiles.append('tmp/grid_clipsrc.tif') try: os.remove(outfiles[-1]) except OSError: pass open('tmp/clip.csv', 'wt').write( 'id,WKT\n1,"POLYGON((440750 3751340,440750 3750100,441900 3750100,441900 3751340,440750 3751340))"\n') # Create a GDAL dataset from the values of "grid.csv". # Grid nodes are located exactly in raster nodes. gdaltest.runexternal_out_and_err(gdal_grid + ' -clipsrc tmp/clip.csv -txe 440720.0 441920.0 -tye 3751320.0 3750120.0 -outsize 20 20 -ot Byte -l grid -a nearest:radius1=0.0:radius2=0.0:angle=0.0:nodata=0.0 data/grid.vrt ' + outfiles[-1]) os.unlink('tmp/clip.csv') # We should get the same values as in "gcore/data/byte.tif" ds = gdal.Open(outfiles[-1]) cs = ds.GetRasterBand(1).Checksum() assert not (cs == 0 or cs == 4672), 'bad checksum' ds = None
def test_ogrlineref_1(): if ogrtest.have_geos() is 0 or test_cli_utilities.get_ogrlineref_path() is None: return 'skip' try: os.stat('tmp/parts.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/parts.shp') except: pass (ret, err) = gdaltest.runexternal_out_and_err(test_cli_utilities.get_ogrlineref_path() + ' -create -l data/path.shp -p data/mstones.shp -pm pos -o tmp/parts.shp -s 1000') if not (err is None or err == '') : gdaltest.post_reason('got error/warning') print(err) return 'fail' ds = ogr.Open('tmp/parts.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 9: return 'fail' ds.Destroy() # ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/parts.shp') return 'success'
def ogr_geos_crosses(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 10 10)' ) g2 = ogr.CreateGeometryFromWkt( 'LINESTRING(10 0, 0 10)' ) result = g1.Crosses( g2 ) g1.Destroy() g2.Destroy() if result == 0: gdaltest.post_reason( 'wrong result (got false)' ) return 'fail' g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 10 10)' ) g2 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 0 10)' ) result = g1.Crosses( g2 ) g1.Destroy() g2.Destroy() if result != 0: gdaltest.post_reason( 'wrong result (got true)' ) return 'fail' return 'success'
def ogr_geos_intersect(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 10 10)' ) g2 = ogr.CreateGeometryFromWkt( 'LINESTRING(10 0, 0 10)' ) result = g1.Intersect( g2 ) g1.Destroy() g2.Destroy() if result == 0: gdaltest.post_reason( 'wrong result (got false)' ) return 'fail' g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 10 10)' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((20 20, 20 30, 30 20, 20 20))' ) result = g1.Intersect( g2 ) g1.Destroy() g2.Destroy() if result != 0: gdaltest.post_reason( 'wrong result (got true)' ) return 'fail' return 'success'
def test_ogr2ogr_py_27(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: pytest.skip() if not ogrtest.have_geos(): pytest.skip() try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except OSError: pass f = open('tmp/clip.csv', 'wt') f.write('foo,WKT\n') f.write('foo,"POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"\n') f.close() test_py_scripts.run_py_script(script_path, 'ogr2ogr', '-nlt MULTIPOLYGON tmp/poly.shp ../ogr/data/poly.shp -clipdst tmp/clip.csv -clipdstsql "SELECT * from clip"') ds = ogr.Open('tmp/poly.shp') assert ds is not None and ds.GetLayer(0).GetFeatureCount() == 4 assert ds.GetLayer(0).GetExtent() == (479609, 479764, 4764629, 4764817), \ 'unexpected extent' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') os.remove('tmp/clip.csv')
def ogr_geos_centroid(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) centroid = g1.Centroid() g1.Destroy() if ogrtest.check_feature_geometry( centroid, 'POINT(6.666666667 3.333333333)') != 0: print('Got: ', centroid.ExportToWkt()) return 'fail' centroid.Destroy() # Test with a self intersecting polygon too. # This particular polygon has two triangles. The right triangle is larger. g2 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 0 2, 2 -0.1, 2 2.1, 0 0))' ) centroid2 = g2.Centroid() g2.Destroy() if ogrtest.check_feature_geometry( centroid2, 'POINT (8.0 1.0)') != 0: print('Got: ', centroid2.ExportToWkt()) return 'fail' centroid2.Destroy() return 'success'
def test_ogr2ogr_py_26(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: pytest.skip() if not ogrtest.have_geos(): pytest.skip() try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except OSError: pass test_py_scripts.run_py_script(script_path, 'ogr2ogr', 'tmp/poly.shp ../ogr/data/poly.shp -clipdst "POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"') ds = ogr.Open('tmp/poly.shp') assert ds is not None and ds.GetLayer(0).GetFeatureCount() == 4 assert ds.GetLayer(0).GetExtent() == (479609, 479764, 4764629, 4764817), \ 'unexpected extent' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp')
def ogr_cloudant_SetSpatialFilter(): if ogrtest.cloudant_drv is None: return 'skip' if not ogrtest.have_geos(): return 'skip' ds = ogr.Open('cloudant:%s/%s' % (ogrtest.cloudant_test_server, ogrtest.cloudant_test_layer)) if ds is None: return 'fail' lyr = ds.GetLayer(0) if lyr is None: return 'fail' lyr.SetSpatialFilterRect( -104.9847,39.7392,-104.9847,39.7392 ) feat = lyr.GetNextFeature() if feat is None: gdaltest.post_reason('did not get expected feature') return 'fail' if feat.GetField('NAME') != 'Colorado': gdaltest.post_reason('did not get expected feature') feat.DumpReadable() return 'fail' return 'success'
def test_ogr2ogr_29(): if test_cli_utilities.get_ogr2ogr_path() is None: return 'skip' if ogrtest.have_geos() is 0: return 'skip' for i in range(2): try: os.stat('tmp/wrapdateline_src.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/wrapdateline_src.shp') except: pass try: os.stat('tmp/wrapdateline_dst.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/wrapdateline_dst.shp') except: pass ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('tmp/wrapdateline_src.shp') srs = osr.SpatialReference() srs.ImportFromEPSG(4326); lyr = ds.CreateLayer('wrapdateline_src', srs = srs) feat = ogr.Feature(lyr.GetLayerDefn()) if i == 0: geom = ogr.CreateGeometryFromWkt('POLYGON((179 40,179.5 40,-179.5 40,-179 40,-170 40,-165 40,-165 30,-170 30,-179 30,-179.5 30,179.5 30,179 30,179 40))') else: geom = ogr.CreateGeometryFromWkt('POLYGON((-165 30,-170 30,-179 30,-179.5 30,179.5 30,179 30,179 40,179.5 40,-179.5 40,-179 40,-170 40,-165 40,-165 30))') feat.SetGeometry(geom) lyr.CreateFeature(feat) feat.Destroy() ds.Destroy() gdaltest.runexternal(test_cli_utilities.get_ogr2ogr_path() + ' -wrapdateline tmp/wrapdateline_dst.shp tmp/wrapdateline_src.shp') expected_wkt = 'MULTIPOLYGON (((180 30,179.5 30.0,179 30,179 40,179.5 40.0,180 40,180 30)),((-180 40,-179.5 40.0,-179 40,-170 40,-165 40,-165 30,-170 30,-179 30,-179.5 30.0,-180 30,-180 40)))' expected_geom = ogr.CreateGeometryFromWkt(expected_wkt) ds = ogr.Open('tmp/wrapdateline_dst.shp') lyr = ds.GetLayer(0) feat = lyr.GetNextFeature() ret = ogrtest.check_feature_geometry(feat, expected_geom) if ret != 0: print('src is : %s' % geom.ExportToWkt()) print('got : %s' % feat.GetGeometryRef().ExportToWkt()) feat.Destroy() expected_geom.Destroy() ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/wrapdateline_src.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/wrapdateline_dst.shp') if ret != 0: return 'fail' return 'success'
def test_ogr_geos_crosses(): if not ogrtest.have_geos(): pytest.skip() g1 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 10 10)') g2 = ogr.CreateGeometryFromWkt('LINESTRING(10 0, 0 10)') result = g1.Crosses(g2) assert result != 0, 'wrong result (got false)' g1 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 10 10)') g2 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 0 10)') result = g1.Crosses(g2) assert result == 0, 'wrong result (got true)'
def test_ogr_geos_touches(): if not ogrtest.have_geos(): pytest.skip() g1 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 10 10)') g2 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 0 10)') result = g1.Touches(g2) assert result != 0, 'wrong result (got false)' g1 = ogr.CreateGeometryFromWkt('LINESTRING(0 0, 10 10)') g2 = ogr.CreateGeometryFromWkt('POLYGON((20 20, 20 30, 30 20, 20 20))') result = g1.Touches(g2) assert result == 0, 'wrong result (got true)'
def ogr_geos_convexhull(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'GEOMETRYCOLLECTION(POINT(0 1), POINT(0 0), POINT(1 0), POINT(1 1))' ) convexhull = g1.ConvexHull() g1.Destroy() if convexhull.ExportToWkt() != 'POLYGON ((0 0,0 1,1 1,1 0,0 0))': print('Got: ', convexhull.ExportToWkt()) return 'fail' convexhull.Destroy() return 'success'
def ogr_geos_distance(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt('POINT(0 0)') g2 = ogr.CreateGeometryFromWkt('POINT(1 0)') distance = g1.Distance(g2) g1.Destroy() g2.Destroy() if abs(distance - 1) > 0.00000000001: gdaltest.post_reason('Distance() result wrong, got %g.' % distance) return 'fail' return 'success'
def ogr_geos_unioncascaded(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)),((0.5 0.5,0.5 1.5,1.5 1.5,1.5 0.5,0.5 0.5)))' ) gdal.ErrorReset() cascadedunion = g1.UnionCascaded() if cascadedunion.ExportToWkt( ) != 'POLYGON ((0 0,0 1,0.5 1.0,0.5 1.5,1.5 1.5,1.5 0.5,1.0 0.5,1 0,0 0))': gdaltest.post_reason('Got: %s' % cascadedunion.ExportToWkt()) return 'fail' return 'success'
def ogr_geos_centroid_point_empty(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POINT EMPTY' ) centroid = g1.Centroid() g1.Destroy() if centroid.ExportToWkt() != 'POINT EMPTY': print('Got: ', centroid.ExportToWkt()) return 'fail' centroid.Destroy() return 'success'
def ogr_geos_DelaunayTriangulation(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt('MULTIPOINT(0 0,0 1,1 1,1 0)') gdal.ErrorReset() triangulation = g1.DelaunayTriangulation() if triangulation is None and gdal.GetLastErrorMsg() == '': return 'fail' if triangulation.ExportToWkt( ) != 'GEOMETRYCOLLECTION (POLYGON ((0 1,0 0,1 0,0 1)),POLYGON ((0 1,1 0,1 1,0 1)))': gdaltest.post_reason('Got: %s' % triangulation.ExportToWkt()) return 'fail' return 'success'
def ogr_couchdb_SetSpatialFilter(): if ogrtest.couchdb_drv is None: return 'skip' if not ogrtest.have_geos(): return 'skip' ds = ogr.Open('couchdb:%s/%s' % (ogrtest.couchdb_test_server, ogrtest.couchdb_test_layer)) if ds is None: return 'fail' lyr = ds.GetLayer(0) if lyr is None: return 'fail' lyr.SetSpatialFilterRect(479647, 4764856.5, 480389.6875, 4765610.5) feat = lyr.GetNextFeature() if feat is None: gdaltest.post_reason('did not get expected feature') return 'fail' if feat.GetField('EAS_ID') != 168: gdaltest.post_reason('did not get expected feature') feat.DumpReadable() return 'fail' count = 0 while feat is not None: count = count + 1 feat = lyr.GetNextFeature() if count != 5: gdaltest.post_reason('did not get expected feature count (1)') print(count) return 'fail' count = lyr.GetFeatureCount() if count != 5: gdaltest.post_reason('did not get expected feature count (2)') print(count) return 'fail' return 'success'
def test_ogr_geos_overlaps(): if not ogrtest.have_geos(): pytest.skip() g1 = ogr.CreateGeometryFromWkt('POLYGON((0 0, 10 10, 10 0, 0 0))') g2 = ogr.CreateGeometryFromWkt('POLYGON((-90 -90, -90 90, 190 -90, -90 -90))') result = g2.Overlaps(g1) # g1 and g2 intersect, but their intersection is equal to g1 assert result == 0, 'wrong result (got true)' g1 = ogr.CreateGeometryFromWkt('POLYGON((0 0, 10 10, 10 0, 0 0))') g2 = ogr.CreateGeometryFromWkt('POLYGON((0 -5,10 5,10 -5,0 -5))') result = g2.Overlaps(g1) assert result != 0, 'wrong result (got false)'
def ogr_geos_centroid_multipolygon(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)),((2 0,2 1,3 1,3 0,2 0)))' ) centroid = g1.Centroid() g1.Destroy() if ogrtest.check_feature_geometry( centroid, 'POINT (1.5 0.5)') != 0: print('Got: ', centroid.ExportToWkt()) return 'fail' centroid.Destroy() return 'success'
def ogr_geos_union(): if not ogrtest.have_geos(): return 'skip' pnt1 = ogr.CreateGeometryFromWkt( 'POINT(10 20)' ) pnt2 = ogr.CreateGeometryFromWkt( 'POINT(30 20)' ) result = pnt1.Union( pnt2 ) pnt1.Destroy() pnt2.Destroy() if ogrtest.check_feature_geometry( result, 'MULTIPOINT (10 20,30 20)' ): return 'fail' result.Destroy() return 'success'
def ogr_geos_simplifypreservetopology_linestring(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0,1 0,10 0)' ) gdal.ErrorReset() simplify = g1.SimplifyPreserveTopology(5) g1.Destroy() if simplify.ExportToWkt() != 'LINESTRING (0 0,10 0)': print('Got: ', simplify.ExportToWkt()) return 'fail' simplify.Destroy() return 'success'
def ogr_geos_buffer(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) result = g1.Buffer(1.0, 3) g1.Destroy() if ogrtest.check_feature_geometry( result, 'POLYGON ((0 -1,-0.555570233019607 -0.831469612302542,-0.923879532511288 -0.382683432365087,-0.98078528040323 0.19509032201613,-0.707106781186547 0.707106781186547,9.292893218813452 10.707106781186548,9.690983005625053 10.951056516295154,10.156434465040231 10.987688340595138,10.587785252292473 10.809016994374947,10.891006524188368 10.453990499739547,11 10,11 0,10.866025403784439 -0.5,10.5 -0.866025403784439,10 -1,0 -1))') != 0: print('Got: ', result.ExportToWkt()) return 'fail' result.Destroy() return 'success'
def test_ogr_cloudant_SetSpatialFilter(): if not ogrtest.have_geos(): pytest.skip() ds = ogr.Open('cloudant:%s/%s' % (ogrtest.cloudant_test_server, ogrtest.cloudant_test_layer)) assert ds is not None lyr = ds.GetLayer(0) assert lyr is not None lyr.SetSpatialFilterRect(-104.9847, 39.7392, -104.9847, 39.7392) feat = lyr.GetNextFeature() assert feat is not None, 'did not get expected feature' if feat.GetField('NAME') != 'Colorado': feat.DumpReadable() pytest.fail('did not get expected feature')
def test_ogr_interlis1_2(): if not gdaltest.have_ili_reader: pytest.skip() if not ogrtest.have_geos(): pytest.skip() ds = ogr.Open('data/ili/Beispiel.itf,data/ili/Beispiel.imd') layers = [ 'Bodenbedeckung__BoFlaechen', 'Bodenbedeckung__BoFlaechen_Form', 'Bodenbedeckung__Strasse', 'Bodenbedeckung__Gebaeude' ] assert ds.GetLayerCount() == len(layers), 'layer count wrong.' for i in range(ds.GetLayerCount()): assert ds.GetLayer(i).GetName() in layers, 'Did not get right layers' lyr = ds.GetLayerByName('Bodenbedeckung__BoFlaechen') assert lyr.GetFeatureCount() == 3, 'feature count wrong.' # Get 2nd feature feat = lyr.GetNextFeature() feat = lyr.GetNextFeature() field_values = [20, 1, 168.27, 170.85] assert feat.GetFieldCount() == len(field_values), 'field count wrong.' for i in range(feat.GetFieldCount()): if feat.GetFieldAsString(i) != str(field_values[i]): feat.DumpReadable() print(feat.GetFieldAsString(i)) pytest.fail('field value wrong.') geom = feat.GetGeomFieldRef(0) assert geom.GetCoordinateDimension() == 2, 'dimension wrong.' geom = feat.GetGeomFieldRef(1) assert geom.GetCoordinateDimension() == 2, 'dimension wrong.' geom = feat.GetGeometryRef() assert geom.GetGeometryName() == 'POLYGON', 'Geometry of wrong type.'
def test_ogr_geos_centroid(): if not ogrtest.have_geos(): pytest.skip() g1 = ogr.CreateGeometryFromWkt('POLYGON((0 0, 10 10, 10 0, 0 0))') centroid = g1.Centroid() assert (ogrtest.check_feature_geometry(centroid, 'POINT(6.666666667 3.333333333)') == 0), \ ('Got: %s' % centroid.ExportToWkt()) # Test with a self intersecting polygon too. # This particular polygon has two triangles. The right triangle is larger. g2 = ogr.CreateGeometryFromWkt('POLYGON((0 0, 0 2, 2 -0.1, 2 2.1, 0 0))') centroid2 = g2.Centroid() assert ogrtest.check_feature_geometry(centroid2, 'POINT (8.0 1.0)') == 0, \ ('Got: %s' % centroid2.ExportToWkt())
def ogr_geos_intersection(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 0 10, 10 0, 0 0))' ) result = g1.Intersection( g2 ) g1.Destroy() g2.Destroy() if ogrtest.check_feature_geometry( result, 'POLYGON ((0 0,5 5,10 0,0 0))'): print('Got: ', result.ExportToWkt()) return 'fail' result.Destroy() return 'success'
def test_gdalwarp_lib_126(): if not ogrtest.have_geos(): return 'skip' ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('/vsimem/cutline.shp') lyr = ds.CreateLayer('cutline') f = ogr.Feature(lyr.GetLayerDefn()) f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON((0 0,1 1,0 1,1 0,0 0))')) # Self intersecting lyr.CreateFeature(f) f = None ds = None with gdaltest.error_handler(): ds = gdal.Warp('', '../gcore/data/utmsmall.tif', format = 'MEM', cutlineDSName = '/vsimem/cutline.shp') if ds is not None: gdaltest.post_reason('Did not expected dataset') return 'fail' ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('/vsimem/cutline.shp') return 'success'
def test_ogr2ogr_py_25(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: return 'skip' if not ogrtest.have_geos(): return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass f = open('tmp/clip.csv', 'wt') f.write('foo,WKT\n') f.write( 'foo,"POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"\n' ) f.close() test_py_scripts.run_py_script( script_path, 'ogr2ogr', 'tmp/poly.shp ../ogr/data/poly.shp -clipsrc tmp/clip.csv -clipsrcwhere foo=\'foo\'' ) ds = ogr.Open('tmp/poly.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason('unexpected extent') return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') os.remove('tmp/clip.csv') return 'success'
def test_ogrlineref_1(): if not ogrtest.have_geos( ) or test_cli_utilities.get_ogrlineref_path() is None: return 'skip' if os.path.exists('tmp/parts.shp'): ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/parts.shp') ret, err = gdaltest.runexternal_out_and_err( test_cli_utilities.get_ogrlineref_path() + ' -create -l data/path.shp -p data/mstones.shp -pm pos -o tmp/parts.shp -s 1000' ) if err is not None and err != '': gdaltest.post_reason('got error/warning: "%s"' % err) return 'fail' ds = ogr.Open('tmp/parts.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 9: return 'fail' return 'success'
def ogr_geos_contains(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((-90 -90, -90 90, 190 -90, -90 -90))') result = g2.Contains( g1 ) if result == 0: gdaltest.post_reason( 'wrong result (got false)' ) return 'fail' result = g1.Contains( g2 ) if result != 0: gdaltest.post_reason( 'wrong result (got true)' ) return 'fail' return 'success'
def test_ogr2ogr_py_3(): script_path = test_py_scripts.get_py_script('ogr2ogr') if script_path is None: pytest.skip() try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass test_py_scripts.run_py_script(script_path, 'ogr2ogr', 'tmp/poly.shp ../ogr/data/poly.shp -spat 479609 4764629 479764 4764817') ds = ogr.Open('tmp/poly.shp') if ogrtest.have_geos(): assert ds is not None and ds.GetLayer(0).GetFeatureCount() == 4 else: assert ds is not None and ds.GetLayer(0).GetFeatureCount() == 5 ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp')
def ogr_mvt_point_polygon_clip(): if not ogrtest.have_geos() or gdal.GetConfigOption( 'OGR_MVT_CLIP') is not None: return 'skip' if gdal.GetConfigOption('APPVEYOR') is not None: return 'skip' if sys.platform == 'darwin' and gdal.GetConfigOption('TRAVIS', None) is not None: return 'skip' ds = ogr.Open('data/mvt/point_polygon/1') lyr = ds.GetLayer(1) f = lyr.GetNextFeature() if ogrtest.check_feature_geometry(f, 'MULTIPOLYGON (((445169.252732867 450061.222543117,445169.252732867 0.0,220138.641461308 0.0,220138.641461308 225030.61127156,0.0 225030.61127156,0.0 450061.222543117,445169.252732867 450061.222543117)),((107623.335825528 58703.6377230138,107623.335825528 0.0,53811.6679127641 0.0,53811.6679127641 58703.6377230138,107623.335825528 58703.6377230138)))') != 0 and \ ogrtest.check_feature_geometry(f, 'MULTIPOLYGON (((445169.252732867 0.0,445169.252732867 -445169.252732867,0.0 -445169.252732867,0.0 -220138.641461308,220138.641461308 -220138.641461308,220138.641461308 0.0,445169.252732867 0.0)),((107623.335825528 0.0,107623.335825528 -53811.6679127641,53811.6679127641 -53811.6679127641,53811.6679127641 0.0,107623.335825528 0.0)))') != 0: f.DumpReadable() return 'fail' return 'success'
def test_ogr2ogr_clipsrc_no_dst_geom(): if not ogrtest.have_geos(): return 'skip' tmpfilename = '/vsimem/out.csv' wkt = 'POLYGON ((479461 4764494,479461 4764196,480012 4764196,480012 4764494,479461 4764494))' ds = gdal.VectorTranslate(tmpfilename, '../ogr/data/poly.shp', options='-f CSV -clipsrc "%s"' % wkt) lyr = ds.GetLayer(0) fc = lyr.GetFeatureCount() if fc != 1: gdaltest.post_reason('fail') print(fc) return 'fail' ds = None gdal.Unlink(tmpfilename) return 'success'
def ogr_geos_sym_difference(): if not ogrtest.have_geos(): return 'skip' g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' ) g2 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 0 10, 10 0, 0 0))' ) result = g1.SymDifference( g2 ) g1.Destroy() g2.Destroy() if ogrtest.check_feature_geometry( result, 'MULTIPOLYGON (((5 5,0 0,0 10,5 5)),((5 5,10 10,10 0,5 5)))'): print('Got: ', result.ExportToWkt()) return 'fail' result.Destroy() return 'success'
def test_ogr2ogr_27(): if test_cli_utilities.get_ogr2ogr_path() is None: return 'skip' if not ogrtest.have_geos(): return 'skip' try: os.stat('tmp/poly.shp') ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') except: pass f = open('tmp/clip.csv', 'wt') f.write('foo,WKT\n') f.write( 'foo,"POLYGON((479609 4764629,479609 4764817,479764 4764817,479764 4764629,479609 4764629))"\n' ) f.close() gdaltest.runexternal( test_cli_utilities.get_ogr2ogr_path() + ' -nlt MULTIPOLYGON tmp/poly.shp ../ogr/data/poly.shp -clipdst tmp/clip.csv -clipdstsql "SELECT * from clip"' ) ds = ogr.Open('tmp/poly.shp') if ds is None or ds.GetLayer(0).GetFeatureCount() != 4: return 'fail' if ds.GetLayer(0).GetExtent() != (479609, 479764, 4764629, 4764817): print(ds.GetLayer(0).GetExtent()) gdaltest.post_reason('unexpected extent') return 'fail' ds.Destroy() ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/poly.shp') os.remove('tmp/clip.csv') return 'success'
def test_vrt_read_25(): import ogrtest if not ogrtest.have_geos(): pytest.skip() ds = gdal.Open("""<VRTDataset rasterXSize="2000" rasterYSize="200"> <VRTRasterBand dataType="Byte" band="1"> <SimpleSource> <SourceFilename relativeToVRT="0">data/byte.tif</SourceFilename> <SourceBand>1</SourceBand> <SrcRect xOff="0" yOff="0" xSize="20" ySize="20" /> <DstRect xOff="0" yOff="0" xSize="20" ySize="20" /> </SimpleSource> <SimpleSource> <SourceFilename relativeToVRT="0">data/byte.tif</SourceFilename> <SourceBand>1</SourceBand> <SrcRect xOff="0" yOff="0" xSize="20" ySize="20" /> <DstRect xOff="1000" yOff="30" xSize="10" ySize="20" /> </SimpleSource> <SimpleSource> <SourceFilename relativeToVRT="0">data/byte.tif</SourceFilename> <SourceBand>1</SourceBand> <SrcRect xOff="0" yOff="0" xSize="20" ySize="20" /> <DstRect xOff="1010" yOff="30" xSize="10" ySize="20" /> </SimpleSource> </VRTRasterBand> </VRTDataset>""") (flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(0, 0, 20, 20) assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA and pct == 100.0 (flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(1005, 35, 10, 10) assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA and pct == 100.0 (flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(100, 100, 20, 20) assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 0.0 (flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(10, 10, 20, 20) assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA | gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 25.0
def test_ogrlineref_4(): if not ogrtest.have_geos( ) or test_cli_utilities.get_ogrlineref_path() is None: pytest.skip() if os.path.exists('tmp/subline.shp'): ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource( 'tmp/subline.shp') gdaltest.runexternal( test_cli_utilities.get_ogrlineref_path() + ' -get_subline -r tmp/parts.shp -mb 13300 -me 17400 -o tmp/subline.shp' ) ds = ogr.Open('tmp/subline.shp') assert ds is not None, 'ds is None' feature_count = ds.GetLayer(0).GetFeatureCount() assert feature_count == 1, ('feature count %d != 1' % feature_count) ds = None ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/subline.shp')
def test_ogrlineref_4(): if not ogrtest.have_geos() or test_cli_utilities.get_ogrlineref_path() is None: return 'skip' if os.path.exists('tmp/subline.shp'): ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/subline.shp') gdaltest.runexternal(test_cli_utilities.get_ogrlineref_path() + ' -get_subline -r tmp/parts.shp -mb 13300 -me 17400 -o tmp/subline.shp') ds = ogr.Open('tmp/subline.shp') if ds is None: gdaltest.post_reason('ds is None') return 'fail' feature_count = ds.GetLayer(0).GetFeatureCount() if feature_count != 1: gdaltest.post_reason('feature count %d != 1' % feature_count) return 'fail' ds = None ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/subline.shp') return 'success'
def test_gdal_grid_clipsrc(): if gdal_grid is None: return 'skip' if not ogrtest.have_geos(): return 'skip' ################# outfiles.append('tmp/grid_clipsrc.tif') try: os.remove(outfiles[-1]) except OSError: pass open('tmp/clip.csv', 'wt').write( 'id,WKT\n1,"POLYGON((440750 3751340,440750 3750100,441900 3750100,441900 3751340,440750 3751340))"\n' ) # Create a GDAL dataset from the values of "grid.csv". # Grid nodes are located exactly in raster nodes. gdaltest.runexternal_out_and_err( gdal_grid + ' -clipsrc tmp/clip.csv -txe 440720.0 441920.0 -tye 3751320.0 3750120.0 -outsize 20 20 -ot Byte -l grid -a nearest:radius1=0.0:radius2=0.0:angle=0.0:nodata=0.0 data/grid.vrt ' + outfiles[-1]) os.unlink('tmp/clip.csv') # We should get the same values as in "gcore/data/byte.tif" ds = gdal.Open(outfiles[-1]) cs = ds.GetRasterBand(1).Checksum() if cs == 0 or cs == 4672: gdaltest.post_reason('bad checksum') print(cs) return 'fail' ds = None return 'success'