def test_tiles_count_wgs84(self): world = Extents(lower_left=XY(-180, -90), upper_right=XY(180, 90)) # Resolution 0 is 2×1 for the whole world self.assertEqual(self.wgs84.GetTilesCount(extents=world, resolution=0), XY(2, 1)) # Resolution 1 is 4×2 for the whole world self.assertEqual(self.wgs84.GetTilesCount(extents=world, resolution=1), XY(4, 2))
def test_get_tms_extents(self): dataset = Dataset(self.inputfile) # The whole world goes from 0 to 3 in both dimensions self.assertExtentsEqual( dataset.GetTmsExtents(), Extents(lower_left=XY(0, 0), upper_right=XY(4, 4))) # At resolution 0, there's only one tile self.assertExtentsEqual( dataset.GetTmsExtents(resolution=0), Extents(lower_left=XY(0, 0), upper_right=XY(1, 1)))
def test_get_world_extents(self): # Degrees self.assertExtentsEqual( self.wgs84.GetWorldExtents(), Extents(lower_left=XY(-180.0, -90.0), upper_right=XY(180.0, 90.0))) # Meters mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) self.assertExtentsEqual( mercator.GetWorldExtents(), Extents(lower_left=XY(-20037508.3428, -20037508.3428), upper_right=XY(20037508.3428, 20037508.3428)))
def test_tiles_count_mercator(self): mercator = SpatialReference.FromEPSG(EPSG_WEB_MERCATOR) major_half_circumference = mercator.GetMajorCircumference() / 2 minor_half_circumference = mercator.GetMinorCircumference() / 2 world = Extents(lower_left=XY(-major_half_circumference, -minor_half_circumference), upper_right=XY(major_half_circumference, minor_half_circumference)) # Resolution 0 is 1×1 for the whole world self.assertEqual(mercator.GetTilesCount(extents=world, resolution=0), XY(1, 1)) # Resolution 1 is 2×2 for the whole world self.assertEqual(mercator.GetTilesCount(extents=world, resolution=1), XY(2, 2))
def test_upsample(self): resolution = 0 image = VImage.new_rgba(width=TILE_SIDE * 2**resolution, height=TILE_SIDE * 2**resolution) tiles = TmsTiles(image=image, storage=Storage(renderer=None), tile_width=TILE_SIDE, tile_height=TILE_SIDE, offset=XY(0, 0), resolution=resolution) # Zero levels self.assertRaises(AssertionError, tiles.upsample, levels=0) # One level tiles1a = tiles.upsample() self.assertEqual(tiles1a.image_width, TILE_SIDE * 2**(resolution + 1)) self.assertEqual(tiles1a.image_height, TILE_SIDE * 2**(resolution + 1)) self.assertEqual(tiles1a.resolution, resolution + 1) tiles1b = tiles.upsample(levels=1) self.assertEqual(tiles1b.image_width, TILE_SIDE * 2**(resolution + 1)) self.assertEqual(tiles1b.image_height, TILE_SIDE * 2**(resolution + 1)) self.assertEqual(tiles1b.resolution, resolution + 1) # Two levels tiles2 = tiles.upsample(levels=2) self.assertEqual(tiles2.image_width, TILE_SIDE * 2**(resolution + 2)) self.assertEqual(tiles2.image_height, TILE_SIDE * 2**(resolution + 2)) self.assertEqual(tiles2.resolution, resolution + 2)
def test_get_pixel_dimensions(self): # bluemarble.tif is a 1024 × 1024 whole-world map dataset = Dataset(inputfile=self.inputfile) self.assertEqual(dataset.GetPixelDimensions(), XY(x=39135.758476562499709, y=-39135.758476562499709)) # upsampling.tif is a 256 × 256 whole-world map dataset = Dataset(inputfile=self.upsamplingfile) self.assertEqual( dataset.GetPixelDimensions(), XY(x=156543.033906249998836, y=-156543.033906249998836)) # bluemarble-spanning-foreign.tif is a 154 × 154 partial map dataset = Dataset(inputfile=self.foreignfile) self.assertEqual( dataset.GetPixelDimensions(), XY(x=104362.022604166661040, y=-104362.022604166661040))
def test_dimensions(self): # Very small WGS84 map. :-) image = VImage.new_rgba(width=2, height=1) tiles = TmsTiles(image=image, storage=Storage(renderer=None), tile_width=1, tile_height=1, offset=XY(0, 0), resolution=0) self.assertEqual(tiles.image_width, 2) self.assertEqual(tiles.image_height, 1)
def test_get_world_tms_borders_aligned(self): # Aligned file should have borders marked as + below: # 3,3 # ++++ # ++++ # + ++ # ++++ # 0,0 dataset = Dataset(self.alignedfile) # At native resolution, every tile except for (1, 1) self.assertEqual( set(dataset.GetWorldTmsBorders()), set( XY(x, y) for x in range(0, 4) for y in range(0, 4) if (x, y) != (1, 1))) # At resolution 1, every tile except for (0, 0) self.assertEqual( set(dataset.GetWorldTmsBorders(resolution=1)), set( XY(x, y) for x in range(0, 2) for y in range(0, 2) if (x, y) != (0, 0)))
def test_tms_align(self): image = VImage.new_rgba(width=16, height=16) # Already aligned to integer offsets result = image.tms_align(tile_width=16, tile_height=16, offset=XY(1, 1)) self.assertEqual(result.Xsize(), image.Xsize()) self.assertEqual(result.Ysize(), image.Ysize()) # Spanning by half tiles in both X and Y directions result = image.tms_align(tile_width=16, tile_height=16, offset=XY(1.5, 1.5)) self.assertEqual(result.Xsize(), image.Xsize() * 2) self.assertEqual(result.Ysize(), image.Ysize() * 2) # Image is quarter tile result = image.tms_align(tile_width=32, tile_height=32, offset=XY(1, 1)) self.assertEqual(result.Xsize(), image.Xsize() * 2) self.assertEqual(result.Ysize(), image.Ysize() * 2)
def test_get_tms_extents_aligned(self): dataset = Dataset(self.alignedfile) # At native resolution, should only occupy its own tile self.assertExtentsEqual( dataset.GetTmsExtents(), Extents(lower_left=XY(1, 1), upper_right=XY(2, 2))) # At resolution 1, should only occupy lower-left quadrant self.assertExtentsEqual( dataset.GetTmsExtents(resolution=1), Extents(lower_left=XY(0, 0), upper_right=XY(1, 1))) # At resolution 0, should cover whole world self.assertExtentsEqual( dataset.GetTmsExtents(resolution=0), Extents(lower_left=XY(0, 0), upper_right=XY(1, 1)))
def test_get_tms_extents_wgs84(self): # Resolution 0, WGS 84 projection, there are only two tiles dataset = Dataset(self.wgs84file) self.assertExtentsEqual( dataset.GetTmsExtents(resolution=0), Extents(lower_left=XY(0, 0), upper_right=XY(2, 1)))