с очень странной проблемой.Google Maps v3 fitBounds непоследовательный зум
A: Один метод моей карты отлично работает. Пользователь устанавливает начальную точку, а конечную точку и карту создаются, а fitBounds.extend (bounds) устанавливает уровень масштабирования соответствующим образом, чтобы охватить маркеры начала/конца на карте.
B: Второй способ заключается в том, что пользователь устанавливает начальную точку, но нет и конечную точку, но в зависимости от других интересов пользователя я получаю для них конечную точку и выводя ее на карту, используя те же функции, что и метод A Однако, после fitBounds.extend (bounds), он устанавливает уровень масштабирования на 4 (уровень страны). Затем мне нужно настроить масштаб.
Не имеет значения, когда в какой-либо момент пользователь выполняет метод A (до или после метода B) ... при его методе A уровень масштабирования правильный. Когда его метод B всегда должен увеличивать уровень 4.
... но все используют одни и те же функции.
Оба метода точно помещают маркеры на карту и точно рисуют маршрут между маркерами. Только по методу A автомасштабирование является правильным, а по методу B - всегда установлено значение 4.
Если пользователь делает A, его право ... тогда B происходит, его масштабирование ... снова B остается увеличенным ... снова A снова возвращается к правильному масштабированию.
Вождение меня здесь!
Мой объект карта "setMap", это глобальная Var
function setMapBounds(start,end) {
mapBounds = new google.maps.LatLngBounds();
mapBounds.extend(start.position);
mapBounds.extend(end.position) ;
setMap.fitBounds(mapBounds) ;
}
function addMarkers(newMarkers) { // an array of map points.
var tempMarkers = [] ;
for (var x=0;x<newMarkers.length;x++) {
var tempLatlon = new google.maps.LatLng(newMarkers[x].lat,newMarkers[x].lon) ;
var tempMarker = createMarker(tempLatlon,newMarkers[x].img,newMarkers[x].title) ;
tempMarkers.push(tempMarker) ;
}
return tempMarkers ;
}
function createMarker(latlon,img,title) {
var marker = new google.maps.Marker({
map:setMap,
position:latlon,
icon: img,
title:title
}) ;
return marker ;
}
// Это метод А - это ВСЕГДА устанавливает масштаб правильно
function setDropoff(dropoffLoc) { //called from: index.js/setPickup(), tab-map.html
geoCoder.geocode({'address': dropoffLoc}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
endLocation = dropoffLoc ;
endLat = results[0].geometry.location.lat() ;
endLon = results[0].geometry.location.lng() ;
// first clear any existing END Markers only.
while(markersArray.length) {
markersArray.pop().setMap(null);
}
endPointSet = 1 ;
endLatlon = new google.maps.LatLng(endLat,endLon) ;
var endMarker = createMarker(endLatlon,'img/red-pin.png','Drop off') ;
markersArray.push(endMarker) ;
setMapBounds(userMarker,endMarker) ;
if (startPointSet == 1) {
drawRoute("DRIVING",startLocation,endLocation) ;
}
}
} else {
error = "Address not found."
}
});
}
// Это метод B , он ВСЕГДА пуширует уменьшение до 4. Он вытаскивается из другой функции, которая проверяет, установлен ли пользователь вручную и конечная точка ... если это так, то добавьте wayPoints между пользовательскими начальными/конечными точками. Если нет, то установите карту в начальной точке пользователя к одной конечной точки интереса
if (endPointSet == 1) { // draw Pickup to START to wayPoints to END
var markers = [
{lat:interests[0].shub_lat,lon:interests[0].shub_lon,img:interests[0].img,title:"Pickup"},
{lat:interests[1].ehub_lat,lon:interests[1].ehub_lon,img:interests[1].img,title:"Dropoff"}
] ;
var points = [interests.shub_address,interests.ehub_address] ;
extraMarkers = addMarkers(markers) ;
drawRoute("BICYCLING",startLocation,endLocation,points) ;
} else {
var markers = [
{lat:interests[0].shub_lat,lon:interests[0].shub_lon,img:interests[0].img,title:"Dropoff"}
] ;
extraMarkers = addMarkers(markers) ;
setMapBounds(userMarker,extraMarkers[0]) ;
drawRoute("WALKING",startLocation,interests[0].shub_address) ;
}
}
Здесь есть являются объекты, передаваемые в setMapBounds из другого места Метод B. Точка старта устанавливается Пользователем ... но нет конечная точка установлена, я выбираю для них одну. Первый объект запускается, второй объект - конец.
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 563, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.49799999999999
k: 27.873196
...
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 602, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.47631678090198
k: 27.9374560148825
...
А вот объекты, передаваемые в setMapBounds из метода A, где пользователь устанавливающий как же начальных и конечных точки. вы можете увидеть точку старта является одинаковым для обоих Method A и B.
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 563, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.49799999999999
k: 27.873196
...
Lh {__gm: Object, gm_accessors_: Object, map: Qk, closure_uid_909815000: 703, gm_bindings_: Object…}
Lf: Object
...
position: pf
D: -82.45717760000002
k: 27.950575
...
Не могли бы вы указать, о чем идет речь? Хотите исправить или объяснить? – bcdan
Ну, и то, и другое. Я ищу исправление и объяснение. Я не понимаю, почему метод B делает неправильное масштабирование при использовании тех же функций, что и метод A, который выполняет правильное масштабирование. – rolinger
Вы пытались использовать координаты в других странах? Вы упомянули, что он идет на уровень увеличения 4, поскольку вы описываете как «уровень страны». Я прочитал в [https://developers.google.com/maps/documentation/javascript/geocoding] документации по геокодированию, что есть смещение области. Возможно, это переносится в 'setBounds'. Не могли бы вы разместить полный сценарий, чтобы я мог получить еще какой-то контекст? – bcdan