diff --git a/config/profiles/home.yaml b/config/profiles/home.yaml index e4eb3de..49dc373 100644 --- a/config/profiles/home.yaml +++ b/config/profiles/home.yaml @@ -11,6 +11,15 @@ tileset: max_zoom: 15 attribution: "Protomaps © OSM" +tileset_hillshade: + url: "/tiles/hillshade-na.pmtiles" + encoding: "terrarium" + max_zoom: 12 + +traffic: + provider: "tomtom" + proxy_url: "/api/traffic/flow/{z}/{x}/{y}.png" + services: geocode: "/api/geocode" reverse: "/api/reverse" @@ -20,9 +29,9 @@ services: features: has_nominatim_details: false has_kiwix_wiki: false - has_hillshade: false + has_hillshade: true has_3d_terrain: false - has_traffic_overlay: false + has_traffic_overlay: true has_landclass: false has_address_book_write: false diff --git a/config/profiles/minimal_pi.yaml b/config/profiles/minimal_pi.yaml index 5e26b59..e4fe651 100644 --- a/config/profiles/minimal_pi.yaml +++ b/config/profiles/minimal_pi.yaml @@ -11,6 +11,15 @@ tileset: max_zoom: 15 attribution: "Protomaps © OSM" +tileset_hillshade: + url: "/tiles/hillshade-idaho.pmtiles" + encoding: "terrarium" + max_zoom: 12 + +traffic: + provider: "tomtom" + proxy_url: "/api/traffic/flow/{z}/{x}/{y}.png" + services: geocode: "/api/geocode" reverse: "/api/reverse" diff --git a/config/profiles/regional_pi.yaml b/config/profiles/regional_pi.yaml index e2b469c..89d56f3 100644 --- a/config/profiles/regional_pi.yaml +++ b/config/profiles/regional_pi.yaml @@ -11,6 +11,15 @@ tileset: max_zoom: 15 attribution: "Protomaps © OSM" +tileset_hillshade: + url: "/tiles/hillshade-regional.pmtiles" + encoding: "terrarium" + max_zoom: 12 + +traffic: + provider: "tomtom" + proxy_url: "/api/traffic/flow/{z}/{x}/{y}.png" + services: geocode: "/api/geocode" reverse: "/api/reverse" @@ -22,7 +31,7 @@ features: has_kiwix_wiki: false has_hillshade: true has_3d_terrain: false - has_traffic_overlay: false + has_traffic_overlay: true has_landclass: true has_address_book_write: true diff --git a/lib/api.py b/lib/api.py index 297a680..5a72889 100644 --- a/lib/api.py +++ b/lib/api.py @@ -17,7 +17,7 @@ import shutil import tempfile import requests as http_requests -from flask import Flask, request, jsonify, redirect, render_template +from flask import Flask, request, jsonify, redirect, render_template, make_response from qdrant_client import QdrantClient from qdrant_client.models import Filter, FieldCondition, MatchValue from werkzeug.utils import secure_filename @@ -1166,6 +1166,26 @@ def api_knowledge_stats(): return jsonify(_cache['knowledge_stats']) + +@app.route('/api/traffic/flow///.png') +def api_traffic_flow(z, x, y): + """Proxy TomTom traffic flow tiles to hide API key from frontend.""" + key = os.environ.get('TOMTOM_API_KEY') + if not key: + return 'Traffic service not configured', 503 + url = f'https://api.tomtom.com/traffic/map/4/tile/flow/relative/{z}/{x}/{y}.png?key={key}' + try: + resp = http_requests.get(url, timeout=10) + if resp.status_code != 200: + return 'Upstream error', 502 + r = make_response(resp.content) + r.headers['Content-Type'] = 'image/png' + r.headers['Cache-Control'] = 'public, max-age=120' + return r + except Exception: + return 'Upstream timeout', 504 + + @app.route('/api/config') def api_config(): """Return deployment profile config for frontend consumption."""