Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   сделать цикл с картами google (https://javascript.ru/forum/misc/73622-sdelat-cikl-s-kartami-google.html)

racheev 29.04.2018 14:19

сделать цикл с картами 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

racheev,
для каждой карты нужен свой блок, строка 9 должна быть в цикле, и лучше class="map", а не id.

racheev 29.04.2018 16:10

а я как бы не понимаю что нужен свой блок.
есть решение подскажите, чего воду в ступе толочь. а на счет id и класса разницы никакой.

Белый шум 30.04.2018 02:54

var map=[];
for (var k = 0; k < 2; k++) {
   map[k] = new google.maps.Map(document.getElementById('map'+k)
   ...
}

racheev 04.05.2018 09:03

не выходит у меня каменный цветок. Помогите это сделать в цикл:
<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

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>

racheev 04.05.2018 15:08

Спасибо работает. И стрелочки ездят. Осталось только разобраться как массив из php передать в javascript что бы открывалось все как надо.

racheev 15.05.2018 13:31

Еще не поможете мне прицепиться к чему-нибудь что бы убрать одну стрелочку. я не могу понять почему 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);
            })
        }
    })
};

Dilettante_Pro 15.05.2018 15:53

racheev,
Функция строка 30 срабатывает при получении ответа от сервера, после завершения цикла (цикл прокручивается быстро, не дожидаясь ответа).
Попробуйте вместо i использовать markers.length

racheev 18.05.2018 13:55

Цитата:

Сообщение от Dilettante_Pro (Сообщение 485357)
Попробуйте вместо i использовать markers.length

Спасибо, все сработало!


Часовой пояс GMT +3, время: 14:03.