X-Git-Url: https://git.openstreetmap.org./chef.git/blobdiff_plain/f171579497681fb01212c9de813eb95424c6351e..571e5982cc82c4fbefff0d463895a029a68921fe:/cookbooks/imagery/templates/default/imagery.js.erb?ds=inline diff --git a/cookbooks/imagery/templates/default/imagery.js.erb b/cookbooks/imagery/templates/default/imagery.js.erb index a728ef60e..88459d684 100644 --- a/cookbooks/imagery/templates/default/imagery.js.erb +++ b/cookbooks/imagery/templates/default/imagery.js.erb @@ -1,38 +1,71 @@ +<% require 'uri' %> +function getUrlParams() { + const params = {}; + const queryString = window.location.search.substring(1); + const regex = /([^&=]+)=([^&]*)/g; + let match; + + while (match = regex.exec(queryString)) { + params[decodeURIComponent(match[1])] = decodeURIComponent(match[2]); + } + + return params; +} + function createMap(divName) { + // Get URL parameters + const params = getUrlParams(); + const lon = params.lon ? parseFloat(params.lon) : null; + const lat = params.lat ? parseFloat(params.lat) : null; + const zoom = params.zoom ? parseInt(params.zoom) : null; + // Create a map - var map = L.map(divName).fitBounds(<%= @bbox.to_json %>); + var map = L.map(divName, { + worldCopyJump: true + }); + + // Set initial view if URL parameters are available, otherwise fitBounds + if (lat !== null && lon !== null && zoom !== null) { + map.setView([lat, lon], zoom); + } else { + map.fitBounds(<%= @bbox.to_json %>); + } // Create a layer switcher - var layers = L.control.layers(null, null, {collapsed:false}); + var layers = L.control.layers(null, null, {collapsed:false}).addTo(map); // Add OpenStreetMap layer - layers.addBaseLayer(L.tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { - attribution: "© OpenStreetMap and contributors, under an open license", + layers.addBaseLayer(L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { + attribution: "© OpenStreetMap and contributors, under an open license", maxZoom: 19 }), "OpenStreetMap"); - <% @layers.sort_by { |layer| layer[:name] }.each do |layer| -%> + // Create <%= layer[:name] %> layer - var <%= layer[:name] %> = L.tileLayer(<%= layer[:url].to_json %>, { + var <%= layer[:name].gsub("-", "_") %> = L.tileLayer(<%= layer[:url].to_json %>, { attribution: <%= layer[:attribution].to_json %>, maxZoom: <%= layer[:maxZoom].to_json %> }); // Add <%= layer[:name] %> to layer switcher <% if layer[:overlay] -%> - layers.addOverlay(<%= layer[:name] %>, <%= layer[:title].to_json %>); + layers.addOverlay(<%= layer[:name].gsub("-", "_") %>, <%= layer[:title].to_json %>); <% else %> - layers.addBaseLayer(<%= layer[:name] %>, <%= layer[:title].to_json %>); + layers.addBaseLayer(<%= layer[:name].gsub("-", "_") %>, <%= layer[:title].to_json %>); <% end -%> <% if layer[:default] -%> // Add <%= layer[:name] %> to map - <%= layer[:name] %>.addTo(map); + <%= layer[:name].gsub("-", "_") %>.addTo(map); <% end -%> <% end -%> - // Add the layer switch to the mao - layers.addTo(map); + // Add the permalink control + map.addControl(new L.Control.Permalink()); + + var lc = L.control.locate({ + position: 'topright' + }).addTo(map); return map; }