class Natour::MapGeoAdmin::MapServlet
Public Instance Methods
do_GET(request, response)
click to toggle source
# File lib/natour/map_geo_admin.rb, line 66 def do_GET(request, response) # rubocop:disable Naming/MethodName raise WEBrick::HTTPStatus::NotFound unless request.path == '/map' tracks = request.query.fetch('tracks', '').split(',') layers = request.query.fetch('layers', '').split(',') layers.unshift('ch.swisstopo.pixelkarte-farbe') width, height = request.query.fetch('size', '').split(',') raise WEBrick::HTTPStatus::BadRequest unless width && height doc = [] doc << '<html><head>' doc << '<link rel="icon" href="data:;base64,iVBORw0KGgo=">' doc << '<script src="js/jquery-3.5.1.slim.min.js"></script>' doc << '<script src="js/bootstrap.min.js"></script>' doc << '<script src="js/loader.js"></script>' doc << '<script type="text/javascript">' doc << ' $(function() {' doc << ' var map = new ga.Map({' doc << ' controls: [],' doc << ' target: "map",' doc << ' view: new ol.View()' doc << ' })' doc << " var layers = [#{layers.map { |layer| "\"#{layer}\"" }.join(', ')}]" doc << ' layers.forEach(function(layer) {' doc << ' map.addLayer(ga.layer.create(layer))' doc << ' })' doc << " var tracks = [#{tracks.map { |track| "\"#{track}\"" }.join(', ')}]" doc << ' tracks = tracks.map(function(track) {' doc << ' return new ol.layer.Vector({' doc << ' source: new ol.source.Vector({' doc << ' format: new ol.format.GPX(),' doc << ' url: track' doc << ' }),' doc << ' style: new ol.style.Style({' doc << ' stroke: new ol.style.Stroke({' doc << ' color: "blueviolet",' doc << ' width: 3' doc << ' })' doc << ' })' doc << ' })' doc << ' })' doc << ' tracks.forEach(function(track) {' doc << ' map.addLayer(track)' doc << ' track.getSource().on("change", function(evt) {' doc << ' var extent = ol.extent.createEmpty()' doc << ' tracks.forEach(function(track) {' doc << ' ol.extent.extend(extent, track.getSource().getExtent())' doc << ' })' doc << ' map.getView().fit(extent, map.getSize())' doc << ' })' doc << ' })' doc << ' })' doc << '</script>' doc << '<style type="text/css">' doc << ' .map {' doc << " width: #{width};" doc << " height: #{height};" doc << ' }' doc << '</style>' doc << '</head><body><div id="map" class="map"></div></body></html>' response.body = doc.join("\n") response['Content-Type'] = 'text/html' end