summaryrefslogtreecommitdiff
path: root/htdocs/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'htdocs/index.html')
-rw-r--r--htdocs/index.html168
1 files changed, 168 insertions, 0 deletions
diff --git a/htdocs/index.html b/htdocs/index.html
new file mode 100644
index 0000000..44e65ac
--- /dev/null
+++ b/htdocs/index.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html>
+<head>
+
+ <title>LinuxWorks Minetest Map (unofficial)</title>
+
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css" integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ==" crossorigin=""/>
+ <script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js" integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew==" crossorigin=""></script>
+</head>
+ <body style="position: absolute; padding: 0px; margin: 0px; width:100%; height:100%;">
+ <div id="mapid" style="width: 100%; height: 100%;"></div>
+ <style>
+ .leaflet-tooltip.city-names {
+ background-color: transparent;
+ border: transparent;
+ box-shadow: none;
+
+ font-weight: bold;
+ font-size: 14pt;
+ opacity:1.0;
+ color: white;
+ text-shadow: 0px 0px 5px black;
+ }
+ </style>
+ <script>
+ // Projection fix from: https://gis.stackexchange.com/questions/200865/leaflet-crs-simple-custom-scale
+ var factorx = 1/256 * 4;
+ var factory = factorx;
+ var originx = 7000;
+ var originy = 7000;
+ var zoom_level_real = 6;
+
+ L.CRS.pr = L.extend({}, L.CRS.Simple, {
+ projection: L.Projection.LonLat,
+ transformation: new L.Transformation(factorx, factorx * originx, -factory, factory * originy),
+
+ scale: function(zoom) {
+ return Math.pow(2, zoom);
+ },
+
+ zoom: function(scale) {
+ return Math.log(scale) / Math.LN2;
+ },
+
+ distance: function(latlng1, latlng2) {
+ var dx = latlng2.lng - latlng1.lng,
+ dy = latlng2.lat - latlng1.lat;
+
+ return Math.sqrt(dx * dx + dy * dy);
+ },
+ infinite: true
+ });
+
+ // Init map
+ var mymap = L.map('mapid', {
+ crs: L.CRS.pr
+ }).setView([0, 0], 6);
+
+ var mapheight = 16384;
+ var mapwidth = mapheight;
+ var sw = mymap.unproject([0, 0], zoom_level_real);
+ var ne = mymap.unproject([mapwidth, mapheight], zoom_level_real);
+ var layerbounds = new L.LatLngBounds(sw, ne);
+
+ var layers = L.control.layers({}, {}).addTo(mymap);
+
+ function load_svg(name, url, active=1) {
+ var xhttp_ps = new XMLHttpRequest();
+ xhttp_ps.onreadystatechange = function() {
+ if (this.readyState == 4) {
+ if (this.status == 200) {
+ var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+ svgElement.setAttribute('xmlns', "http://www.w3.org/2000/svg");
+ svgElement.setAttribute('viewBox', "0 0 16384 16384");
+ svgElement.innerHTML = xhttp_ps.responseText;
+ var svgElementBounds = [ [ 0, 0 ], [ 1000, 1000 ] ];
+ var overlay = L.svgOverlay(svgElement, svgElementBounds);
+ layers.addOverlay(overlay, name);
+ if (active)
+ overlay.addTo(mymap);
+ return overlay;
+ } else {
+ alert("Error: Could not load SVG map layer (" + name + ")");
+ }
+ }
+ };
+ xhttp_ps.open("GET", url, true);
+ xhttp_ps.send();
+ }
+
+ function load_tiles(name, id) {
+ var satellite = L.tileLayer('tiles/?id={id}&z={z}&x={x}&y={y}', {
+ maxZoom: 8,
+ maxNativeZoom: 6,
+ minNativeZoom: 0,
+ minZoom: 0,
+ noWrap: true,
+ attribution: 'Map data &copy; <a href="https://wiki.linux-forks.de/mediawiki/index.php/Maps">Linux-Forks</a>, ' +
+ 'All rights reserved, ',
+ id: id,
+ tileSize: 256,
+ zoomOffset: 0,
+ opacity: 1.0,
+ bounds: layerbounds
+ });
+ layers.addBaseLayer(satellite, name);
+ return satellite;
+ }
+
+ function load_geojson(name, url, active=1) {
+ var xhttp_ps = new XMLHttpRequest();
+ xhttp_ps.onreadystatechange = function() {
+ if (this.readyState == 4) {
+ if (this.status == 200) {
+ var geojson = L.geoJSON(JSON.parse(xhttp_ps.responseText), {
+ onEachFeature: function (feature, layer) {
+ label = String(feature.properties.name)
+ layer.bindPopup(
+ '<h1><a href="https://wiki.linux-forks.de/mediawiki/index.php/'+feature.properties.name+'">'+feature.properties.name+'</a> ('+feature.geometry.coordinates+')</h1>'+
+ '<p><img style="width:100%" src="' + feature.properties.image + '"></p>' +
+ '<p>'+feature.properties.description+'</p>'
+ );
+ layer.bindTooltip(label, {permanent: true, direction: "center", className: "city-names"}).openTooltip();
+ }/*,
+ pointToLayer: function(feature,latlng){
+ label = String(feature.properties.name)
+ return new L.CircleMarker(latlng, {
+ radius: 1,
+ }).bindTooltip(label, {permanent: true, direction: "center", opacity: 0.7}).openTooltip();
+ }*/
+ });
+ layers.addOverlay(geojson, name);
+ if (active)
+ geojson.addTo(mymap);
+ return geojson;
+ } else {
+ alert("Error: Could not load geojson map layer (" + name + ").");
+ }
+ }
+ };
+ xhttp_ps.open("GET", url, true);
+ xhttp_ps.send();
+ }
+
+ load_tiles("Satellite (2020-04-09)", 'world-2020-04-09').addTo(mymap);
+ load_tiles("Satellite (2019-05-04, wrong coords)", 'world-2019-05-04');
+
+ //load_svg("Test", "./overlay.svg", 0);
+ load_geojson("Cities", "./geojson/cities.json");
+
+ L.control.scale().addTo(mymap);
+
+ var popup = L.popup();
+
+ function onMapClick(e) {
+ popup
+ .setLatLng(e.latlng)
+ .setContent("You clicked the map at " + e.latlng.toString())
+ .openOn(mymap);
+ }
+
+ mymap.on('click', onMapClick);
+ </script>
+ </body>
+</html>