29.04.2018, 14:19
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
сделать цикл с картами google
Привет всем.
Помогите решить задачу.
Есть код который работает для одной карты. Пытался повторить его, но гугл запускает карты только с одной инициализацией. Мне надо вывести 2 или 3 а то и 4 карты на странице. пытался сделать
for (var k = 0; k < 2; ki++) { но не работает. Если создать руками еще один код внутри initMap() с другими названиями переменных, то работает. А как бы это сделать циклом?
<script>
var locations = [['Тула'],['Минск']];
var locations2 = [['Новосибирск'],['Бургас']];
</script>
<script>
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 3,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: {lat: 0,lng: 0}
});
var markers = [];
var bounds = new google.maps.LatLngBounds();
geocoder = new google.maps.Geocoder();
for (var i = 0; i < locations.length; i++) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': locations[i][0]}, function(results, status) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
markers.push(marker);
bounds.extend(marker.getPosition());
map.fitBounds(bounds);
});
}
}
</script>
|
|
29.04.2018, 15:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
racheev,
для каждой карты нужен свой блок, строка 9 должна быть в цикле, и лучше class="map", а не id.
|
|
29.04.2018, 16:10
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
а я как бы не понимаю что нужен свой блок.
есть решение подскажите, чего воду в ступе толочь. а на счет id и класса разницы никакой.
|
|
30.04.2018, 02:54
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
var map=[];
for (var k = 0; k < 2; k++) {
map[k] = new google.maps.Map(document.getElementById('map'+k)
...
}
|
|
04.05.2018, 09:03
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
не выходит у меня каменный цветок. Помогите это сделать в цикл:
<div id="map"></div> +++ <div id="map2"></div>
<script>
var locations = [['Тула'],['Минск']];
var locations2 = [['Новосибирск'],['Бургас']];
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 3,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: {lat: 0,lng: 0},
disableDefaultUI: true,
scrollwheel: false
});
var markers = [];
var bounds = new google.maps.LatLngBounds();
geocoder = new google.maps.Geocoder();
for (var i = 0; i < locations.length; i++) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': locations[i][0]}, function(results, status) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
markers.push(marker);
bounds.extend(marker.getPosition());
map.fitBounds(bounds);
if (i > 0) {
var sitepath = new google.maps.Polyline({
path: [markers[0].getPosition(), marker.getPosition()],
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map: map
});
}
});
}
var map2 = new google.maps.Map(document.getElementById('map2'), {
zoom: 3,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: {lat: 0,lng: 0},
disableDefaultUI: true,
scrollwheel: false
});
var markers2 = [];
var bounds2 = new google.maps.LatLngBounds();
geocoder2 = new google.maps.Geocoder();
for (var i = 0; i < locations2.length; i++) {
var geocoder2 = new google.maps.Geocoder();
geocoder.geocode({'address': locations2[i][0]}, function(results, status) {
var marker2 = new google.maps.Marker({
map: map2,
position: results[0].geometry.location
});
markers2.push(marker2);
bounds2.extend(marker2.getPosition());
map2.fitBounds(bounds2);
if (i > 0) {
var sitepath = new google.maps.Polyline({
path: [markers2[0].getPosition(), marker2.getPosition()],
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map: map2
});
}
});
}
}
</script>
|
|
04.05.2018, 09:39
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
google.maps несколько карт
racheev,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.map {
width: 600px; height: 400px
}
</style>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
<script>
var locations = [['Тула','Минск'], ['Новосибирск','Бургас']];
function initMap() {
[].forEach.call(document.querySelectorAll(".map"), function(div, k) {
var map = new google.maps.Map(div, {
zoom: 3,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: {
lat: 0,
lng: 0
}
});
var markers = [];
var bounds = new google.maps.LatLngBounds;
geocoder = new google.maps.Geocoder;
var location = locations[k];
for (var i = 0; i < location.length; i++) {
var geocoder = new google.maps.Geocoder;
geocoder.geocode({
"address": location[i]
}, function(results, status) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
markers.push(marker);
bounds.extend(marker.getPosition());
map.fitBounds(bounds)
})
}
})
};
google.maps.event.addDomListener(window, 'load', initMap);
</script>
</head>
<body>
<div class="map"></div>
<div class="map"></div>
</body>
</html>
Последний раз редактировалось рони, 04.05.2018 в 09:41.
|
|
04.05.2018, 15:08
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
Спасибо работает. И стрелочки ездят. Осталось только разобраться как массив из php передать в javascript что бы открывалось все как надо.
|
|
15.05.2018, 13:31
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
Еще не поможете мне прицепиться к чему-нибудь что бы убрать одну стрелочку. я не могу понять почему i все время равно 2.
function initMap() {
function animateCircle(line) {
var count = 0;
window.setInterval(function() {
count = (count + 1) % 200;
var icons = line.get('icons');
icons[0].offset = (count / 2) + '%';
line.set('icons', icons);
}, 20);
}
[].forEach.call(document.querySelectorAll(".map"), function(div, k) {
var map = new google.maps.Map(div, {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: {
lat: 0,
lng: 0
},
disableDefaultUI: true,
scrollwheel: false
});
var markers = [];
var bounds = new google.maps.LatLngBounds;
geocoder = new google.maps.Geocoder;
var location = locations[k];
for (var i = 0; i < location.length; i++) {
var geocoder = new google.maps.Geocoder;
geocoder.geocode({
"address": location[i]
}, function(results, status) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
markers.push(marker);
bounds.extend(marker.getPosition());
map.fitBounds(bounds);
alert(i);
/// как сделать что бы нечетный или четный запускал
/// i почему-то все время 2. я не понимаю почему
if (i % 2 == 0) {
var sitepath = new google.maps.Polyline({
path: [markers[0].getPosition(), marker.getPosition()],
geodesic: true,
icons: [{
icon: {path: google.maps.SymbolPath.FORWARD_OPEN_ARROW},
offset: '100%',
}],
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map: map
});
}
animateCircle(sitepath);
})
}
})
};
|
|
15.05.2018, 15:53
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
racheev,
Функция строка 30 срабатывает при получении ответа от сервера, после завершения цикла (цикл прокручивается быстро, не дожидаясь ответа).
Попробуйте вместо i использовать markers.length
|
|
18.05.2018, 13:55
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
Сообщение от Dilettante_Pro
|
Попробуйте вместо i использовать markers.length
|
Спасибо, все сработало!
|
|
|
|