Skip to content

Instantly share code, notes, and snippets.

@ghelobytes
Last active December 10, 2019 18:36
Show Gist options
  • Save ghelobytes/735731e3c4af5f550d089724d15b41f8 to your computer and use it in GitHub Desktop.
Save ghelobytes/735731e3c4af5f550d089724d15b41f8 to your computer and use it in GitHub Desktop.
TMS proxy to write ZXY on tiles
import flask
import requests
from flask import Flask
from flask_restful import Resource, Api
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
app = Flask(__name__)
api = Api(app)
def _font_as_bytes():
font_url = ''
response = requests.get(url)
with open(FONT_PATH, 'rb') as f:
font_bytes = BytesIO(f.read())
return font_bytes
class OSM(Resource):
def get(self, z, x, y):
border_size = 1
border_color = 'gray'
label_color = 'black'
label = 'z:{z} \nx:{x} \ny:{y}'.format(z=z, x=x, y=y)
url = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'.format(z=z, x=x, y=y)
response = requests.get(url, headers = {
'user-agent': 'TMS proxy'
})
tile = Image.open(BytesIO(response.content))
width, height = tile.size
canvas = Image.new('RGBA', tile.size)
canvas.paste(tile)
draw = ImageDraw.Draw(canvas)
draw.rectangle((0, 0, width + border_size, height + border_size), outline=border_color, width=border_size)
font = ImageFont.truetype('./fonts/Roboto-Regular.ttf', 12)
w, h = draw.textsize(label)
draw.text(((width - w) / 2,( height - h) / 2), label, fill=label_color, font=font)
result = BytesIO()
canvas.save(result, 'PNG')
result.seek(0)
response = flask.send_file(result, mimetype='image/png')
return response
# expose endpoints
api.add_resource(OSM, '/osm/<int:z>/<int:x>/<int:y>.png')
if __name__ == '__main__':
app.run(debug=True)
flask-restful
requests
pillow==6.2.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment