У меня есть базовая c листовка Svelte JS компонент карты:
<svelte:head>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
crossorigin=""></script>
</svelte:head>
<script>
import {onMount} from 'svelte';
import DamDetails from "./DamDetails.svelte";
let map;
let lat = 0;
let long = 0;
let ready = false;
let damDetails;
let damMarkers = [];
onMount(async () => {
map = L.map('map').setView([41, -8], 8);
L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=<12345>', {
attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
maxZoom: 18,
id: 'mapbox/streets-v11',
tileSize: 512,
zoomOffset: -1,
accessToken:'<12345>'
}).addTo(map);
function panMap() {
L.marker([40, 10]).addTo(map);
L.polyline([new L.LatLng(40, 10), new L.LatLng(40, 8)]).addTo(map);
let interestMarker = L.marker([document.getElementById("lat").value, document.getElementById("long").value], {
color: 'red'
});
interestMarker.addTo(map);
interestMarker.on('click', function (e) {
interestMarker.removeFrom(map);
});
}
</script>
<input id="lat" type=number bind:value={lat} placeholder="Enter latitude of the dam">
<input id="long" type=number bind:value={long} placeholder="Enter longitude of the dam">
<button on:click={panMap}>Add to map</button>
<div id="map" style="border: 0; margin: 0; width: 100%; height: 530px;"></div>
{#if ready}
<DamDetails damInfo="{damDetails}"/>
{/if}
Поэтому, когда я нажимаю кнопку, я вызываю функцию panMap
, которая должна добавить маркер, ломаную линию и красный маркер со слушателем.
Пока появляются маркеры, ломаная линия не ... Это ошибка:
Uncaught TypeError: Cannot read property 'x' of undefined
at L.intersects (VM1776 mapquest.js:10)
at e._clipPoints (VM1776 mapquest.js:10)
at e._update (VM1776 mapquest.js:10)
at e._reset (VM1776 mapquest.js:10)
at e.onAdd (VM1776 mapquest.js:10)
at e._layerAdd (VM1776 mapquest.js:10)
at i.whenReady (VM1774 leaflet.js:5)
at i.addLayer (VM1774 leaflet.js:5)
at HTMLButtonElement.panMap (Map.svelte:51)
Я пробовал несколько вариантов, таких как:
map.addLayer(L.polyline([new L.LatLng(40, 10), new L.LatLng(40, 8)]));
L.polyline([new L.LatLng(40, 10), new L.LatLng(40, 8)]).addTo(map);
А также пример из документации из коробки:
var latlngs = [
[45.51, -122.68],
[37.77, -122.43],
[34.04, -118.2]
];
var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
// zoom the map to the polyline
map.fitBounds(polyline.getBounds());
И ошибка то же. Любая помощь приветствуется.
Может ли это быть связано с асин c загрузкой (или не асин c) карты?
TIA
PS: Вот картинка части свойств с console.log: