def test_get_extents_wgs84(self): dataset = Dataset(inputfile=self.inputfile) transform = dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)) ll, ur = dataset.GetExtents(transform=transform) self.assertAlmostEqual(ll.x, -180.0, places=0) self.assertAlmostEqual(ll.y, -85.0, places=0) self.assertAlmostEqual(ur.x, 180.0, places=0) self.assertAlmostEqual(ur.y, 85.0, places=0)
def test_get_world_tms_extents_wgs84(self): dataset = Dataset(self.wgs84file) # Resolution 0, WGS 84 projection, there are two tiles, one for # longitudinal hemisphere transform = dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)) self.assertExtentsEqual( dataset.GetWorldTmsExtents(transform=transform), dataset.GetTmsExtents(transform=transform))
def test_get_tiled_extents_partial_aligned(self): dataset = Dataset(inputfile=self.alignedfile) mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) major_circumference = mercator.GetMajorCircumference() minor_circumference = mercator.GetMinorCircumference() # Native resolution, source projection which is Mercator, already # aligned. ll, ur = dataset.GetTiledExtents() self.assertAlmostEqual(ll.x, -major_circumference / 4, places=0) self.assertAlmostEqual(ll.y, -minor_circumference / 4, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0) # Resolution 1, source projection which is Mercator, already # aligned. This should be the south-western quadrant, because the tile # is the north-eastern section of that quadrant. ll, ur = dataset.GetTiledExtents(resolution=1) self.assertAlmostEqual(ll.x, -major_circumference / 2, places=0) self.assertAlmostEqual(ll.y, -minor_circumference / 2, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0) # Native resolution, WGS 84 projection, already aligned ll, ur = dataset.GetTiledExtents( transform=dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84))) self.assertAlmostEqual(ll.x, -90.0, places=0) self.assertAlmostEqual(ll.y, -90.0, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0) # Resolution 0, WGS 84 projection, already aligned. This should be # the western hemisphere. ll, ur = dataset.GetTiledExtents( transform=dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)), resolution=0) self.assertAlmostEqual(ll.x, -180.0, places=0) self.assertAlmostEqual(ll.y, -90.0, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 90.0, places=0)
def test_get_tiled_extents(self): dataset = Dataset(inputfile=self.inputfile) mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) major_half_circumference = mercator.GetMajorCircumference() / 2 minor_half_circumference = mercator.GetMinorCircumference() / 2 # Native resolution, source projection which is Mercator, already # aligned. ll, ur = dataset.GetTiledExtents() self.assertAlmostEqual(ll.x, -major_half_circumference, places=0) self.assertAlmostEqual(ll.y, -minor_half_circumference, places=0) self.assertAlmostEqual(ur.x, major_half_circumference, places=0) self.assertAlmostEqual(ur.y, minor_half_circumference, places=0) # Resolution 0, source projection which is Mercator, already # aligned. This is the same as above, because the dataset covers the # whole world. ll, ur = dataset.GetTiledExtents(resolution=0) self.assertAlmostEqual(ll.x, -major_half_circumference, places=0) self.assertAlmostEqual(ll.y, -minor_half_circumference, places=0) self.assertAlmostEqual(ur.x, major_half_circumference, places=0) self.assertAlmostEqual(ur.y, minor_half_circumference, places=0) # Native resolution, WGS 84 projection, already aligned ll, ur = dataset.GetTiledExtents( transform=dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84))) self.assertAlmostEqual(ll.x, -180.0, places=0) self.assertAlmostEqual(ll.y, -90.0, places=0) self.assertAlmostEqual(ur.x, 180.0, places=0) self.assertAlmostEqual(ur.y, 90.0, places=0) # Resolution 0, WGS 84 projection, already aligned. This is the # same as above, because the dataset covers the whole world. ll, ur = dataset.GetTiledExtents( transform=dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)), resolution=0) self.assertAlmostEqual(ll.x, -180.0, places=0) self.assertAlmostEqual(ll.y, -90.0, places=0) self.assertAlmostEqual(ur.x, 180.0, places=0) self.assertAlmostEqual(ur.y, 90.0, places=0)
def test_get_extents_partial_wgs84(self): dataset = Dataset(inputfile=self.alignedfile) transform = dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)) ll, ur = dataset.GetExtents(transform=transform) # 66.5°S is due to the fact that the original file is in Mercator and # the southern latitudes take up more pixels in Mercator than in # WGS84. self.assertAlmostEqual(ll.x, -90.0, places=0) self.assertAlmostEqual(ll.y, -66.5, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0)
def test_get_extents_mercator(self): mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) major_half_circumference = mercator.GetMajorCircumference() / 2 minor_half_circumference = mercator.GetMinorCircumference() / 2 dataset = Dataset(inputfile=self.inputfile) transform = dataset.GetCoordinateTransformation(dst_ref=mercator) ll, ur = dataset.GetExtents(transform=transform) self.assertAlmostEqual(ll.x, -major_half_circumference, places=0) self.assertAlmostEqual(ll.y, -minor_half_circumference, places=0) self.assertAlmostEqual(ur.x, major_half_circumference, places=0) self.assertAlmostEqual(ur.y, minor_half_circumference, places=0)
def test_get_tiled_extents_partial_spanning(self): dataset = Dataset(inputfile=self.spanningfile) mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) major_circumference = mercator.GetMajorCircumference() minor_circumference = mercator.GetMinorCircumference() # Native resolution, source projection which is Mercator, spanning # tiles. This should be the south-western quadrant. ll, ur = dataset.GetTiledExtents() self.assertAlmostEqual(ll.x, -major_circumference / 2, places=0) self.assertAlmostEqual(ll.y, -minor_circumference / 2, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0) # Resolution 1, source projection which is Mercator, spanning tiles. # This should be the south-western quadrant. ll, ur = dataset.GetTiledExtents(resolution=1) self.assertAlmostEqual(ll.x, -major_circumference / 2, places=0) self.assertAlmostEqual(ll.y, -minor_circumference / 2, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 0.0, places=0) # Resolution 5, source projection which is Mercator, spanning tiles. # This should be the south-western quadrant with a border of 32 pixels, # because the border of the dataset is 50 pixels. pixel_size = mercator.GetPixelDimensions( resolution=dataset.GetNativeResolution()) border = 32 * pixel_size.x ll, ur = dataset.GetTiledExtents(resolution=5) self.assertAlmostEqual(ll.x, -major_circumference / 2 + border, places=0) self.assertAlmostEqual(ll.y, -minor_circumference / 2 + border, places=0) self.assertAlmostEqual(ur.x, 0.0 - border, places=0) self.assertAlmostEqual(ur.y, 0.0 - border, places=0) # Resolution 0, WGS 84 projection, spanning tiles. This should be # the western hemisphere. ll, ur = dataset.GetTiledExtents( transform=dataset.GetCoordinateTransformation( dst_ref=SpatialReference(osr.SRS_WKT_WGS84)), resolution=0) self.assertAlmostEqual(ll.x, -180.0, places=0) self.assertAlmostEqual(ll.y, -90.0, places=0) self.assertAlmostEqual(ur.x, 0.0, places=0) self.assertAlmostEqual(ur.y, 90.0, places=0)
def test_get_native_resolution(self): dataset = Dataset(inputfile=self.inputfile) # bluemarble.tif is a 1024×1024 image of the whole world self.assertEqual(dataset.GetNativeResolution(), 2) # Maximum self.assertEqual(dataset.GetNativeResolution(maximum=1), 1) self.assertEqual(dataset.GetNativeResolution(maximum=10), 2) # Transform into US survey feet sr = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) sr.ImportFromWkt(sr.ExportToWkt().replace( 'UNIT["metre",1,AUTHORITY["EPSG","9001"]]', 'UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]]' )) transform = dataset.GetCoordinateTransformation(dst_ref=sr) self.assertEqual(dataset.GetNativeResolution(transform=transform), 2 + int(round(log(3.28, 2)))) # 3.28 ft/m
def test_get_coordinate_transformation(self): dataset = Dataset(inputfile=self.inputfile) wgs84 = SpatialReference(osr.SRS_WKT_WGS84) transform = dataset.GetCoordinateTransformation(dst_ref=wgs84) self.assertEqual(transform.src_ref, dataset.GetSpatialReference()) self.assertEqual(transform.dst_ref, wgs84)