import { buildGPX } from 'gpx-builder'; import { OsmAndBuilder } from './OsmAndBuilder/index.ts'; const { Link, Point } = OsmAndBuilder.MODELS; // icons from https://github.com/osmandapp/OsmAnd-resources/tree/master/icons const ICONS_MAPPING = { 'src/images/appel22.png': 'shop_greengrocer', 'src/images/braamboos22.png': 'scrub', 'src/images/fruit22groen.png': 'vineyard', 'src/images/garnaal22groen.png': 'reef', // or shop_seafood 'src/images/noten22groen.png': 'nuts', 'src/images/overig22groen.png': 'village_green', 'src/images/paddo22.png': 'military_nuclear_explosion_site', 'src/images/paddo22groen.png': 'military_nuclear_explosion_site', 'src/images/peer22.png': 'shop_greengrocer', 'src/images/planten22groen.png': 'cannabis', // or herbalist 'src/images/schelp22.png': 'reef', // or shop_seafood 'src/images/walnoot22.png': 'nuts', }; const COLOR_MAPPING_GROUPS = { 'src/images/garnaal22groen.png': '#f55a52', 'src/images/noten22groen.png': '#c89760', 'src/images/overig22groen.png': '#888888', 'src/images/paddo22.png': '#e2b973', 'src/images/paddo22groen.png': '#e2b973', 'src/images/planten22groen.png': '#72a35a', 'src/images/schelp22.png': '#f55a52', 'src/images/walnoot22.png': '#c89760', }; const COLOR_MAPPING_NAMES = { 'aalbes': '#da3939', 'aardbei': '#cf0e08', 'Amerikaanse_kornoelje': '#e8e9e5', 'appel': '#da233d', 'bosbes': '#5a637f', 'braam': '#060910', 'druif': '#95b2e2', 'duindoorn': '#f08916', 'framboos': '#e53351', 'gele_kornoelje': '#dfc428', 'Japanse_Kornoelje': '#dee0e5', 'jeverbes': '#5f7b98', 'kers': '#853149', 'kiwi': '#8bbb2b', 'krentenboom': '#6d659a', 'lampionplant': '#f59317', 'Lijsterbes': '#f35436', 'linde': '#a0d031', 'mirabellen': '#e0b630', 'mispel': '#c76f42', 'Moerbei': '#19172b', 'papiermoerbei': '#e12f20', 'peer': '#b6bd33', 'pruim': '#955e87', 'rode_bes': '#da3939', 'rozenbottel': '#ea1b31', 'sleedoorn': '#7e93bf', 'vijg': '#7b6178', 'vlierbes': '#0e0d12', 'vossenbes': '#f21900', }; let icons = {}; let colors = {}; fetch('https://app.wildplukwijzer.nl/leafle.js') .then(response => { if (!response.ok) throw new Error (`Failed to retrieve Wildplukwijzer data (${response.status})`); return response.text(); }) .then(response => { response = response .split('\n') .filter(line => line.match(/ = new markerIcon/)) .map(line => line .replace(/^(var )?icon_/, 'icons[\'') .replace(' = new markerIcon({ iconUrl: ', '\'] = ') .replace(' })', '')) .join('\n'); eval(response); for (let k in icons) { colors[k] = k in COLOR_MAPPING_NAMES ? COLOR_MAPPING_NAMES[k] : COLOR_MAPPING_GROUPS[icons[k]]; icons[k] = ICONS_MAPPING[icons[k]]; } }).then(() => fetch('https://app.wildplukwijzer.nl/?hideheader=true')) .then(response => { if (!response.ok) throw new Error (`Failed to retrieve Wildplukwijzer data (${response.status})`); return response.text(); }) .then(response => { // Extract the relevant JavaScript code from the response response = response.split('\n'); let line = null; do line = response.shift(); while (!line.match(/let AllMarkers = /)); // A Leaflet shim with the functions expected by the code we'll extract let L = { layerGroup: () => [], marker: (latlng, settings) => { if (!settings.icon) throw new Error(`unknown icon ${settings.icon}`); let obj = { lat: latlng[0], lng: latlng[1], icon: settings.icon, }; obj.addTo = function (soort) { soort = soort.replace(/ /g, '_'); if (!(soort in colors)) throw new Error(`${soort} not in colors`); obj.color = colors[soort]; return obj; }; obj.bindPopup = function (desc, settings) { obj.name = desc .replace(/^.*

(.*)<\/h1>.*$/s, '$1') .replace(/^./, c => c.toUpperCase()) .replace(/_/g, ' '); obj.type = obj.name; obj.img = desc .replace(/^.*/s, '') .replace('

Informatie over de plukplek

', '') .replace(/