Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.04.2018, 14:19
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 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>
Ответить с цитированием
  #2 (permalink)  
Старый 29.04.2018, 15:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

racheev,
для каждой карты нужен свой блок, строка 9 должна быть в цикле, и лучше class="map", а не id.
Ответить с цитированием
  #3 (permalink)  
Старый 29.04.2018, 16:10
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

а я как бы не понимаю что нужен свой блок.
есть решение подскажите, чего воду в ступе толочь. а на счет id и класса разницы никакой.
Ответить с цитированием
  #4 (permalink)  
Старый 30.04.2018, 02:54
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

var map=[];
for (var k = 0; k < 2; k++) {
   map[k] = new google.maps.Map(document.getElementById('map'+k)
   ...
}
Ответить с цитированием
  #5 (permalink)  
Старый 04.05.2018, 09:03
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 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>
Ответить с цитированием
  #6 (permalink)  
Старый 04.05.2018, 09:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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.
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2018, 15:08
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

Спасибо работает. И стрелочки ездят. Осталось только разобраться как массив из php передать в javascript что бы открывалось все как надо.
Ответить с цитированием
  #8 (permalink)  
Старый 15.05.2018, 13:31
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 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);
            })
        }
    })
};
Ответить с цитированием
  #9 (permalink)  
Старый 15.05.2018, 15:53
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

racheev,
Функция строка 30 срабатывает при получении ответа от сервера, после завершения цикла (цикл прокручивается быстро, не дожидаясь ответа).
Попробуйте вместо i использовать markers.length
Ответить с цитированием
  #10 (permalink)  
Старый 18.05.2018, 13:55
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

Сообщение от Dilettante_Pro Посмотреть сообщение
Попробуйте вместо i использовать markers.length
Спасибо, все сработало!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы кнопка «Назад» работала бы в пределах определенного сайта? Askeer Общие вопросы Javascript 7 14.10.2016 12:23
Как сделать чтобы кнопка «Назад» работала бы в пределах определенного сайта? Askeer Общие вопросы Javascript 0 12.10.2016 18:58
Как подчинить себе цикл wreder jQuery 17 20.11.2013 22:17
JavaScript + Google Maps ahimaskrasavin Элементы интерфейса 5 20.06.2011 13:21
как сделать цикл? debugx jQuery 2 24.05.2011 12:32