Я пытаюсь написать небольшое веб-приложение, которое будет отображать некоторые местоположения на карте с помощью Google Maps JavaScript API. Работа с API идет хорошо, но я пытаюсь манипулировать их примером, и не могу заставить работать массив данных, если он не объявлен с функцией инициализации Map. Я искал то, что я не понимаю о Javascript доступе к переменным, но я не могу понять это. В идеале я хотел бы поместить массив данных в отдельный тег <script>
, чтобы я мог загрузить его из другого файла, но я даже не могу заставить данные работать, если поместить его прямо над функцией в том же теге <script>
Я здесь - упрощенная версия кода, которую я не могу заставить работать. Он не запустится, потому что я удалил свой ключ из вызова API, но если это необходимо, чтобы найти проблему, я могу выдать его тоже.
<html>
<head>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
width: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
// <script src="...">
// where I really want to load let locations = .... from a file
// </script>
<script>
// where i tried to move let locations = .... without success
function initMap() {
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 2.7,
center: new google.maps.LatLng(18,0)
});
let locations = [
{
name: 'MJ Cave',
position: new google.maps.LatLng(47.517869, 19.036026)
}, {
name: 'Protec Tulum',
position: new google.maps.LatLng(20.216557, -87.460052)
}, {
name: 'Giraffe Manor',
position: new google.maps.LatLng(-1.375528, 36.744634)
}
];
function placeMarker( loc ) {
const marker = new google.maps.Marker({
position : loc.position,
map : map
});
}
// ITERATE ALL LOCATIONS. Pass every location to placeMarker
locations.forEach( placeMarker );
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MYKEY&callback=initMap">
</script>
</body>
</html>