def test_LocationSet___init__(): # From xy list ls = LocationSet(pointsInAachen4326) # From numpy array ls2 = LocationSet(np.array(pointsInAachen4326)) assert ls[1] == ls2[1] # From numpy array with srs change ls2 = LocationSet(np.array(pointsInAachen3035), srs=3035) assert ls[1] == ls2[1] # From single pt ls3 = LocationSet(xy) assert ls3.count == 1 # From single geom pt = geom.point(*xy, srs=4326) ls4 = LocationSet(pt) assert ls4.count == 1 assert ls3[0] == ls4[0] # From many geoms pts = [geom.point(x, y, srs=4326) for x, y in np.random.random(size=(10, 2))] ls5 = LocationSet(pts) assert ls5.count == 10
def test_RegionMask_warp(): # setup rm_3035 = RegionMask.fromGeom(geom.point(6.20, 50.75).Buffer(0.05)) rm = RegionMask.fromGeom(geom.point(6.20, 50.75).Buffer(0.05), srs=EPSG4326, pixelRes=0.0005) # basic warp Raster warped_1 = rm_3035.warp(CLC_RASTER_PATH) assert warped_1.dtype == np.uint8 assert warped_1.shape == rm_3035.mask.shape assert np.isclose(warped_1.sum(), 88128) assert np.isclose(warped_1.std(), 9.52214123991) #rm_3035.createRaster(data=warped_1, output=result("regionMask_warp_1.tif"), overwrite=True) # basic warp Raster (FLIP CHECK!) warped_1f = rm_3035.warp(CLC_FLIPCHECK_PATH) assert warped_1f.dtype == np.uint8 assert warped_1f.shape == rm_3035.mask.shape assert np.isclose(warped_1f.sum(), 88128) assert np.isclose(warped_1f.std(), 9.52214123991) #rm_3035.createRaster(data=warped_1f, output=result("regionMask_warp_1f.tif"), overwrite=True) assert (warped_1 == warped_1f).all() # basic warp Raster with srs change warped_2 = rm.warp(CLC_RASTER_PATH) assert warped_2.dtype == np.uint8 assert warped_2.shape == rm.mask.shape assert np.isclose(warped_2.sum(), 449627) assert np.isclose(warped_2.std(), 9.07520801659) #rm.createRaster(data=warped_2, output=result("regionMask_warp_2.tif"), overwrite=True) # Define resample alg and output type warped_3 = rm.warp(CLC_RASTER_PATH, dtype="float", resampleAlg='near') assert warped_3.dtype == np.float64 assert warped_3.shape == rm.mask.shape assert np.isclose(warped_3.sum(), 449317.0) assert np.isclose(warped_3.std(), 9.37570375729) #rm.createRaster(data=warped_3, output=result("regionMask_warp_3.tif"), overwrite=True) # define a resolution div warped_4 = rm.warp(CLC_RASTER_PATH, resolutionDiv=5, resampleAlg='near', noData=0) assert warped_4.dtype == np.uint8 assert warped_4.shape == (rm.mask.shape[0] * 5, rm.mask.shape[1] * 5) assert np.isclose(warped_4.sum(), 11240881) assert np.isclose(warped_4.std(), 9.37633272361)
def test_point(): x, y = pointInAachen3035 # test separate input p1 = geom.point(x, y, srs=EPSG3035) assert np.isclose(p1.GetX(), x) assert np.isclose(p1.GetY(), y) assert p1.GetSpatialReference().IsSame(EPSG3035) # test tuple input p2 = geom.point((x, y), srs=EPSG3035) assert np.isclose(p2.GetX(), x) assert np.isclose(p2.GetY(), y) assert p2.GetSpatialReference().IsSame(EPSG3035)
def test_Location_fromPointGeom(): l1 = Location(*xy) pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) l2 = Location.fromPointGeom(pt) assert l1 == l2
def test_Location_asXY(): l1 = Location(*xy) assert np.isclose(l1.asXY(srs=EPSG4326), xy).all() pt = geom.point(*xy) pt.TransformTo(EPSG3035) assert np.isclose(l1.asXY(srs=EPSG3035), (pt.GetX(), pt.GetY())).all()
def test_Location_fromXY(): l1 = Location(*xy) pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) l2 = Location.fromXY(pt.GetX(), pt.GetY(), srs=EPSG3035) assert l1 == l2
def test_Location_asGeom(): l1 = Location(*xy) g = l1.asGeom() assert g.GetSpatialReference().IsSame(EPSG4326) assert np.isclose(g.GetX(), xy[0]) assert np.isclose(g.GetY(), xy[1]) pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) g = l1.asGeom(srs=EPSG3035) assert g.GetSpatialReference().IsSame(EPSG3035) assert np.isclose(g.GetX(), pt.GetX()) assert np.isclose(g.GetY(), pt.GetY())
def test_RegionMask_applyMask(): # setup rm = RegionMask.fromGeom(geom.point(6.20, 50.75).Buffer( 0.05), srs=EPSG4326, pixelRes=0.001) data1 = np.arange(rm.mask.size).reshape(rm.mask.shape) data2 = np.arange(rm.mask.shape[0] * 3 * rm.mask.shape[1] * 3).reshape((rm.mask.shape[0] * 3, rm.mask.shape[1] * 3)) # test applying data1 = rm.applyMask(data1) assert data1.sum() == 39296070 assert np.isclose(data1.std(), 3020.0893432) data2 = rm.applyMask(data2.astype('int64')) assert data2.sum() == 3183264630 assert np.isclose(data2.std(), 27182.1342973)
def test_Location___eq__(): # TEst against locations l1 = Location(*xy) l2 = Location(*xy) assert l1 == l2 l3 = Location(xy[0], xy[1]+0.001) assert (l1 == l3) == False # test against tuple assert l1 == xy # test against geometry pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) assert l1 == pt
def test_Location_load(): l1 = Location(*xy) assert l1 == Location.load(l1) # From pt pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) assert l1 == Location.load(pt) # From xy assert l1 == Location.load(xy) # From str assert l1 == Location.load(' ( 9.00000,5.00000) ',) # From xy with srs xy_3035 = pt.GetX(), pt.GetY() assert l1 == Location.load(xy_3035, srs=3035) assert l1 == Location.load(list(xy_3035), srs=3035) assert l1 == Location.load(np.array(xy_3035), srs=3035)
def test_RegionMask_createRaster(): rm = RegionMask.fromGeom(geom.point(6.20, 50.75).Buffer(0.05), srs=EPSG4326, pixelRes=0.001) # Create a raster like the mask ds = rm.createRaster() dsInfo = raster.rasterInfo(ds) assert np.isclose(dsInfo.xMin, 6.15) assert np.isclose(dsInfo.xMax, 6.25) assert np.isclose(dsInfo.yMin, 50.70) assert np.isclose(dsInfo.yMax, 50.80) assert dsInfo.srs.IsSame(EPSG4326) assert dsInfo.dtype == gdal.GDT_Byte # Fill a raster with mask data out2 = result("rasterMast_createRaster_2.tif") rm.createRaster(output=out2, data=rm.mask, overwrite=True) ds = gdal.Open(out2) band = ds.GetRasterBand(1) assert np.isclose(band.ReadAsArray(), rm.mask).all() # The function is not meant for scaling down # # test Scaling down # scaledData = scaleMatrix(rm.mask,-4) # ds = rm.createRaster(resolutionDiv=1/4, data=scaledData, overwrite=True) # band = ds.GetRasterBand(1) # if (band.ReadAsArray()-scaledData).any(): error("createRaster 3 - data mismatch") # test Scaling up scaledData = util.scaleMatrix(rm.mask, 2) ds = rm.createRaster(resolutionDiv=2, data=scaledData, overwrite=True) band = ds.GetRasterBand(1) assert np.isclose(band.ReadAsArray(), scaledData).all()
def test_extractVerticies(): # Test polygon pts1 = geom.extractVerticies(GEOM) assert np.isclose(pts1[5, 1], 35.1) assert pts1.shape == (10, 2) # Test multipolygon pts2 = geom.extractVerticies(geom.flatten(SUB_GEOMS)) assert pts2.shape == (12, 2) # Test linestring pts3 = geom.extractVerticies(GEOM.Boundary()) assert np.isclose(pts3[5, 1], 35.1) assert pts3.shape == (10, 2) # Test multilinestring assert np.isclose(pts3[5, 1], 35.1) assert pts3.shape == (10, 2) # Test Point pts5 = geom.extractVerticies(geom.point(5, 20)) assert np.isclose(pts5[0, 0], 5) assert pts5.shape == (1, 2)
def test_transform(): # test a single point pt = geom.point(7, 48, srs=EPSG4326) t1 = geom.transform(pt, toSRS=EPSG3035) assert np.isclose(t1.GetX(), 4097075.016) assert np.isclose(t1.GetY(), 2769703.15423898) # make a collection of polygons using polygonizeMask complexmask = np.array([[0, 1, 0, 0, 0], [1, 1, 0, 1, 0], [0, 0, 0, 1, 1], [1, 1, 0, 1, 0], [0, 1, 0, 0, 0]], dtype=np.bool) polygons = geom.polygonizeMask(complexmask, bounds=(6, 45, 11, 50), flat=False, srs=EPSG4326, shrink=None) t2 = geom.transform(polygons, toSRS='europe_m', segment=0.1) assert (len(t2) == 3) # "Transform Count assert t2[0].GetSpatialReference().IsSame(EPSG3035) # "Transform srs assert np.isclose(sum([t.Area() for t in t2]), 83747886418.48529) # "Transform Area
def test_Location_latlon(): pt = geom.point(*xy, srs=4326) pt.TransformTo(EPSG3035) l1 = Location.fromPointGeom(pt) assert np.isclose(l1.latlon, (xy[1], xy[0])).all()