Skip to content

Instantly share code, notes, and snippets.

@tschaub
Created November 8, 2012 16:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tschaub/4039916 to your computer and use it in GitHub Desktop.
Save tschaub/4039916 to your computer and use it in GitHub Desktop.
example using animation-frame branch
var layer = new ol.layer.TileLayer({
source: new ol.source.MapQuestOpenAerial()
});
var map = new ol.Map({
center: new ol.Coordinate(0, 0),
layers: new ol.Collection([layer]),
renderer: ol.RendererHint.DOM,
target: 'map',
zoom: 2
});
function quadIn(t, b, c, d) {
return c * (t /= d) * t + b;
}
function quadOut(t, b, c, d) {
return -c * (t /= d) * (t - 2) + b;
}
function quadInOut(t, b, c, d) {
if ((t /= d / 2) < 1) {
return c / 2 * t * t + b;
}
return -c / 2 * ((--t) * (t - 2) - 1) + b;
}
function flyTo(destination, resolution, duration) {
var origin = map.getCenter();
var x0 = origin.x;
var y0 = origin.y;
var dx = destination.x - origin.x;
var dy = destination.y - origin.y;
var resOrigin = map.getResolution();
var maxRes = Math.max(resolution, resOrigin) * 1.05;
var up = maxRes - resOrigin;
var down = maxRes - resolution;
var upTime = duration * (up / (up + down));
var downTime = duration - upTime;
var start = (new Date).getTime();
function stateGenerator() {
var dt = (new Date).getTime() - start;
var more = dt <= duration,
x, y, r;
if (more) {
x = quadInOut(dt, x0, dx, duration);
y = quadInOut(dt, y0, dy, duration);
if (dt < upTime) {
r = quadOut(dt, resOrigin, up, upTime);
} else {
r = quadIn(dt - upTime, maxRes, -down, downTime);
}
} else {
x = destination.x;
y = destination.y;
r = resolution;
}
map.setCenter(new ol.Coordinate(x, y));
map.setResolution(r);
return more;
}
map.render(stateGenerator);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment