def test_create_map_with_address(self): """Checks the correct url generated with an address""" center_map = CenterMap(address=self.address) # cmap1 = CenterMap(lat=48.858278,lon=2.294489,maptype='satellite') self.assertEqual( center_map.generate_url(), 'https://maps.google.com/maps/api/staticmap?maptype=roadmap&format=png&scale=1¢er=151%20third%20st%2C%20san%20francisco%2C%20ca&zoom=17&size=400x400&sensor=false&language=en')
def test_centermap_sat(self): cmap_sat = CenterMap(lat=48.858278, lon=2.294489, maptype='satellite') self.assertEqual( cmap_sat.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en')
def test_create_map_with_address(self): """Checks the correct url generated with an address""" center_map = CenterMap(address=self.address) self.assertEqual( center_map.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?maptype=roadmap&' 'format=png&scale=1¢er=151%20third%20st%2C%20san%20francisco' '%2C%20ca&zoom=17&size=400x400&sensor=false&language=en')
def test_centermap_sat(self): cmap_sat = CenterMap(lat=48.858278, lon=2.294489, maptype='satellite') self.assertEqual( cmap_sat.generate_url(), 'https://maps.google.com/maps/api/staticmap?maptype=satellite&f' 'ormat=png&scale=1¢er=48.858278,2.294489&zoom=17&' 'size=400x400&sensor=false&language=en')
def test_api_key(self): cmap = CenterMap( lat=48.858278, lon=2.294489, maptype='satellite', key='abcdefghi' ) url = cmap.generate_url() self.assertEqual( cmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?key=abcdefghi&maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en')
def test_channel(self): cmap = CenterMap(lat=48.858278, lon=2.294489, maptype='satellite', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel') self.assertEqual( cmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en&channel=somechannel&' 'signature=Y-D-iEMbWPfUTjBtKEYDbGUtElY=') vmap = VisibleMap(maptype='terrain', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') self.assertEqual( vmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=terrain&' 'format=png&scale=1&size=400x400&sensor=false&' 'visible=Sugarbowl%2C%20Truckee%2C%20CA%7CTahoe%20City%2C%20CA&' 'language=en&channel=somechannel&signature=KQvz4Q3rB6Pmr7sJ_sM4qfKQzDo=' ) styles = [{ 'feature': 'road.highway', 'element': 'geomoetry', 'rules': { 'color': '#c280e9' } }] decorated_map = DecoratedMap(style=styles, clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel') decorated_map.add_marker( LatLonMarker('37.422782', '-122.085099', label='G')) self.assertEqual( decorated_map.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=roadmap&' 'format=png&scale=1&size=400x400&sensor=false&language=en&' 'markers=%7Clabel%3AG%7C37.422782%2C-122.085099&' 'style=feature%3Aroad.highway%7Celement%3Ageomoetry%7C' 'color%3A0xc280e9%7C&channel=somechannel&signature=IPHCEq1ifL7Chuwu604pMtN6eGw=' )
def generate_metadata_gmaps(name, lat, lon, zoom, pixels, gmaps_key): """ Generates metadata of provided parameters for image :param name: string name identifier of the image group, e.g. name of city :param label: int one of 0,1,2,3,4 where 0 maximum natural and 4 maximum man-made :param lat: float central lat coordinate :param lon: float central lon coordinate :param zoom: int google maps api zoom :param pixels: int maximum of 640 :param gmaps_key: string Google Maps API key :return: """ img_metadata = {} img_metadata["name"] = name img_metadata["lat"] = lat img_metadata["lon"] = lon img_metadata["zoom"] = zoom img_metadata["pixels"] = pixels meters_per_px = zoom_in_meters_per_pixel(zoom, lat) image_size = meters_per_px * pixels img_metadata["meters_per_px"] = meters_per_px img_metadata["img_size"] = image_size url = CenterMap(lat=lat, lon=lon, maptype='satellite', size_x=pixels, size_y=pixels, zoom=zoom, key=gmaps_key).generate_url() img_metadata["url"] = url img_metadata["filename"] = name + '_' + str(lat) + '_' + str(lon) + '_' + str(zoom) + '_' + str(pixels) + '.png' img_metadata["saved_dt"] = datetime.datetime.today() return img_metadata
def test_api_key_client_id_exclusive(self): self.assertRaises( ValueError, lambda: CenterMap(lat=48.858278, lon=2.294489, maptype='satellite', key='abcdefghi', clientid='gme-exampleid'))
def download_and_save_image(name, lat, lon, zoom, pixels, gmaps_key, folder='', save_image=True): """ Downloads and returns an image from Google Maps static API :param lat: float central lat coordinate :param lon: float central lon coordinate :param zoom: int google maps api zoom :param pixels: int maximum of 640 :param gmaps_key: string Google Maps API key :param folder: string where to save the image :param save_image: bool whether to save the image :return: """ url = CenterMap(lat=lat, lon=lon, maptype='satellite', size_x=pixels, size_y=pixels, zoom=zoom, key=gmaps_key).generate_url() image = Image.open(BytesIO(request.urlopen(url).read())) fname_suffix = name + '_' + str(lat) + '_' + str(lon) + '_' + str(zoom) + '_' + str(pixels) + '.png' if save_image: image.save(folder + fname_suffix, "PNG") return image
def test_client_id_and_private_key(self): cmap = CenterMap(lat=48.858278, lon=2.294489, maptype='satellite', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=') self.assertEqual( cmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en&' 'signature=PsD-OrvyjeIflTpH1p6v5hElJrE=') vmap = VisibleMap(maptype='terrain', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') self.assertEqual( vmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=terrain&' 'format=png&scale=1&size=400x400&sensor=false&' 'visible=Sugarbowl%2C%20Truckee%2C%20CA%7CTahoe%20City%2C%20CA&' 'language=en&signature=0_hfvOReb4YQfq7sGyAs0dLEDEo=') styles = [{ 'feature': 'road.highway', 'element': 'geomoetry', 'rules': { 'color': '#c280e9' } }] decorated_map = DecoratedMap(style=styles, clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=') decorated_map.add_marker( LatLonMarker('37.422782', '-122.085099', label='G')) self.assertEqual( decorated_map.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=roadmap&' 'format=png&scale=1&size=400x400&sensor=false&language=en&' 'markers=%7Clabel%3AG%7C37.422782%2C-122.085099&' 'style=feature%3Aroad.highway%7Celement%3Ageomoetry%7C' 'color%3A0xc280e9%7C&signature=bkshPe4g0vRn1Wt3n-rUZvEEN4M=')
def download_image(lat, lon, zoom, pixels, gmaps_key, crop_px=20, name='', dataset='', folder='', plot_image=False, save_image=True): """ Downloads and returns (optionally plots) an image from Google Maps static API :param lat: float central lat coordinate :param lon: float central lon coordinate :param zoom: int google maps api zoom :param pixels: int maximum of 640 :param gmaps_key: string Google Maps API key :param crop_px: int number of pixels to crop for each border :param name: str name identifier of the image group, e.g. name of city :param dataset: str dataset identifier :param folder: string where to save the image :param plot_image: bool whether to plot the image :param save_image: bool whether to save the image :return: """ metadata = {} metadata["lat"] = lat metadata["lon"] = lon metadata["zoom"] = zoom metadata["pixels"] = pixels metadata["name"] = name metadata["dataset"] = dataset meters_per_px = zoom_in_meters_per_pixel(zoom, lat) image_size = meters_per_px * pixels metadata["meters_per_px"] = meters_per_px metadata["img_size"] = image_size # download image url = CenterMap(lat=lat, lon=lon, maptype='satellite', size_x=pixels+2*crop_px, size_y=pixels+2*crop_px, zoom=zoom, key=gmaps_key).generate_url() metadata["url"] = url image = Image.open(BytesIO(request.urlopen(url).read())) image = ImageOps.crop(image, (crop_px, crop_px, crop_px, crop_px)) # borders: left, up, right, bottom metadata["filename"] = name + '_' + str(lat) + '_' + str(lon) + '_' + str(zoom) + '_' + str(pixels) + '.png' if save_image: image.save(folder + metadata["filename"], "PNG") metadata["saved_dt"] = datetime.datetime.today() if plot_image: image.show() plt.show() return image, metadata
def test_channel(self): cmap = CenterMap( lat=48.858278, lon=2.294489, maptype='satellite', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel' ) self.assertEqual( cmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en&channel=somechannel&' 'signature=Y-D-iEMbWPfUTjBtKEYDbGUtElY=') vmap = VisibleMap(maptype='terrain', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') self.assertEqual( vmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=terrain&' 'format=png&scale=1&size=400x400&sensor=false&' 'visible=Sugarbowl%2C%20Truckee%2C%20CA%7CTahoe%20City%2C%20CA&' 'language=en&channel=somechannel&signature=KQvz4Q3rB6Pmr7sJ_sM4qfKQzDo=') styles = [{ 'feature': 'road.highway', 'element': 'geomoetry', 'rules': { 'color': '#c280e9' } }] decorated_map = DecoratedMap(style=styles, clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=', channel='somechannel') decorated_map.add_marker(LatLonMarker('37.422782', '-122.085099', label='G')) self.assertEqual( decorated_map.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=roadmap&' 'format=png&scale=1&size=400x400&sensor=false&language=en&' 'markers=%7Clabel%3AG%7C37.422782%2C-122.085099&' 'style=feature%3Aroad.highway%7Celement%3Ageomoetry%7C' 'color%3A0xc280e9%7C&channel=somechannel&signature=IPHCEq1ifL7Chuwu604pMtN6eGw=' )
def test_client_id_and_private_key(self): cmap = CenterMap( lat=48.858278, lon=2.294489, maptype='satellite', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=' ) self.assertEqual( cmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=satellite&' 'format=png&scale=1¢er=48.858278%2C2.294489&zoom=17&' 'size=400x400&sensor=false&language=en&' 'signature=PsD-OrvyjeIflTpH1p6v5hElJrE=') vmap = VisibleMap(maptype='terrain', clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') self.assertEqual( vmap.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=terrain&' 'format=png&scale=1&size=400x400&sensor=false&' 'visible=Sugarbowl%2C%20Truckee%2C%20CA%7CTahoe%20City%2C%20CA&' 'language=en&signature=0_hfvOReb4YQfq7sGyAs0dLEDEo=') styles = [{ 'feature': 'road.highway', 'element': 'geomoetry', 'rules': { 'color': '#c280e9' } }] decorated_map = DecoratedMap(style=styles, clientid='gme-exampleid', secret='bbXgwW0k3631Bl2V5Z34gs9vYgf=') decorated_map.add_marker(LatLonMarker('37.422782', '-122.085099', label='G')) self.assertEqual( decorated_map.generate_url(), 'https://maps.googleapis.com/maps/api/staticmap?client=gme-exampleid&maptype=roadmap&' 'format=png&scale=1&size=400x400&sensor=false&language=en&' 'markers=%7Clabel%3AG%7C37.422782%2C-122.085099&' 'style=feature%3Aroad.highway%7Celement%3Ageomoetry%7C' 'color%3A0xc280e9%7C&signature=bkshPe4g0vRn1Wt3n-rUZvEEN4M=' )
def generate_gmaps_links(lat, long, zoom, pixels, num_images, center=True, xy_to_ij=True): """ generates list with google maps static api links paramter defintion as in function 'lat_long_array' """ coord = lat_long_array(lat, long, zoom, pixels, num_images, center=center, xy_to_ij=xy_to_ij) urls = [] for i in range(coord.shape[0]): for j in range(coord.shape[1]): cmap = CenterMap(lat=coord[i, j, 0], lon=coord[i, j, 1], maptype='satellite', size_x=pixels, size_y=pixels, zoom=zoom, key=os.getenv("GMAPS_API_KEY") ) urls.append(cmap.generate_url()) return urls
def road_segmentation(coord): cmap = CenterMap(lat=coord[0], lon=coord[1], size_x=640, size_y=640, zoom=18, scale=2) URL = cmap.generate_url() URL += "&style=feature:all|element:labels|visibility:off" with urllib.request.urlopen(URL) as url: f = io.BytesIO(url.read()) img = np.array(Image.open(f).convert("RGB")) img = rgb2gray(img) cmap_sat = CenterMap(lat=coord[0], lon=coord[1], maptype='satellite', size_x=640, size_y=640, zoom=18, scale=2) img_sat = skimage.io.imread(cmap_sat.generate_url()) threshold = 0.909 mask = (img > threshold - .001) & (img < threshold + .001) mask = np.invert(mask) color_mask = np.zeros(img_sat.shape) color_mask[mask] = [255, 0, 0] alpha = .6 blended = alpha * img_sat + (1 - alpha) * color_mask return exposure.rescale_intensity(blended)
"""Examples of the various maps that can be created with motionless.""" from __future__ import print_function from motionless import AddressMarker, DecoratedMap, CenterMap, VisibleMap cmap = CenterMap(address='151 third st, san francisco, ca') cmap_sat = CenterMap(lat=48.858278, lon=2.294489, maptype='satellite') vmap = VisibleMap(maptype='terrain') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') dmap = DecoratedMap() dmap.add_marker(AddressMarker('1 Infinite Loop, Cupertino, CA', label='A')) dmap.add_marker(AddressMarker('1600 Amphitheatre Parkway Mountain View, CA', label='G')) htmlPage = """ <html> <body> <h2>SFMOMA</h2> <img src="%s"/> <h2>La Tour Eiffel</h2> <img src="%s"/> <h2>Tahoe City and Sugarbowl</h2> <img src="%s"/> <h2>Google and Apple</h2> <img src="%s"/> </body> </html>
from motionless import AddressMarker, LatLonMarker,DecoratedMap, CenterMap, VisibleMap cmap = CenterMap(address='151 third st, san francisco, ca') cmap1 = CenterMap(lat=48.858278,lon=2.294489,maptype='satellite') vmap = VisibleMap(maptype='terrain') vmap.add_address('Sugarbowl, Truckee, CA') vmap.add_address('Tahoe City, CA') dmap = DecoratedMap() dmap.add_marker(AddressMarker('1 Infinite Loop, Cupertino, CA',label='A')) dmap.add_marker(AddressMarker('1600 Amphitheatre Parkway Mountain View, CA',label='G')) htmlPage = """ <html> <body> <h2>SFMOMA</h2> <img src="%s"/> <h2>La Tour Eiffel</h2> <img src="%s"/> <h2>Tahoe City and Sugarbowl</h2> <img src="%s"/> <h2>Google and Apple</h2> <img src="%s"/> </body> </html> """ % ( cmap.generate_url(), cmap1.generate_url(),
def index(request, lang="EN"): #template = loader.get_template('cv_parser/index.html') language = "Français" language_code = "fr" languages = {'language': 'English', 'code': 'us', 'link': 'EN'} if lang == "FR": with open("cv_parser/fr.json", 'r') as config: json_config = json.loads(config.read()) config.close() elif lang == "EN": language = "English" languages = {'language': 'Français', 'code': 'fr', 'link': 'FR'} language_code = "us" with open("cv_parser/en.json", 'r') as config: json_config = json.loads(config.read()) config.close() else: with open("cv_parser/fr.json", 'r') as config: json_config = json.loads(config.read()) config.close() #with open("cv_parser/cache.json","r") as cache_file: # json_cache=json.loads(cache_file.read()) # cache_file.close() #hash_of_adress = json_config["contact"]["adress"].encode("utf-8") #hash_of_adress = hashlib.md5(hash_of_adress).hexdigest() #if json_cache["adress"] != hash_of_adress: try: cmap = CenterMap(address=json_config["contact"]["adress"], zoom=15, key="AIzaSyCKM9tkv_Rc9fMhuwLhwNwvW8C9Y6hNuNg=") requ = req.Request(cmap.generate_url()) pic = req.urlopen(requ) filePath = 'cv_parser/static/cv_parser/images/static_map.png' with open(filePath, 'wb') as localFile: localFile.write(pic.read()) #json_cache["adress"] = hash_of_adress #with open("cv_parser/cache.json","w") as cache_file: # json.dump(json_cache, cache_file) # cache_file.close() except: print( "Error getting map image , put it manually in cv_parser/static/cv_parser/images/static_map.png" ) #hash_of_config = json.dumps(json_config, sort_keys = True).encode("utf-8") #hash_of_config = hashlib.md5(hash_of_config).hexdigest() #logger.info(json_cache[lang.lower()+"_pdf_hash"]) #logger.info(hash_of_config) #if json_cache[lang.lower()+"_pdf_hash"] != hash_of_config: template.create_template(json_config) #logger.info("new json") #json_cache[lang.lower()+"_pdf_hash"] = hash_of_config #with open("cv_parser/cache.json","w") as cache_file: # json.dump(json_cache, cache_file) # cache_file.close() # urllib.urlretrieve(self.url, filePath) return render( request, 'cv_parser/index.html', { 'config': json_config, 'language': language, 'language_code': language_code, 'languages': languages })
def test_client_id_requires_secret(self): self.assertRaises( ValueError, lambda: CenterMap(lat=48.858278, lon=2.294489, maptype='satellite', clientid='gme-exampleid'))
def test_channel_requires_client_id(self): self.assertRaises( ValueError, lambda: CenterMap(lat=48.858278, lon=2.294489, maptype='satellite', channel='somechannel'))
from motionless import CenterMap from skimage.color import rgb2gray from scipy import ndimage as ndi from PIL import Image import requests import numpy as np from io import StringIO from skimage import io cmap = CenterMap(lat=38.6038808, lon=-3.4694234, size_x=640, size_y=640, zoom=18, scale=2, style="feature:all|element:labels|visibility:off") cmap_sat = CenterMap(lat=38.6038808, lon=-3.4694234, maptype='satellite', size_x=640, size_y=640, zoom=18, scale=2) url = cmap.generate_url() url += "&style=feature:all|element:labels|visibility:off" # response = requests.get(url) # img = np.array(Image.open(StringIO(response.content))) # img_sat = io.imread(cmap_sat.generate_url()) # img = io.imread("https://maps.googleapis.com/maps/api/staticmap?maptype=roadmap¢er=38.7012335,-3.4256068&zoom=19&size=1280x1280&style=feature:all|element:labels|visibility:off&key=AIzaSyDvgF0JSBrlYLDzY7pPqtcBSgGslmaAlzw") img = io.imread(url)
import numpy as np from motionless import CenterMap import skimage.io from skimage import color from skimage.color import rgb2gray from PIL import Image import urllib.request import io from skimage import exposure #39.030236,-3.3761257 #38.321221,-3.5573312 #lat=38.6038808, lon=-3.4694234 cmap = CenterMap(lat=37.9039882, lon=-4.7740557, size_x=640, size_y=640, zoom=18, scale=2) URL = cmap.generate_url() URL = "https://maps.googleapis.com/maps/api/staticmap?key=AIzaSyDvgF0JSBrlYLDzY7pPqtcBSgGslmaAlzw¢er=38.043824,%20-3.985887&zoom=18&format=png&maptype=roadmap&style=element:geometry%7Ccolor:0x212121&style=element:labels%7Cvisibility:off&style=element:labels.icon%7Cvisibility:off&style=element:labels.text.fill%7Ccolor:0x757575&style=element:labels.text.stroke%7Ccolor:0x212121&style=feature:administrative%7Celement:geometry%7Ccolor:0x757575%7Cvisibility:off&style=feature:administrative.country%7Celement:labels.text.fill%7Ccolor:0x9e9e9e&style=feature:administrative.land_parcel%7Cvisibility:off&style=feature:administrative.locality%7Celement:labels.text.fill%7Ccolor:0xbdbdbd&style=feature:administrative.neighborhood%7Cvisibility:off&style=feature:poi%7Cvisibility:off&style=feature:poi%7Celement:labels.text.fill%7Ccolor:0x757575&style=feature:poi.park%7Celement:geometry%7Ccolor:0x181818&style=feature:poi.park%7Celement:labels.text.fill%7Ccolor:0x616161&style=feature:poi.park%7Celement:labels.text.stroke%7Ccolor:0x1b1b1b&style=feature:road%7Celement:geometry.fill%7Ccolor:0x2c2c2c&style=feature:road%7Celement:labels.icon%7Cvisibility:off&style=feature:road%7Celement:labels.text.fill%7Ccolor:0x8a8a8a&style=feature:road.arterial%7Celement:geometry%7Ccolor:0x373737&style=feature:road.highway%7Celement:geometry%7Ccolor:0x3c3c3c&style=feature:road.highway.controlled_access%7Celement:geometry%7Ccolor:0x4e4e4e&style=feature:road.local%7Celement:labels.text.fill%7Ccolor:0x616161&style=feature:transit%7Cvisibility:off&style=feature:transit%7Celement:labels.text.fill%7Ccolor:0x757575&style=feature:water%7Celement:geometry%7Ccolor:0x000000&style=feature:water%7Celement:labels.text.fill%7Ccolor:0x3d3d3d&size=640x640&scale=2" with urllib.request.urlopen(URL) as url: f = io.BytesIO(url.read()) img = np.array(Image.open(f).convert("RGB")) # img = rgb2gray(img) skimage.io.imshow(exposure.rescale_intensity(img)) skimage.io.show() threshold = 160 mask = (img > threshold - 10) & (img < threshold + 10)
def map_html(entry): lat, lon = get_lat_lon(entry) with open(os.path.join(file_path, "api_key.txt")) as f: key = f.read() cmap = CenterMap(lat=lat, lon=lon, maptype="terrain", zoom=10, key=key) return "<img src='{}'>".format(cmap.generate_url())