169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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>
 |