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_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)))
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_upsample(self): resolution = 0 image = VImageAdapter.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_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_dimensions(self): # Very small WGS84 map. :-) image = VImageAdapter.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_tms_align(self): image = VImageAdapter.new_rgba(width=16, height=16) # Already aligned to integer offsets result = VImageAdapter(image).tms_align(tile_width=16, tile_height=16, offset=XY(1, 1)) self.assertEqual(result.width, image.width) self.assertEqual(result.height, image.height) # Spanning by half tiles in both X and Y directions result = VImageAdapter(image).tms_align(tile_width=16, tile_height=16, offset=XY(1.5, 1.5)) self.assertEqual(result.width, image.width * 2) self.assertEqual(result.height, image.height * 2) # Image is quarter tile result = VImageAdapter(image).tms_align(tile_width=32, tile_height=32, offset=XY(1, 1)) self.assertEqual(result.width, image.width * 2) self.assertEqual(result.height, image.height * 2)
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_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)))