summaryrefslogtreecommitdiff
path: root/plugins/leaflet/scripts/mapParser.html
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/leaflet/scripts/mapParser.html')
-rwxr-xr-xplugins/leaflet/scripts/mapParser.html185
1 files changed, 185 insertions, 0 deletions
diff --git a/plugins/leaflet/scripts/mapParser.html b/plugins/leaflet/scripts/mapParser.html
new file mode 100755
index 0000000..f129503
--- /dev/null
+++ b/plugins/leaflet/scripts/mapParser.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.js"></script>
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.css" />
+
+ <script src="leaflet-providers/leaflet-providers.js"></script>
+
+ <script src="Leaflet-MiniMap/src/Control.MiniMap.js"></script>
+ <link rel="stylesheet" href="Leaflet-MiniMap/src/Control.MiniMap.css" />
+
+ <script charset="utf-8">
+ // Function to parse the URL search query parameters.
+ // It will give A, B, C given http://www.somelink.com?lat=A&lon=B&zoom=C
+ // See "http://javascriptproductivity.blogspot.com/" +
+ // "2013/02/get-url-variables-with-javascript.html".
+ function getParams() {
+ // Make an object variable to hold
+ // the parsed URL parameters' keys and vlaues.
+ var params = {};
+
+ // Remove the '?' character after the base url.
+ // x.substring(i) will return the substring of x starting at index i
+ // up to the end of the string.
+ // Drupal CMS might have a path like this (two '?' characters):
+ // mapParser.html?t=E3OD?lat=14.6760413&lon=121.0437003&...
+ // We need to handle this case also.
+ var lastIndex = window.location.search.lastIndexOf("?")
+
+ // Get the substring not including any '?' character.
+ var query_string = window.location.search.substring(lastIndex + 1);
+
+ // Explode the string using the '&' character.
+ var query_string_parts = query_string.split('&');
+
+ // Traverse the exploded tokens.
+ for (i in query_string_parts) {
+ // Explode the string using '=' to isolate keys and values.
+ key_value = query_string_parts[i].split('=');
+
+ // Insert a new key and set it to the current parsed value.
+ params[key_value[0]] = key_value[1];
+ }
+
+ // Return the parameter object contianing the keys and values.
+ return params;
+ }
+ </script>
+ <style>
+ .leaflet-popup-content {
+ text-align: center;
+ }
+
+ body {
+ padding: 0;
+ margin: 0;
+ }
+
+ html,
+ body,
+ #map_container {
+ height: 100%;
+ width: 100%;
+ }
+ </style>
+</head>
+
+<body>
+ <div id='map_container' data-lat="" data-lon="" data-zoom=""></div>
+ <script>
+ // Get the DOM node to which we will append the map.
+ // In our setup the map container is a DIV element.
+ var mapDiv = document.getElementById("map_container");
+
+ // Parse the query parameters in the URL to obtain the
+ // LAT, LON, and ZOOM values.
+ var queryString = getParams();
+
+ // Fetch the most important attributes.
+ var latitude = queryString["lat"];
+ var longitude = queryString["lon"];
+ var zoom = queryString["zoom"];
+
+ // Initialize the mapDiv data attributes.
+ mapDiv.setAttribute("data-lat", latitude);
+ mapDiv.setAttribute("data-lon", longitude);
+ mapDiv.setAttribute("data-zoom", zoom);
+
+ // Convert the parameters to their numeric equivalent.
+ // Otherwise, initializing the Leaflet map object will not work.
+ latitude = Number(latitude);
+ longitude = Number(longitude);
+ zoom = Number(zoom);
+
+ var responsive = queryString["responsive"];
+
+ // If responsive map option is enabled, set the map height to 100%.
+ if (responsive == "on") {
+ mapDiv.style.height = "100%";
+ }
+
+ else {
+ // Retrieve the map's height.
+ var mapHeight = Number(queryString["height"]);
+ mapDiv.style.height = String(mapHeight) + "px";
+ }
+
+ // Retrive the popup text that will be used by the marker.
+ var popUpText = queryString["text"];
+
+ // Retrieve the Base Map's Tile to be used.
+ var tile = queryString["tile"];
+
+ // Retrieve the information about the inclusion of Overview map.
+ var minimap = queryString["minimap"];
+
+ // Create a map in the the target DOM container.
+ // Set the view to a given place and zoom value.
+ var map = L.map('map_container').setView([latitude, longitude], zoom);
+
+ // Choose the Map Tile provider e.g. "Esri.WorldTopoMap"
+ var mapTileProvider = tile;
+
+ var restrictedTiles = ['MapQuestOpen.Aerial', 'MapQuestOpen.OSM'];
+
+ // Redirect MapQuest tiles to OpenStreetMap tiles.
+ if (restrictedTiles.indexOf(mapTileProvider) != -1) {
+ mapTileProvider = 'OpenStreetMap.Mapnik';
+ }
+
+ // Set the base map.
+ var mapTile = L.tileLayer.provider(mapTileProvider, {attribution: "Map Tile: " + mapTileProvider});
+ mapTile.addTo(map);
+
+ // Add a marker in the given location.
+ // Make it draggble so that user could refine the position visually.
+ var p1 = L.marker([latitude, longitude], {
+ draggable: true,
+ });
+ p1.addTo(map);
+
+ // Add an event listener that will keep track the changes in the
+ // marker location and will update the data attribute accordingly.
+ p1.on('dragend', function (e) {
+ var newLocation = this.getLatLng();
+ var lat = newLocation.lat;
+ var lon = newLocation.lng;
+
+ // Pan the map to its new center which is the last position
+ // of the dragged marker.
+ map.panTo([lat, lon]);
+
+ mapDiv.setAttribute("data-lat", String(lat));
+ mapDiv.setAttribute("data-lon", String(lon));
+ });
+
+ // If the pop-up text is specified.
+ if (popUpText != '') {
+ // Replace the %20 HTML Entity by an empty space.
+ // %20 is the result of texts being piped via URL.
+ popUpText = popUpText.replace(/%20/g, ' ');
+
+ // Bind the text to the current marker.
+ p1.bindPopup(popUpText);
+ }
+
+ // Check if MiniMap needs to be shown also.
+ if (minimap == "on") {
+ // Create a new Tile Layer for the MiniMap.
+ // Per documentation, do not reuse the existing Tile object
+ // to avoid rendering issues.
+ var mapTile2 = L.tileLayer.provider(mapTileProvider);
+ var miniMap = new L.Control.MiniMap(mapTile2).addTo(map);
+ }
+
+ // Add an event listener that will keep track the changes in the
+ // map's zoom levels and it will update the data attribute accordingly.
+ map.on('zoomend', function (e) {
+ mapDiv.setAttribute("data-zoom", map.getZoom());
+ });
+ </script>
+</body>
+
+</html> \ No newline at end of file