Add frontend
This commit is contained in:
commit
e07050059d
3 changed files with 86 additions and 0 deletions
18
frontend/index.html
Normal file
18
frontend/index.html
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
||||||
|
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
||||||
|
crossorigin=""/>
|
||||||
|
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
||||||
|
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
||||||
|
crossorigin=""></script>
|
||||||
|
<script src="https://unpkg.com/protomaps-leaflet@4.0.0/dist/protomaps-leaflet.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/common/styles.css" />
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="map"></div>
|
||||||
|
<script src="/common/map.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
47
frontend/map.js
Normal file
47
frontend/map.js
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
|
||||||
|
const rules = new Array;
|
||||||
|
const l = new Array;
|
||||||
|
var legend = L.control({position: 'bottomleft'});
|
||||||
|
legend.onAdd = function (map) {
|
||||||
|
var div = L.DomUtil.create('div', 'legend');
|
||||||
|
for (var i = 0; i < l.length; i++) {
|
||||||
|
div.innerHTML += '<span class="dot" style="background: ' + l[i]["color"] + '" ></span>' + l[i]["name"] + "<br>";
|
||||||
|
}
|
||||||
|
return div;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var strecken = protomapsL.leafletLayer({
|
||||||
|
url: "strecken.pmtiles",
|
||||||
|
maxDataZoom: 10,
|
||||||
|
maxZoom: 19,
|
||||||
|
paintRules: rules,
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const map = L.map("map", { center: [52,13], zoom: 3, minZoom: 0 });
|
||||||
|
fetch("layers.json")
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((data) => {
|
||||||
|
document.title = data["name"]
|
||||||
|
layers = data["layers"]
|
||||||
|
for (let key in layers) {
|
||||||
|
l.push({ name: layers[key]["humanname"], color: layers[key]["color"] });
|
||||||
|
rules.push({
|
||||||
|
dataLayer: key,
|
||||||
|
symbolizer: new protomapsL.LineSymbolizer(layers[key])
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const tiles = data["tilelayer"]
|
||||||
|
var osm = L.tileLayer(
|
||||||
|
tiles["url_template"],
|
||||||
|
{
|
||||||
|
maxZoom: 19,
|
||||||
|
attribution: tiles["attribution"]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
osm.addTo(map);
|
||||||
|
legend.addTo(map);
|
||||||
|
strecken.addTo(map);
|
||||||
|
})
|
21
frontend/styles.css
Normal file
21
frontend/styles.css
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#map {
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
.legend {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
border: 2px solid grey;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
.dot {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 0.7em;
|
||||||
|
}
|
Loading…
Reference in a new issue