diff --git a/src/map/map.ts b/src/map/map.ts index 6bd36a8..1e2115c 100644 --- a/src/map/map.ts +++ b/src/map/map.ts @@ -1,7 +1,7 @@ import L from 'leaflet'; import { readPB, readQ, type MapData } from './utils/read'; -import { type TileType } from './utils/parsePB'; +import { type TileType, tileTypes } from './utils/parsePB'; type Tiles = { [K in TileType]: { @@ -27,8 +27,6 @@ const gQuery: string = 'q'; const gZoom: string = 'z'; const params: URLSearchParams = new URLSearchParams(document.location.search); -console.log(params); - let mapData: MapData = {}; if (params.has(gPos)) { @@ -53,25 +51,23 @@ const map: L.Map = L.map('map', { minZoom: 0.5, }); -if (mapData.area) { +if (mapData.markers?.length == 0 && mapData.area) { map.setView([mapData.area.lat, mapData.area.lon]); } if (mapData.markers) { - mapData.markers.forEach((marker) => { - let mapMarker = L.marker([marker.lat, marker.lon]).addTo(map); - if (marker.label) { - mapMarker.bindPopup(marker.label, { closeButton: false }).openPopup(); - } - }); - if (mapData.markers.length === 1) { let mapMarker = mapData.markers[0]; map.setView([mapMarker.lat, mapMarker.lon]); } + + mapData.markers.forEach((marker) => { + let mapMarker = L.marker([marker.lat, marker.lon]).addTo(map); + mapMarker.bindPopup(marker.label, { closeButton: false }).openPopup(); + }); } -L.tileLayer(tileProviders[mapData.tile ?? 'roadmap'].layer, { +L.tileLayer(tileProviders[mapData.tile || tileTypes[0]].layer, { maxZoom: 19, - attribution: tileProviders[mapData.tile ?? 'roadmap'].attr, + attribution: tileProviders[mapData.tile || tileTypes[0]].attr, }).addTo(map); diff --git a/src/map/utils/parsePB.ts b/src/map/utils/parsePB.ts index 5778070..6d0db6f 100644 --- a/src/map/utils/parsePB.ts +++ b/src/map/utils/parsePB.ts @@ -1,5 +1,5 @@ export type TileType = 'roadmap' | 'satellite'; -export const tileTypes = ['roadmap', 'satellite']; +export const tileTypes: TileType[] = ['roadmap', 'satellite']; function convertType(item: string): [string | TileType | number, boolean] { item = item.replace(/^\d+/, ''); diff --git a/src/map/utils/read.ts b/src/map/utils/read.ts index 7cd96ac..cf944e3 100644 --- a/src/map/utils/read.ts +++ b/src/map/utils/read.ts @@ -9,7 +9,7 @@ const dmsMatch: RegExp = /^\d{1,2}°\d{1,2}'\d{1,2}\.\d"(N|S) \d{1,2}°\d{1,2}'\ export type Marker = { lat: number; lon: number; - label?: string; + label: string; }; export type MapData = { @@ -40,7 +40,7 @@ export async function readPB(param: string): Promise { lon: mapArea[1], }; - mapData.zoom = getMapZoom(mapArea[0]); + mapData.zoom = getMapZoom(mapArea[0]) ?? 17; let currMarkers: any[] | string = data[1]; if (typeof currMarkers !== 'string') { @@ -54,6 +54,7 @@ export async function readPB(param: string): Promise { mapData.markers?.push({ lat: lat, lon: lon, + label: `${lat} ${lon}`, }); } } else { diff --git a/src/map/utils/zoom.ts b/src/map/utils/zoom.ts index ccaa47c..66729ba 100644 --- a/src/map/utils/zoom.ts +++ b/src/map/utils/zoom.ts @@ -1,13 +1,11 @@ // https://groups.google.com/g/google-earth-browser-plugin/c/eSL9GlAkWBk/m/T4mdToJz_FgJ const factor: number = 35200000; +const precision: number = 10; export function getMapZoom(alt: number): number { - console.log(alt); - - // convert GE lookAt range to GMap zoom let zoom = Math.log2(factor / alt) * 1.225; - console.log(zoom); + zoom = Math.round((zoom + Number.EPSILON) * precision) / precision; if (zoom < 0) { zoom = 0;