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

29 lines
997 B
JavaScript

6 years ago
import { map as LMap, tileLayer } from 'leaflet'
import 'leaflet/dist/leaflet.css'
export const map = LMap('map')
map.setView([0, 0], 1)
// background tilelayer (OSM)
tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
opacity: 0.9
}).addTo(map)
// wundertiles tilelayer
tileLayer('/tiles/{z}/{x}/{y}', {
attribution: '',
maxZoom: 22
}).addTo(map)
// compute Tile Coordinates
const toRad = (num) => num * Math.PI / 180
const getTileCoords = (lat, lon, zoom) => {
let xtile = parseInt(Math.floor((lon + 180) / 360 * (1 << zoom)))
let ytile = parseInt(Math.floor((1 - Math.log(Math.tan(toRad(lat)) + 1 / Math.cos(toRad(lat))) / Math.PI) / 2 * (1 << zoom)))
return { x: xtile, y: ytile, z: zoom }
}
// demo: how to get tile coords on click
map.on('click', (e) => { console.log(getTileCoords(e.latlng.lat, e.latlng.lng, map.getZoom())) })