From 897cfdcdf7fc9a922b562bca4238d9729f80f8db Mon Sep 17 00:00:00 2001 From: 30hours Date: Tue, 26 Mar 2024 12:43:20 +0000 Subject: [PATCH] Update config to add custom tile servers, map start loc --- api/api.py | 9 +++++- api/map/main.js | 71 +++++++++++++++++++++++++++-------------------- config/config.yml | 14 +++++++++- 3 files changed, 62 insertions(+), 32 deletions(-) diff --git a/api/api.py b/api/api.py index 976b47d..f002e33 100644 --- a/api/api.py +++ b/api/api.py @@ -20,6 +20,8 @@ try: with open('config/config.yml', 'r') as file: config = yaml.safe_load(file) radar_data = config['radar'] + map_data = config['map'] + config_data = config except FileNotFoundError: print("Error: Configuration file not found.") except yaml.YAMLError as e: @@ -44,7 +46,7 @@ localisations = [ ] adsbs = [ - {"name": "adsb.30hours.dev", "url": "adsb.30hours.dev"}, + {"name": map_data['tar1090'], "url": map_data['tar1090']}, {"name": "None", "url": ""} ] @@ -123,5 +125,10 @@ def serve_cesium_content(file): print(f"Error fetching content from Apache server: {e}") return Response('Error fetching content from Apache server', status=500, content_type='text/plain') +# output config file +@app.route('/config') +def config(): + return config_data + if __name__ == "__main__": app.run() diff --git a/api/map/main.js b/api/map/main.js index c471fd4..83f174d 100644 --- a/api/map/main.js +++ b/api/map/main.js @@ -1,18 +1,50 @@ -// default camera to Australia -var extent = Cesium.Rectangle.fromDegrees(138.44, -35.19, 138.93, -34.51); +// load config with dirty synchronous call +url = window.location.origin + '/config'; +var config; +var xhr = new XMLHttpRequest(); +xhr.open("GET", url, false); +xhr.send(); +if (xhr.status === 200) { + config = JSON.parse(xhr.responseText); +} else { + console.error('Request failed with status:', xhr.status); +} + +// fix tile server URL prefix +for (var key in config['map']['tile_server']) { + if (config['map']['tile_server'].hasOwnProperty(key)) { + var value = config['map']['tile_server'][key]; + var prefix = is_localhost(value) ? 'http://' : 'https://'; + config['map']['tile_server'][key] = prefix + value; + } +} + +// default camera view +var centerLatitude = config['map']['location']['latitude']; +var centerLongitude = config['map']['location']['longitude']; +var metersPerDegreeLongitude = 111320 * Math.cos(centerLatitude * Math.PI / 180); +var metersPerDegreeLatitude = 111132.954 - 559.822 * Math.cos( + 2 * centerLongitude * Math.PI / 180) + 1.175 * + Math.cos(4 * centerLongitude * Math.PI / 180); +var widthDegrees = config['map']['center_width'] / metersPerDegreeLongitude; +var heightDegrees = config['map']['center_height'] / metersPerDegreeLatitude; +var west = centerLongitude - widthDegrees / 2; +var south = centerLatitude - heightDegrees / 2; +var east = centerLongitude + widthDegrees / 2; +var north = centerLatitude + heightDegrees / 2; +var extent = Cesium.Rectangle.fromDegrees(west, south, east, north); Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extent; Cesium.Camera.DEFAULT_VIEW_FACTOR = 0; var imageryProviders = []; imageryProviders.push(new Cesium.ProviderViewModel({ - name: "ESRI Adelaide", + name: "ESRI", iconUrl: './icon/esri.jpg', - tooltip: 'ESRI Adelaide Tiles', - category: 'Offline', + tooltip: 'ESRI Tiles', creationFunction: function() { return new Cesium.UrlTemplateImageryProvider({ - url: 'https://tile.datr.dev/data/esri-adelaide/{z}/{x}/{y}.jpg', + url: config['map']['tile_server']['esri'] + '{z}/{x}/{y}.jpg', credit: 'Esri, Maxar, Earthstar Geographics, USDA FSA, USGS, Aerogrid, IGN, IGP, and the GIS User Community', maximumLevel: 20, }); @@ -23,10 +55,9 @@ imageryProviders.push(new Cesium.ProviderViewModel({ name: "MapBox Streets v11", iconUrl: './icon/mapBoxStreets.png', tooltip: 'MapBox Streets v11 Tiles', - category: 'Offline', creationFunction: function() { return new Cesium.UrlTemplateImageryProvider({ - url: 'https://tile.datr.dev/data/mapbox-streets-v11/{z}/{x}/{y}.png', + url: config['map']['tile_server']['mapbox_streets'] + '{z}/{x}/{y}.png', credit: '© Mapbox © OpenStreetMap Improve this map', maximumLevel: 16, }); @@ -37,38 +68,22 @@ imageryProviders.push(new Cesium.ProviderViewModel({ name: "MapBox Dark v10", iconUrl: './icon/mapBoxDark.png', tooltip: 'MapBox Dark v10 Tiles', - category: 'Offline', creationFunction: function() { return new Cesium.UrlTemplateImageryProvider({ - url: 'https://tile.datr.dev/data/mapbox-dark-v10/{z}/{x}/{y}.png', + url: config['map']['tile_server']['mapbox_dark'] + '{z}/{x}/{y}.png', credit: '© Mapbox © OpenStreetMap Improve this map', maximumLevel: 16, }); } })); -imageryProviders.push(new Cesium.ProviderViewModel({ - name: "ESRI", - iconUrl: './icon/esri.jpg', - tooltip: 'ESRI Tiles', - category: 'Offline', - creationFunction: function() { - return new Cesium.UrlTemplateImageryProvider({ - url: 'https://tile.datr.dev/data/esri/{z}/{x}/{y}.jpg', - credit: 'Esri, Maxar, Earthstar Geographics, USDA FSA, USGS, Aerogrid, IGN, IGP, and the GIS User Community', - maximumLevel: 16, - }); - } -})); - imageryProviders.push(new Cesium.ProviderViewModel({ name: "OpenTopoMap", iconUrl: './icon/opentopomap.png', tooltip: 'OpenTopoMap Tiles', - category: 'Offline', creationFunction: function() { return new Cesium.UrlTemplateImageryProvider({ - url: 'https://tile.datr.dev/data/opentopomap/{z}/{x}/{y}.png', + url: config['map']['tile_server']['opentopomap'] + '{z}/{x}/{y}.png', credit: 'Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)', maximumLevel: 8, }); @@ -81,7 +96,6 @@ terrainProviders.push(new Cesium.ProviderViewModel({ name: "WGS84 Ellipsoid", iconUrl: './icon/opentopomap.png', tooltip: 'WGS84 Ellipsoid Terrain', - category: 'Offline', creationFunction: function() { return new Cesium.EllipsoidTerrainProvider({ }); @@ -92,7 +106,6 @@ terrainProviders.push(new Cesium.ProviderViewModel({ name: "30m Adelaide", iconUrl: './icon/opentopomap.png', tooltip: '30m Adelaide Terrain', - category: 'Offline', creationFunction: function() { return Cesium.CesiumTerrainProvider.fromUrl( 'https://terrain.datr.dev/data/30m_adelaide/' @@ -104,7 +117,6 @@ terrainProviders.push(new Cesium.ProviderViewModel({ name: "90m Australia", iconUrl: './icon/opentopomap.png', tooltip: '90m Australia Terrain', - category: 'Offline', creationFunction: function() { return Cesium.CesiumTerrainProvider.fromUrl( 'https://terrain.datr.dev/data/90m_australia/' @@ -116,7 +128,6 @@ terrainProviders.push(new Cesium.ProviderViewModel({ name: "90m South Australia", iconUrl: './icon/opentopomap.png', tooltip: '90m South Australia Terrain', - category: 'Offline', creationFunction: function() { return Cesium.CesiumTerrainProvider.fromUrl( 'https://terrain.datr.dev/data/90m_south_australia/' diff --git a/config/config.yml b/config/config.yml index d4a7958..f616789 100644 --- a/config/config.yml +++ b/config/config.yml @@ -8,7 +8,6 @@ radar: associate: adsb: - tar1090: 'adsb.30hours.dev' tDelete: 5 localisation: @@ -21,6 +20,19 @@ localisation: threshold: 500 nDisplay: 50 +map: + location: + latitude: -34.9286 + longitude: 138.5999 + center_width: 50000 + center_height: 40000 + tile_server: + esri: tile.datr.dev/data/esri-adelaide/ + mapbox_streets: tile.datr.dev/data/mapbox-streets-v11/ + mapbox_dark: tile.datr.dev/data/mapbox-dark-v10/ + opentopomap: tile.datr.dev/data/opentopomap/ + tar1090: adsb.30hours.dev + 3lips: save: true tDelete: 60 \ No newline at end of file