Ho scritto una funzione per implementare un "slow pan" con Google Maps API v3. Usa piccoli passi di pan e la risposta precedente, anche se penso che l'implementazione sia un po 'più semplice. È possibile utilizzare una funzione di andamento per f_timeout().
Parametri
mappa: l'oggetto google.maps.Map
endPosition: posizione per eseguire una panoramica a desiderare, google.maps.LatLng
n_intervals: numero di intervalli pan, tanto più più liscia la transizione ma meno performante
T_msec: l'intervallo di tempo totale per il pan lento per completare (millisecondi)
var slowPanTo = function(map, endPosition, n_intervals, T_msec) {
var f_timeout, getStep, i, j, lat_array, lat_delta, lat_step, lng_array, lng_delta, lng_step, pan, ref, startPosition;
getStep = function(delta) {
return parseFloat(delta)/n_intervals;
};
startPosition = map.getCenter();
lat_delta = endPosition.lat() - startPosition.lat();
lng_delta = endPosition.lng() - startPosition.lng();
lat_step = getStep(lat_delta);
lng_step = getStep(lng_delta);
lat_array = [];
lng_array = [];
for (i = j = 1, ref = n_intervals; j <= ref; i = j += +1) {
lat_array.push(map.getCenter().lat() + i * lat_step);
lng_array.push(map.getCenter().lng() + i * lng_step);
}
f_timeout = function(i, i_min, i_max) {
return parseFloat(T_msec)/n_intervals;
};
pan = function(i) {
if (i < lat_array.length) {
return setTimeout(function() {
map.panTo(new google.maps.LatLng({
lat: lat_array[i],
lng: lng_array[i]
}));
return pan(i + 1);
}, f_timeout(i, 0, lat_array.length - 1));
}
};
return pan(0);
};
sfortunatamente, i marcatori occasionalmente (spesso) scompaiono. Sembra che ci siano troppi micro movimenti per una mappa – djdance
Questo funziona brillantemente nel mio caso, dove la maggior parte dei miei marcatori sono già visibili sullo schermo. Ho adattato l'esempio della codepen. Grazie @ErDmKo! –