diff options
Diffstat (limited to 'htdocs')
-rw-r--r-- | htdocs/index.html | 168 | ||||
-rw-r--r-- | htdocs/tiles/index.php | 3 |
2 files changed, 171 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 © <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> diff --git a/htdocs/tiles/index.php b/htdocs/tiles/index.php new file mode 100644 index 0000000..62a2de0 --- /dev/null +++ b/htdocs/tiles/index.php @@ -0,0 +1,3 @@ +<?php + +?> |