Javascript — Google Maps v3 — Получение позиций маркеров

#javascript #arrays #google-maps #google-maps-api-3

#javascript #массивы #google-карты #google-maps-api-3

Вопрос:

Благодаря этому сайту и вашей помощи я почти закончил свой скрипт Googlemaps. Есть еще одна вещь, с которой мне нужна ваша помощь:

У меня на карте несколько маркеров.

Я хотел бы:

-сохранить положение каждого маркера в переменной
-создать внешние ссылки под картой, которые ссылаются на маркеры
-изменить mapcenter при нажатии на эти ссылки (описано выше)

Вот мой скрипт на данный момент:

    <script type="text/javascript">
    var offender_locations = [
        ["10001", "Title 2", "icon.png"],
        ["10002", "Title 3", "icon.png"],
        ["10010", "home", "icon.png"]
    ];

    var myOptions = {
        zoom: 12,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("results_map"), myOptions);
    var latlng = new google.maps.LatLng(0, 0);

    for (i = 0; i < offender_locations.length; i  ) {
        var infowindow = new google.maps.InfoWindow(),
            geocoder_map = new google.maps.Geocoder(),
            address = offender_locations[i][0],
            icon_img = offender_locations[i][2];
        (function(addr, img, i) {
            geocoder_map.geocode({
                'address': addr
            }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    map.setCenter(results[0].geometry.location);
                    var marker = new google.maps.Marker({
                        map: map,
                        position: map.getCenter(),
                        icon: img
                    });
                    google.maps.event.addListener(marker, 'click', (function(marker, i) {
                        return function() {
                            infowindow.setContent(offender_locations[i][1]);
                            infowindow.open(map, marker);
                        }
                    })(marker, i));

                } else {
                    alert("error!");
                }
            });
        }(address, icon_img, i));
    }

    function zoomin() {
        map.setZoom(15);
    };

    function zoomout() {
        map.setZoom(15);
    }
</script>
  

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

Ответ №1:

Попробуйте поместить ваши маркеры в массив, чтобы вы могли посмотреть на них позже.

В начале выполните var markers = [];

Затем после каждого объявления маркера markers.push(marker); .

Комментарии:

1. Привет, Гаузи, не мог бы ты рассказать немного подробнее? Я настоящий новичок в javascript. Куда мне на самом деле поместить массив маркеров? Внутри цикла? И как только я это сделаю, как мне вызвать отдельные маркеры? Спасибо!

2. Извините за поздний ответ. Массив маркеров находится вне цикла (но в пределах области видимости — в рамках той же функции). Чтобы найти отдельные маркеры, вы просто перебираете массив маркеров!

Ответ №2:

Вы также можете использовать object для хранения ваших маркеров или других слоев на случай, если вы захотите получить к ним доступ позже с помощью первичного ключа:

 var markers = {};

markers['car_1'] = marker;

//change the position of 'car_1'
markers['car_1'].setPosition(x,y);

//you also can create much more complex structure like this
marker['car_2'] = {'title': 'Car 1', _ref: marker};

//change the position of 'car_2'
markers['car_2']._ref.setPosition(x,y);
  

Внимание: убедитесь, что ключи вашего объекта (в нашем случае: car_1, car_2) не совпадают (первичный ключ).