aboutsummaryrefslogtreecommitdiff
path: root/src/content_cso.cpp
Commit message (Expand)AuthorAge
* Modernize src/c* src/d* and src/e* files (#6263)Loïc Blot2017-08-17
* C++11 patchset 9: move hardcoded init parameters to class definitions (part 1...Loïc Blot2017-06-16
* Environment & IGameDef code refactoring (#4985)Ner'zhul2017-01-09
* Move ClientEnvironment to dedicated cpp/header filesLoic Blot2017-01-08
* Move texture_min_size even further down the pipe. Now, textures are JIT-upsca...Aaron Suen2015-03-31
* Replace std::list to std::vector into tile.cpp (m_texture_trash) and move til...Loic Blot2015-03-05
* Remove most exceptions from getNode() (and variants)Craig Robbins2014-11-14
* Remove texture atlas / AtlasPointer, rename getTextureRaw to getTextureKahrl2013-07-02
* Fix most warnings, re-fix MSVC compile errorkwolekr2013-02-26
* Update Copyright YearsSfan52013-02-24
* Change Minetest-c55 to MinetestPilzAdam2013-02-24
* Experimental-ish rollback functionalityPerttu Ahola2012-07-27
* Switch the license to be LGPLv2/later, with small parts still remaining as GP...Perttu Ahola2012-06-05
* Immediate smoke puff when a normal entity is punched to deathPerttu Ahola2012-03-10
n138'>138 139 140 141 142 143 144 145 146 147 148
// 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('https://notsyncing.net/maps.linux-forks.de/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, iconname, iconcolor,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.marker(latlng, {icon: L.AwesomeMarkers.icon({
			    icon: iconname,
			    markerColor: iconcolor
			})}).bindTooltip(label, {permanent: false, 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", "city", "red");
load_geojson("Stations", "./geojson/stations.json", "train", "blue");
load_geojson("Stations", "./geojson/shops.json", "shopping-cart", "green");

L.control.scale().addTo(mymap);

var popup = L.popup();

L.AwesomeMarkers.Icon.prototype.options.prefix = 'fa';
var baseballIcon = L.AwesomeMarkers.icon({
    icon: 'coffee',
    markerColor: 'red'
});

function onMapClick(e) {
    popup
	.setLatLng(e.latlng)
	.setContent("You clicked the map at " + e.latlng.toString())
	.openOn(mymap);
}

mymap.on('click', onMapClick);