def preview(request, name): try: mbtiles = MBTiles(name) z, x, y = mbtiles.center_tile() return tile(request, name, z, x, y) except MBTilesNotFoundError, e: logger.warning(e)
def test_grid(self): mb = MBTiles('geography-class') tile = mb.grid(3, 4, 2, callback='grid') h = hashlib.md5(tile).hexdigest() self.failUnlessEqual('8d9cf7d9d0bef7cc1f0a37b49bf4cec7', h) p = re.compile("grid\((.+)\);") self.failUnless(p.match(tile)) utfgrid = p.match(tile).group(1) utfgrid = edict(simplejson.loads(utfgrid)) self.failUnlessEqual(utfgrid.grid[20:30], [ u' !!!!!!!!!!!######### & $$$$$ %%%%%%%%%%%%%%%%%%%%%%%', u' !!!!!!!!!########### $ %%%%%%%%%%%%%%%%%%%%%%%', u" !!!!!!!!!######## # '''' %%%%%%%%%%%%%%%%%%%%%%%%", u" !!!!!! ########### ' ''''''%%%%%%%%%%%%%%%%%%%%%%%%", u" !!!!!! ######### ' '''''%%%%%%%%%%%%%%%%%%%%%%%%%", u" !!!! ######## ''''''''%%%%%%%%%%%%%%%%%%%%%%%%%", u" !! ####### (('''%%%%%%%%%%%%%%%%%%%%%%%%", u" ) ####### # ( ((('%%%%%%%%%%%%%%%%%%%%%%%%%", u' ) ######## # (( (((((%%%%%%%%%%%%%%%%%%%%%%%%', u' ))) ###### ((((((((((%%%%%%%%%%%%%%%%%%%%%%%%' ]) c = ord('#') + 32 if c >= 92: c = c + 1 if c >= 34: c = c + 1 self.failUnlessEqual(utfgrid.data[str(c)]['ADMIN'], 'Estonia') self.failUnlessEqual(utfgrid.data[str(c)]['POP_EST'], 1299371)
def test_grid(self): mb = MBTiles('geography-class') tile = mb.grid(3, 4, 2) h = hashlib.md5(tile).hexdigest() self.failUnlessEqual('8d9cf7d9d0bef7cc1f0a37b49bf4cec7', h) p = re.compile("grid\((.+)\);") self.failUnless(p.match(tile)) utfgrid = p.match(tile).group(1) utfgrid = edict(simplejson.loads(utfgrid)) self.failUnlessEqual(utfgrid.grid[20:30], [u' !!!!!!!!!!!######### & $$$$$ %%%%%%%%%%%%%%%%%%%%%%%', u' !!!!!!!!!########### $ %%%%%%%%%%%%%%%%%%%%%%%', u" !!!!!!!!!######## # '''' %%%%%%%%%%%%%%%%%%%%%%%%", u" !!!!!! ########### ' ''''''%%%%%%%%%%%%%%%%%%%%%%%%", u" !!!!!! ######### ' '''''%%%%%%%%%%%%%%%%%%%%%%%%%", u" !!!! ######## ''''''''%%%%%%%%%%%%%%%%%%%%%%%%%", u" !! ####### (('''%%%%%%%%%%%%%%%%%%%%%%%%", u" ) ####### # ( ((('%%%%%%%%%%%%%%%%%%%%%%%%%", u' ) ######## # (( (((((%%%%%%%%%%%%%%%%%%%%%%%%', u' ))) ###### ((((((((((%%%%%%%%%%%%%%%%%%%%%%%%']) c = ord('#') + 32 if c >= 92: c = c + 1 if c >= 34: c = c + 1 self.failUnlessEqual(utfgrid.data[str(c)]['ADMIN'], 'Estonia') self.failUnlessEqual(utfgrid.data[str(c)]['POP_EST'], 1299371)
def test_name(self): # Name in metadata mb = MBTiles('geography-class') self.failUnlessEqual('geography-class', mb.id) self.failUnlessEqual(u'Geography Class', mb.name) # No name in metadata mb = MBTiles('france-35') self.failUnlessEqual(mb.name, mb.id)
def test_tilejson(self): request = RequestFactory().get('/') mb = MBTiles('geography-class') jsonp = mb.tilejson(request) jsonp = edict(simplejson.loads(jsonp)) self.failUnlessEqual('geography-class', mb.id) self.failUnlessEqual(mb.id, jsonp.id) self.failUnlessEqual(mb.name, jsonp.name) self.failUnlessEqual(mb.center, tuple(jsonp.center)) self.failUnlessEqual([2.3401, 48.8503, 3], jsonp.center)
def tilejson(request, name): """ Serve the map configuration as JSONP """ callback = request.GET.get('callback', 'grid') try: mbtiles = MBTiles(name) return HttpResponse( mbtiles.jsonp(request, callback), content_type='application/javascript; charset=utf8') except MBTilesNotFoundError, e: logger.warning(e)
def grid(request, name, z, x, y): """ Serve a single UTF-Grid tile """ callback = request.GET.get('callback', None) try: mbtiles = MBTiles(name) return HttpResponse( mbtiles.grid(z, x, y, callback), content_type='application/javascript; charset=utf8') except MBTilesNotFoundError, e: logger.warning(e)
def tile(request, name, z, x, y): """ Serve a single image tile """ try: mbtiles = MBTiles(name) data = mbtiles.tile(z, x, y) response = HttpResponse(mimetype='image/png') response.write(data) return response except MBTilesNotFoundError, e: logger.warning(e)
def test_id_is_filename(self): # full path mb = MBTiles(os.path.join(FIXTURES_PATH, 'france-35.mbtiles')) self.failUnlessEqual('france-35', mb.id) # relative to MBTILES_ROOT mb = MBTiles('france-35.mbtiles') self.failUnlessEqual('france-35', mb.id) # with default extension mb = MBTiles('france-35') self.failUnlessEqual('france-35', mb.id)
def jsonp(request, name): """ Serve the map configuration as JSONP """ callback = request.GET.get('callback', 'grid') try: mbtiles = MBTiles(name) return HttpResponse( mbtiles.jsonp(callback), content_type = 'application/javascript; charset=utf8' ) except MBTilesNotFoundError, e: logger.warning(e)
def grid(request, name, z, x, y): """ Serve a single UTF-Grid tile """ callback = request.GET.get('callback', 'grid') try: mbtiles = MBTiles(name) return HttpResponse( mbtiles.grid(z, x, y, callback), content_type = 'application/javascript; charset=utf8' ) except MBTilesNotFoundError, e: logger.warning(e)
def tilejson(request, name, catalog=None): """ Serve the map configuration as TileJSON """ callback = request.GET.get('callback', None) try: mbtiles = MBTiles(name, catalog) tilejson = mbtiles.tilejson(request) if callback: tilejson = '%s(%s);' % (callback, tilejson) return HttpResponse(tilejson, content_type='application/javascript; charset=utf8') except MBTilesNotFoundError, e: logger.warning(e)
def test_jsonp(self): mb = MBTiles('geography-class') js = mb.jsonp('cb') p = re.compile("cb\((.+)\);") self.failUnless(p.match(js)) jsonp = p.match(js).group(1) jsonp = edict(simplejson.loads(jsonp)) self.failUnlessEqual('geography-class', mb.id) self.failUnlessEqual(mb.id, jsonp.id) self.failUnlessEqual(mb.name, jsonp.name) self.failUnlessEqual(mb.center, tuple(jsonp.center)) self.failUnlessEqual([2.3401, 48.8503, 3], jsonp.center)
def test_preview(self): mb = MBTiles('geography-class') self.failUnlessEqual((2.3401, 48.8503, 3), mb.center) center = mb.center_tile() self.failUnlessEqual((3, 4, 2), center) h = hashlib.md5(mb.tile(*center)).hexdigest() self.failUnlessEqual('e7de86eeea4e558851a7c0f6cc3082ff', h) # HTTP response = self.client.get(reverse('mbtilesmap:preview', kwargs={'name':'geography-class'})) self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-type'], 'image/png') response = self.client.get(reverse('mbtilesmap:preview', kwargs={'name':'unknown'})) self.assertEqual(response.status_code, 404)
def test_id(self): # full path mb = MBTiles(os.path.join(FIXTURES_PATH, 'france-35.mbtiles')) self.failUnlessEqual('france-35', mb.id) # relative to MBTILES_ROOT mb = MBTiles('france-35.mbtiles') self.failUnlessEqual('france-35', mb.id) # with default extension mb = MBTiles('france-35') self.failUnlessEqual('france-35', mb.id) # Unknown file self.assertRaises(MBTilesNotFoundError, MBTiles, ('unknown.mbtiles')) app_settings.MBTILES_ROOT = "random-path-xyz" self.assertRaises(MBTilesFolderError, MBTiles, ('unknown.mbtiles'))
def test_center(self): mb = MBTiles('france-35') # Only one zoom level self.failUnlessEqual([3, 5], mb.zoomlevels) c = mb.center # MBTiles has no metadata, center will be (0, 0) self.failUnlessEqual((0, 0, 5), tuple(c)) mb = MBTiles('geography-class') # Center is in metadata self.failUnlessEqual('2.3401,48.8503,7', mb.metadata.get('center')) # But zoomlevel is not among available self.failUnless(7 not in mb.zoomlevels) # Middle zoom is used self.failUnlessEqual(3, mb.middlezoom) self.failUnlessEqual((2.3401, 48.8503, 3), mb.center)
def test_preview(self): mb = MBTiles('geography-class') self.failUnlessEqual((2.3401, 48.8503, 3), mb.center) center = mb.center_tile() self.failUnlessEqual((3, 4, 2), center) h = hashlib.md5(mb.tile(*center)).hexdigest() self.failUnlessEqual('e7de86eeea4e558851a7c0f6cc3082ff', h) # HTTP response = self.client.get( reverse('preview', kwargs={'name': 'geography-class'})) self.assertEqual(response.status_code, 200) self.assertEqual(response['Content-type'], 'image/png') response = self.client.get( reverse('preview', kwargs={'name': 'unknown'})) self.assertEqual(response.status_code, 404)
def test_center_is_0_0_if_no_metadata(self): mb = MBTiles('france-35') # Only one zoom level self.failUnlessEqual([3, 5], mb.zoomlevels) c = mb.center # MBTiles has no metadata, center will be (0, 0) self.failUnlessEqual((0, 0, 5), tuple(c))
def test_center_come_from_metadata(self): mb = MBTiles('geography-class') # Center is in metadata self.failUnlessEqual('2.3401,48.8503,7', mb.metadata.get('center')) # But zoomlevel is not among available self.failUnless(7 not in mb.zoomlevels) # Middle zoom is used self.failUnlessEqual(3, mb.middlezoom) self.failUnlessEqual((2.3401, 48.8503, 3), mb.center)
def test_bounds(self): mb = MBTiles('france-35') # MBTiles has no metadata, bounds will be (-180, -90, 180, 90) self.failUnlessEqual((-180, -90, 180, 90), mb.bounds) mb = MBTiles('geography-class') self.failUnlessEqual((-18.6328, 32.25, 29.8828, 60.2398), mb.bounds)
def test_bounds_come_from_metadata(self): mb = MBTiles('geography-class') self.failUnlessEqual((-18.6328, 32.25, 29.8828, 60.2398), mb.bounds)
def test_name_come_from_metadata(self): # Name in metadata mb = MBTiles('geography-class') self.failUnlessEqual('geography-class', mb.id) self.failUnlessEqual(u'Geography Class', mb.name)
def test_name_is_filename_if_no_metadata(self): # No name in metadata mb = MBTiles('france-35') self.failUnlessEqual(mb.name, mb.id)
def test_tile(self): mb = MBTiles('geography-class') tile = mb.tile(3, 4, 2) h = hashlib.md5(tile).hexdigest() self.failUnlessEqual('e7de86eeea4e558851a7c0f6cc3082ff', h)
def test_bounds_are_world_if_no_metadata(self): mb = MBTiles('france-35') # MBTiles has no metadata, bounds will be (-180, -90, 180, 90) self.failUnlessEqual((-180, -90, 180, 90), mb.bounds)
def test_filesize(self): mb = MBTiles('france-35') self.failUnlessEqual(117760, mb.filesize)
def test_mbtiles_should_fail_if_mbtiles_does_not_exist(self): MBTiles('country', catalog='pouet') self.assertRaises(MBTilesNotFoundError, MBTiles, 'country', catalog='paf')