Google Maps PanTo OnClick
Я пытаюсь панорамировать область на карте при щелчке. script не работает и перезагружается. Возможно, кто-то может увидеть проблему.
Моя функция
function clickroute(lati,long) {
map = google.maps.Map(document.getElementById("map_canvas"));
map.panTo(lati,long)
}
А остальные
var directionDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
geocoder = new google.maps.Geocoder();
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(41.850033, -87.6500523);
var myOptions = {
zoom:10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: chicago
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var address = 'virginia water';
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
}
});
directionsDisplay.setMap(map);
}
function calcRoute() {
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
var request = {
origin:start,
destination:end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}
И мое событие
<a href="" onclick="clickroute(51.433373, -0.712251)">test</a>
Ответы
Ответ 1
Проблема заключается в том, что вы используете map.panTo(latitude,longitude)
, но API карт google использует это: panTo(latLng myLatLng)
, где latLng
- это класс карты google.
попробуйте что-то вроде этого (untested)
function clickroute(lati,long) {
var latLng = new google.maps.LatLng(lati, long); //Makes a latlng
map.panTo(latLng); //Make map global
}
Посмотрите здесь для получения дополнительной информации.
ИЗМЕНИТЬ
Как сказал кто-то, вы не хотите переделать новую карту. Может быть, его проще сделать глобальным?
Ответ 2
panTo принимает объект LatLng как параметры, а не только координаты. Создайте объект LatLng, прежде чем передавать его методу panTo.
function clickroute(lati,long) {
map.panTo(new google.maps.LatLng(lati,long));
return false; //this will cancel your navigation
}
Ваша страница перезагружается, потому что вы не отмените навигационное событие в onClick, которое вы положили в тег привязки. См. Комментарий в коде выше.
И, как другие говорят, выньте переменную map из этой функции и сделайте глобальную карту.
Ответ 3
вы также можете установить новый маркер на лету:
var LatLng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
content: "<h2>Hier wohne ich!</h2>",
map: map,position: results[0].geometry.location
});
map.panTo(LatLng);
Ответ 4
Линия...
map = google.maps.Map(document.getElementById("map_canvas"));
.. на самом деле пытается создать новую карту в #map_canvas Div. Поскольку эта карта уже должна существовать, вам не нужна эта операция присваивания. Просто позвонив
map.panTo(lati,long)
должен работать?
Изменить: Извините, SSRide360 правильный, что должно быть...
map.panTo(new google.maps.LatLng(lati, long));