]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/imagery/templates/default/imagery.js.erb
vectortile: Run tilekiln prometheus endpoint
[chef.git] / cookbooks / imagery / templates / default / imagery.js.erb
index 0f277444b45b0c9f23d16be14bb8718dfd22d394..88459d684bd31332d6bc5825ef9c2f3b77349ea7 100644 (file)
@@ -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}).addTo(map);
 
   // Add OpenStreetMap layer
-  layers.addBaseLayer(L.tileLayer("//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
+  layers.addBaseLayer(L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
     attribution: "© <a target=\"_parent\" href=\"https://www.openstreetmap.org\">OpenStreetMap</a> and contributors, under an <a target=\"_parent\" href=\"https://www.openstreetmap.org/copyright\">open license</a>",
     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 permalink control
   map.addControl(new L.Control.Permalink());
 
+  var lc = L.control.locate({
+    position: 'topright'
+  }).addTo(map);
+
   return map;
 }