Я использую Google Maps API 3 для своего приложения.
Итак, что я хочу сделать, это следующее. При загрузке страницы я получу массив позиций в таком формате:
var locations = [
['Bondi Beach', -33.890542, 151.274856, 4],
['Coogee Beach', -33.923036, 151.259052, 5],
['Cronulla Beach', -34.028249, 151.157507, 3],
['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['Maroubra Beach', -33.950198, 151.259302, 1]
];
Сначала я хочу добавить маркер к каждой из этих позиций.
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
Изображение, которое идет на маркер:
var image = new google.maps.MarkerImage("images/truck3.png",
new google.maps.Size(32.0, 37.0),
new google.maps.Point(0, 0),
new google.maps.Point(16.0, 18.0)
);
var shadow = new google.maps.MarkerImage("images/shadow-truck3.png",
new google.maps.Size(51.0, 37.0),
new google.maps.Point(0, 0),
new google.maps.Point(16.0, 18.0)
);
var marker = new google.maps.Marker({
position: map.getCenter(),
map: map,
icon: image,
shadow: shadow,
title: 'Click to zoom'
});
И это должно увеличить все маркеры, которые инициализированы в центре экрана, но только один раз в начале, позже центр не используется, так как пользователь может ловить рыбу, чтобы посмотреть что-то еще на карте.
Я хочу, чтобы маркеры все время двигались, поэтому, может быть, мне нужно добавить какой-нибудь обработчик событий, чтобы все время получать новую позицию?
Затем наступает часть, когда вы нажимаете на маркер, вы увеличиваете масштаб, а маркер все еще движется (получая новую позицию), но теперь мне нужно использовать этот идентификатор, который я отправлю в массив php, чтобы я мог вызвать некоторую функцию php с этим параметром .
После этого, когда пользователь нажимает кнопку сбоку, я хочу иметь возможность перейти к началу моего запроса, а это означает загруженные маркеры в центре экрана.
Часть с щелчком:
google.maps.event.addListener(marker, 'click', function() {
map.setZoom(13);
map.setCenter(marker.getPosition());
google.maps.event.addListener(map, 'center_changed', function() {
// 1 seconds after the center of the map has changed, pan back to the
// marker.
window.setTimeout(function() {
map.panTo(marker.getPosition());
}, 1000);
});
});
}
В общем, я рассказал вам все, чего хочу добиться. Я уверен, что многие из вас сделали то же самое. Это часть кода из многих источников, которые мне нужны, чтобы заставить их работать вместе и добавить несколько небольших новых функций, как я писал выше.
Спасибо
.id
для каждого маркера, вы можете использовать это значение при щелчке маркера для перехода к запросу базы данных. 12.06.2012locations
? Является ли последний индекс серийным номером (1-5)? Вы продолжаете отправлять один и тот же запрос в базу данных? Как обновляется сама база данных, чтобы произошло движение? 14.06.2012var locations
Я буду заполнять его последними позициями часто каждые 10 секунд. База данных постоянно заполняется новыми данными каждые 5-7 секунд, поэтому нам не нужно беспокоиться о базе данных. Это то, что вам нужно, чтобы помочь мне в этом? 14.06.2012trucks[data.results[i].id].speed
точно так же, как идентификатор сохраняется при создании маркера. Разница в том, что когда вы повторно запрашиваете базу данных для обновления позиций маркеров, вы также добавляетеtrucks[data.results[i].id].speed = data.results[i].speed
, которое является значением из базы данных/JSON. 16.06.2012trucks[data.results[i].id].speed = data.results[i].speed;
рядом сsetPosition
? (где маркер обновляется, а не создается)? База корректно обновляет скорость? 17.06.2012