diff --git a/index.html b/index.html index 3c8ef13..efbe5cd 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,9 @@ + + + @@ -46,11 +49,17 @@ position: absolute; top: 10px; right: 10px; + // Лефлет накладывает карту с большим z-уровнем + // (зачем - не знаю), поэтому чтобы контролы были видны - делаем так + z-index: 1000; } #langSelect { position: absolute; top: 35px; right: 10px; + // Лефлет накладывает карту с большим z-уровнем + // (зачем - не знаю), поэтому чтобы контролы были видны - делаем так + z-index: 1000; } @@ -69,6 +78,7 @@ + diff --git a/index.js b/index.js index 96ef87a..35dea1f 100644 --- a/index.js +++ b/index.js @@ -57,6 +57,7 @@ mapbox: mapboxApi, here: hereApi, yandex: yandexApi, + osm: osmApi, }; const firstApi = mapglApi; diff --git a/osm.js b/osm.js new file mode 100644 index 0000000..7b9e2f7 --- /dev/null +++ b/osm.js @@ -0,0 +1,62 @@ +const osmApi = { + type: "osm", + + map: undefined, + container: undefined, + + init(elementId) { + if (!window.L) { + return; + } + + if (this.map && this.container) { + this.container.style.display = "block"; + this.update(); + return; + } + + this.container = document.createElement("div"); + this.container.classList.add("map-container"); + + const wrapper = document.getElementById(elementId); + wrapper.appendChild(this.container); + + this.map = new window.L.Map(this.container, { + center: [state.lat, state.lng], + zoom: state.zoom, + attributionControl: false, + }); + window.L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png").addTo( + this.map + ); + + const onMove = () => { + const center = this.map.getCenter(); + + window.updateAnotherMap(this, { + lng: center.lng, + lat: center.lat, + zoom: this.map.getZoom(), + rotation: 0, + pitch: 0, + }); + }; + + this.map.on("zoom", onMove); + this.map.on("move", onMove); + }, + + update() { + if (!this.map) { + return; + } + + this.map.setView([state.lat, state.lng], state.zoom); + }, + + hide() { + if (this.container) { + this.container.style.display = "none"; + } + }, + };