+<% 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, {
worldCopyJump: true
- }).fitBounds(<%= @bbox.to_json %>);
+ });
+
+ // 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}).addTo(map);
<% @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 -%>
map.addControl(new L.Control.Permalink());
var lc = L.control.locate({
- position: 'topright',
- icon: '/location-arrow-solid.svg',
- iconLoading: '/spinner-solid.svg'
+ position: 'topright'
}).addTo(map);
return map;