def nearby(self): tile, level = TileSystem.quadkey_to_tile(self.key) perms = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)] tiles = set( map(lambda perm: (abs(tile[0] + perm[0]), abs(tile[1] + perm[1])), perms)) return [TileSystem.tile_to_quadkey(tile, level) for tile in tiles]
def from_geo(geo, level): """ Constucts a quadkey representation from geo and level geo => (lat, lon) If lat or lon are outside of bounds, they will be clipped If level is outside of bounds, an AssertionError is raised """ pixel = TileSystem.geo_to_pixel(geo, level) tile = TileSystem.pixel_to_tile(pixel) key = TileSystem.tile_to_quadkey(tile, level) return QuadKey(key)
def testMapScale(self): geo = (40., -105.) level = 7 dpi = 96 scale = 3540913.0290224836 error = abs(scale - TileSystem.map_scale(geo[0], level, dpi)) threshold = 1e-5 self.assertTrue(error < threshold)
def testPixelToTile(self): pixel = (6827, 12405) tile = (26, 48) self.assertEqual(tile, TileSystem.pixel_to_tile(pixel))
def from_tile(tile, level): return QuadKey(TileSystem.tile_to_quadkey(tile, level))
def testPixelToGeo(self): pixel = (6827, 12405) level = 7 geo = (40.002372, -104.996338) self.assertEqual(geo, TileSystem.pixel_to_geo(pixel, level))
def testTileToPixel(self): tile = (26, 48) pixel = (6656, 12288) self.assertEqual(pixel, TileSystem.tile_to_pixel(tile))
def testQuadkeyToTile(self): tile = (26, 48) level = 7 key = "0231010" self.assertEqual([tile, level], TileSystem.quadkey_to_tile(key))
def testMapScale(self): geo = (40., -105.) level = 7 dpi = 96 scale = 3540913.0290224836 self.assertEqual(scale, TileSystem.map_scale(geo[0], level, dpi))
def testMapSize(self): self.assertEqual(512, TileSystem.map_size(1)) with self.assertRaises(AssertionError): TileSystem.map_size(0)
def area(self): size = TileSystem.map_size(self.level) LAT = 0 res = TileSystem.ground_resolution(LAT, self.level) side = (size / 2) * res return side * side
def to_geo(self, centered=False): ret = TileSystem.quadkey_to_tile(self.key) tile = ret[0] lvl = ret[1] pixel = TileSystem.tile_to_pixel(tile, centered) return TileSystem.pixel_to_geo(pixel, lvl)
def to_tile(self): return TileSystem.quadkey_to_tile(self.key)
def testTileToQuadkey(self): tile = (26, 48) level = 7 key = "0231010" self.assertEqual(key, TileSystem.tile_to_quadkey(tile, level))
def testClip(self): self.assertEqual(1, TileSystem.clip(0, (1, 5))) self.assertEqual(5, TileSystem.clip(10, (1, 5))) self.assertEqual(3, TileSystem.clip(3, (1, 5))) with self.assertRaises(AssertionError): TileSystem.clip(7, (5, 1))
def testGroundResolution(self): geo = (40., -105.) res = 936.86657226219847 TileSystem.ground_resolution(geo[0], 7)
def testGeoToPixel(self): geo = (40., -105.) level = 7 pixel = (6827, 12405) self.assertEqual(pixel, TileSystem.geo_to_pixel(geo, level))