var map = null; //global map object // base config var attribOSM = '© OpenStreetMap-bidragydere, CC-BY-SA'; var OSMLayer = L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: attribOSM } ); var Box = L.latLngBounds( [[54.5, 8.0],[57.8, 15.3]] ); // GeoJSON feature styling and grouping function typecolor(type) { if (type == "center") { return ('darkgreen'); } else if (type == 'center-begin') { return ('green'); } else if (type == 'member') { return ('orange'); } else if (type == 'diploma') { return ('red'); } else if (type == 'diploma-aspiring') { return ('blue'); } else { return ('black'); }; }; function returnFeatureMarker(feature, latlng) { var hasPopup = (feature.properties.location && feature.properties.title); return L.circleMarker(latlng, { title: feature.properties.title, zIndexOffset: 1000*feature.properties.priority || 0, clickable: hasPopup, keyboard: hasPopup, color: typecolor(feature.properties.type) }); }; function addFeaturePopup(feature, layer) { if (feature.properties.location && feature.properties.title) { layer.bindPopup(''+feature.properties.title+'
'+feature.properties.location); } }; var center = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == "center"); } }); var center_begin = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == "center-begin"); } }); var member = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == "member"); } }); var diploma = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == "diploma"); } }); var diploma_aspiring = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == "diploma-aspiring"); } }); var unknown = L.geoJson([],{ pointToLayer: returnFeatureMarker, onEachFeature: addFeaturePopup, filter: function(feature, layer) { return (feature.properties.type == null); } }); var overlayMaps = { "LAND Centre": center, "LAND startere": center_begin, "Medlemmer": member, "Diplomholdere": diploma, "Diplomaspiranter": diploma_aspiring, "Øvrige": unknown }; function overlayCallback(data) { center.addData(data).addTo(map); center_begin.addData(data).addTo(map); member.addData(data).addTo(map); diploma.addData(data).addTo(map); diploma_aspiring.addData(data).addTo(map); unknown.addData(data); }; // position popup function round(n,d) { return Math.round(Math.pow(10,d)*n)/Math.pow(10,d) }; function lngLatString(latLng) { return round(latLng.lng,5) + ", " + round(latLng.lat,5) }; var popup = L.popup(); function positionPopup(e) { popup .setLatLng(e.latlng) .setContent("Position (long, lat):
" + lngLatString(e.latlng)) .openOn(map); } // http://mathiasbynens.be/notes/xhr-responsetype-json var getJSON = function(url, successHandler, errorHandler) { var xhr = typeof XMLHttpRequest != 'undefined' ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); var supportsJSON = (function() { if (typeof XMLHttpRequest == 'undefined') { return false; } xhr.open('get', '/', true); try { // some browsers throw when setting `responseType` to an unsupported value xhr.responseType = 'json'; } catch(error) { return false; } return 'response' in xhr && xhr.responseType == 'json'; }()); xhr.open('get', url, true); if (supportsJSON) { xhr.responseType = 'json'; } xhr.onreadystatechange = function() { var status; var data; // http://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate if (xhr.readyState == 4) { // `DONE` status = xhr.status; if (status == 200) { successHandler && successHandler( supportsJSON ? xhr.response : JSON.parse(xhr.responseText) ); } else { errorHandler && errorHandler(status); } } }; xhr.send(); }; // create base map when DOM is ready, and then add features and controls function initMap() { map = L.map('content', { layers: [OSMLayer] }); map.attributionControl.setPrefix(false); map.fitBounds(Box); // micro-polyfill - http://mathiasbynens.be/notes/document-head var head = document.head || document.getElementsByTagName('head')[0]; // load all rel=points links in html header as GeoJSON var links = head.getElementsByTagName("link") for (i=0;i< links.length;i++) { if (links[i].rel == "points") { getJSON(links[i].href, function (data) { overlayCallback(data); }); } }; L.control.layers([],overlayMaps).addTo(map); L.control.scale({ imperial: false }).addTo(map); map.on('contextmenu', positionPopup); }; yepnope([ { test : window.JSON, // https://code.google.com/p/json-sans-eval/ // (json2: less secure; json3: larger - unneeded features) nope : 'json-minified.js', }, { test: document.addEventListener, nope: 'EventListener.js', complete: function() { document.addEventListener("DOMContentLoaded", initMap, false) } } ]);