- var copyright = I18n.t('javascripts.map.copyright', {copyright_url: '/copyright'});
- var donate = I18n.t('javascripts.map.donate_link_text', {donate_url: 'http://donate.openstreetmap.org'});
-
- this.baseLayers = [
- new L.OSM.Mapnik({
- attribution: copyright + " ♥ " + donate,
- code: "M",
- keyid: "mapnik",
- name: I18n.t("javascripts.map.base.standard")
- }),
- new L.OSM.CycleMap({
- attribution: copyright + ". Tiles courtesy of <a href='http://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
- code: "C",
- keyid: "cyclemap",
- name: I18n.t("javascripts.map.base.cycle_map")
- }),
- new L.OSM.TransportMap({
- attribution: copyright + ". Tiles courtesy of <a href='http://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
- code: "T",
- keyid: "transportmap",
- name: I18n.t("javascripts.map.base.transport_map")
- }),
- new L.OSM.MapQuestOpen({
- attribution: copyright + ". Tiles courtesy of <a href='http://www.mapquest.com/' target='_blank'>MapQuest</a> <img src='https://developer.mapquest.com/content/osm/mq_logo.png'>",
- code: "Q",
- keyid: "mapquest",
- name: I18n.t("javascripts.map.base.mapquest")
- }),
- new L.OSM.HOT({
- attribution: copyright + ". Tiles courtesy of <a href='http://hot.openstreetmap.org/' target='_blank'>Humanitarian OpenStreetMap Team</a>",
- code: "H",
- keyid: "hot",
- name: I18n.t("javascripts.map.base.hot")
- })
- ];
+ this.baseLayers = [];
+
+ for (const layerDefinition of OSM.LAYER_DEFINITIONS) {
+ if (layerDefinition.apiKeyId && !OSM[layerDefinition.apiKeyId]) continue;
+
+ let layerConstructor = L.OSM.TileLayer;
+ const layerOptions = {};
+
+ for (const [property, value] of Object.entries(layerDefinition)) {
+ if (property === "credit") {
+ layerOptions.attribution = makeAttribution(value);
+ } else if (property === "nameId") {
+ layerOptions.name = I18n.t(`javascripts.map.base.${value}`);
+ } else if (property === "apiKeyId") {
+ layerOptions.apikey = OSM[value];
+ } else if (property === "leafletOsmId") {
+ layerConstructor = L.OSM[value];
+ } else if (property === "leafletOsmDarkId" && OSM.isDarkMap() && L.OSM[value]) {
+ layerConstructor = L.OSM[value];
+ } else {
+ layerOptions[property] = value;
+ }
+ }
+
+ const layer = new layerConstructor(layerOptions);
+ layer.on("add", () => {
+ this.fire("baselayerchange", { layer: layer });
+ });
+ this.baseLayers.push(layer);
+ }