You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.6 KiB

  1. var mapLayers = {}
  2. var currentMapLayer = null
  3. register_hook('init', function () {
  4. if (!config.baseMaps) {
  5. var osmMapnik = L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
  6. {
  7. maxZoom: config.maxZoom || 19,
  8. attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
  9. }
  10. )
  11. osmMapnik.addTo(map)
  12. return
  13. }
  14. var layers = {}
  15. var preferredLayer = null
  16. for (var i = 0; i < config.baseMaps.length; i++) {
  17. var def = config.baseMaps[i]
  18. var layer = L.tileLayer(
  19. def.url,
  20. {
  21. attribution: def.attribution,
  22. maxNativeZoom: def.maxZoom,
  23. maxZoom: config.maxZoom || 19
  24. }
  25. )
  26. if (preferredLayer === null) {
  27. preferredLayer = layer
  28. }
  29. if (def.id === options.preferredBaseMap) {
  30. preferredLayer = layer
  31. }
  32. layers[def.name] = layer
  33. mapLayers[def.id] = layer
  34. }
  35. preferredLayer.addTo(map)
  36. L.control.layers(layers).addTo(map)
  37. map.on('baselayerchange', function (e) {
  38. currentMapLayer = e.layer
  39. })
  40. })
  41. register_hook('options_form', function (def) {
  42. var baseMaps = {}
  43. if (!config.baseMaps) {
  44. return
  45. }
  46. for (var i = 0; i < config.baseMaps.length; i++) {
  47. baseMaps[config.baseMaps[i].id] = config.baseMaps[i].name
  48. }
  49. def.preferredBaseMap = {
  50. 'name': lang('options:preferredBaseMap'),
  51. 'type': 'select',
  52. 'values': baseMaps
  53. }
  54. })
  55. register_hook('options_save', function (data) {
  56. if ('preferredBaseMap' in data && data.preferredBaseMap in mapLayers) {
  57. if (currentMapLayer) {
  58. map.removeLayer(currentMapLayer)
  59. }
  60. map.addLayer(mapLayers[data.preferredBaseMap])
  61. }
  62. })