class window.OwnMap
constructor: (markermgr) ->
console.log 'OwnMap::constructor(%o)', markermgr
@markermgr = markermgr
@markermgr.startstop_only = Cookies.get('show_markers') is '0'
selected_tid = Cookies.get 'trackerID'
if selected_tid isnt ''
@markermgr.setFilter [selected_tid]
@map_drawn = false
@default_zoom = 15
@default_centre = [0, 0]
@live_view = false
@live_view_timer = false
layers =
'OpenStreetMap': L.tileLayer 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
subdomains: 'abc'
detectRetina: true
attribution: '© OpenStreetMap'
'OSM/DE': L.tileLayer 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
subdomains: 'abc'
detectRetina: true
attribution: '© OpenStreetMap'
'OpenTopoMap': L.tileLayer 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
subdomains: 'abc'
detectRetina: true
maxZoom: 17
attribution: 'Map data: © OpenStreetMap-Mitwirkende, SRTM | Map tiles: © OpenTopoMap (CC-BY-SA)'
'Hike&Bike': L.tileLayer 'http://{s}.tiles.wmflabs.org/hikebike/{z}/{x}/{y}.png',
subdomains: 'abc'
detectRetina: true
attribution: '© OpenStreetMap'
'Stamen Toner': L.tileLayer 'http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png',
subdomains: 'abcd'
detectRetina: true
attribution: 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.'
'Stamen Watercolor': L.tileLayer 'http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg',
subdomains: 'abcd'
detectRetina: true
attribution: 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.'
'TopPlusOpen': L.tileLayer 'http://sgx.geodatenzentrum.de/wmts_topplus_web_open/tile/1.0.0/web/default/WEBMERCATOR/{z}/{y}/{x}.png',
detectRetina: true
attribution: '© Bundesamt für Kartographie und Geodäsie 2018, Datenquellen'
'ESRI Satellite': L.tileLayer 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
detectRetina: true
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
overlays =
'Hillshades': L.tileLayer 'http://{s}.tiles.wmflabs.org/hillshading/{z}/{x}/{y}.png',
subdomains: ['a', 'b', 'c']
@mymap = L.map 'mapid',
center: [52.52, 13.44]
zoom: 11
layers: [layers['OpenStreetMap']]
L.control.layers(layers, overlays).addTo @mymap
@fetchMarkers()
fetchMarkers: ->
console.log 'OwnMap::fetchMarkers()'
@markermgr.fetchMarkers window.dateFrom, window.dateTo, window.accuracy
.done (data) =>
window.updateTrackerIDs()
if @drawMap()
$('#mapid').css 'filter', 'blur(0px)'
drawMap: ->
console.log 'OwnMap::drawMap()'
if @map_drawn
@markermgr.removeMarkersFrom @mymap
@markermgr.removeLinesFrom @mymap
@map_drawn = false
@markermgr.addMarkersTo @mymap
@markermgr.addLinesTo @mymap
# save default zoom scale
@setDefaultZoom()
# auto zoom scale based on all markers location
@mymap.fitBounds @markermgr.getMarkerBounds()
@map_drawn = true
setDefaultZoom: ->
console.log 'OwnMap::setDefaultZoom()'
setTimeout =>
@default_zoom = @mymap.getZoom()
@default_centre = @mymap.getCenter()
, 2000
setMarkerFilter: (tid) ->
console.log 'OwnMap::setMarkerFilter(%o)', tid
Cookies.set 'trackerID', tid
if tid isnt ''
@markermgr.setFilter [tid]
else
@markermgr.setFilter()
@drawMap()
showMarkers: ->
console.log 'OwnMap::showMarkers()'
@markermgr.startstop_only = false
Cookies.set 'show_markers', 1, { expires: 365 }
@drawMap()
hideMarkers: ->
console.log 'OwnMap::hideMarkers()'
@markermgr.startstop_only = true
Cookies.set 'show_markers', 0, { expires: 365 }
@drawMap()
resetZoom: ->
console.log 'OwnMap::resetZoom()'
@mymap.setView @default_centre, @default_zoom
toggleLiveView: ->
console.log 'OwnMap::toggleLiveView()'
@live_view = !@live_view
console.log 'Live view is now: %o', @live_view
if @live_view
@live_view_timer = setTimeout =>
@fetchMarkers()
, 3000
else
clearTimeout @live_view_timer
return @live_view
geodecodeMarker: (lid) ->
console.log 'OwnMap::geodecodeMarker(%o)', lid
# ajax call to remove marker from backend
$.ajax
url: 'rpc.php'
data:
'lid': lid
'action': 'geoDecode'
type: 'get'
dataType: 'json'
success: (data, status) =>
if data.status?
console.log 'geodecodeMarker: Status=%o, Data=%o', status, data
# update marker data
$("#loc_#{lid}").html "#{data.location}"
else
console.error 'geodecodeMarker: Status=%o, Data=%o', status, data
error: (xhr, desc, err) ->
console.error 'geodecodeMarker: XHR=%o, Error=%o, Details=%o', xhr, err, desc
deleteMarker: (lid) ->
console.log 'OwnMap::deleteMarker(%o)', lid
# ajax call to remove marker from backend
$.ajax
url: 'rpc.php'
data:
'lid': lid
'action': 'deleteMarker'
type: 'get'
dataType: 'json'
success: (data, status) =>
if data.status
@fetchMarkers()
else
console.error 'deleteMarker: Status=%o Data=%o', status, data
error: (xhr, desc, err) ->
console.error 'deleteMarker: XHR=%o, Error=%o, Details=%o', xhr, err, desc