Start setting up an AI display layer, but it's not finished yet
This commit is contained in:
parent
d158868c3f
commit
225eb8753a
5 changed files with 100 additions and 4 deletions
|
@ -7,4 +7,10 @@ export default {
|
|||
default_location: [ 53.76203,-0.35162 ],
|
||||
// The default zoom level to use when loading the page.
|
||||
default_zoom: 12,
|
||||
|
||||
// The border around gateways that we should consult the AI on.
|
||||
border: 0.1,
|
||||
|
||||
// The resolution of the coverage map
|
||||
step: 0.005
|
||||
};
|
||||
|
|
66
client_src/js/LayerAI.mjs
Normal file
66
client_src/js/LayerAI.mjs
Normal file
|
@ -0,0 +1,66 @@
|
|||
"use strict";
|
||||
|
||||
import path from 'path';
|
||||
|
||||
import L from 'leaflet';
|
||||
import tf from '@tensorflow/tfjs';
|
||||
|
||||
import GetFromUrl from './Helpers/GetFromUrl.mjs';
|
||||
import Config from './ClientConfig.mjs';
|
||||
|
||||
class LayerAI {
|
||||
get gateway_bounds() {
|
||||
let result = {
|
||||
east: Infinity,
|
||||
west: -Infinity,
|
||||
north: Infinity,
|
||||
south: -Infinity
|
||||
};
|
||||
for(let gateway of this.index) {
|
||||
result.east = Math.min(gateway.longitude, result.east);
|
||||
result.west = Math.max(gateway.longitude, result.west);
|
||||
|
||||
result.north = Math.min(gateway.latitude, result.north);
|
||||
result.south = Math.max(gateway.latitude, result.south);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
constructor(map) {
|
||||
this.map = map;
|
||||
this.gateways = new Map();
|
||||
}
|
||||
|
||||
async setup() {
|
||||
this.index = JSON.parse(
|
||||
await GetFromUrl(Config.ai_index_file)
|
||||
);
|
||||
console.log(index);
|
||||
|
||||
for(let gateway of this.index) {
|
||||
let gateway_data = {
|
||||
// TODO: Swap this out for the real thing - probably a GeoJSON layer or something
|
||||
// This is just a placeholder
|
||||
layer: L.layerGroup([
|
||||
|
||||
]),
|
||||
|
||||
ai: await tf.loadModel(`${window.location.href}/${path.dirname(Config.ai_index_file)}/${gateway.id}`)
|
||||
}
|
||||
this.gateways.set(gateway.id, gateway_data);
|
||||
}
|
||||
}
|
||||
|
||||
async render_map() {
|
||||
let map_bounds = this.gateway_bounds;
|
||||
map_bounds.north += Config.border;
|
||||
map_bounds.south -= Config.border;
|
||||
|
||||
map_bounds.east += Config.border;
|
||||
map_bounds.west -= Config.border;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export default LayerAI;
|
|
@ -1,19 +1,17 @@
|
|||
"use strict";
|
||||
|
||||
import Config from './ClientConfig.mjs';
|
||||
import GetFromUrl from './Helpers/GetFromUrl.mjs';
|
||||
|
||||
import L from 'leaflet';
|
||||
|
||||
import LayerAI from './LayerAI.mjs';
|
||||
|
||||
class MapManager {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
async setup() {
|
||||
let index = JSON.parse(await GetFromUrl(Config.ai_index_file));
|
||||
console.log(index);
|
||||
|
||||
this.map = L.map("map", {
|
||||
fullscreenControl: true
|
||||
});
|
||||
|
@ -25,6 +23,9 @@ class MapManager {
|
|||
maxZoom: 19,
|
||||
attribution: "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>"
|
||||
}).addTo(this.map);
|
||||
|
||||
this.layer_ai = new LayerAI(this.map);
|
||||
await this.layer_ai.setup();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
22
package-lock.json
generated
22
package-lock.json
generated
|
@ -2380,6 +2380,15 @@
|
|||
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
|
||||
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
|
||||
},
|
||||
"path": {
|
||||
"version": "0.12.7",
|
||||
"resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
|
||||
"integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
|
||||
"requires": {
|
||||
"process": "^0.11.1",
|
||||
"util": "^0.10.3"
|
||||
}
|
||||
},
|
||||
"path-dirname": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
|
||||
|
@ -2918,6 +2927,11 @@
|
|||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
|
||||
"integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
|
||||
},
|
||||
"process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
"integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
@ -3814,6 +3828,14 @@
|
|||
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
|
||||
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
|
||||
},
|
||||
"util": {
|
||||
"version": "0.10.4",
|
||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
|
||||
"integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
|
||||
"requires": {
|
||||
"inherits": "2.0.3"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
"better-sqlite3": "^5.4.0",
|
||||
"debug": "^4.1.1",
|
||||
"leaflet": "^1.5.1",
|
||||
"path": "^0.12.7",
|
||||
"postcss-copy": "^7.1.0",
|
||||
"postcss-import": "^12.0.1",
|
||||
"rollup-plugin-terser": "^5.1.1",
|
||||
|
|
Loading…
Reference in a new issue