3

我编写了一个小算法,可以动画标记从一个点到另一个点的移动。该算法在伪代码中如下所示:

lat_delta = new_lat - old_lat;
lng_delta = new_lng - old_lng;

for(alpha=0; alpha < 1; alpha += 0.1) {
  lat = old_lat + (alpha * lat_delta);
  lng = old_lng + (alpha * lng_delta);
  update_marker(lat, lng);
}

完整代码可在http://dev.syskall.com/map/http://dev.syskall.com/map/commute.js 获得

我遇到的问题是,当地图缩小时,动画似乎是“之字形”。话虽如此,当您放大时,动画会更加流畅。

我相信这可能是因为我的动画是基于 lat,lng 坐标而不是屏幕上的像素。当你缩小时,谷歌地图不那么精确,必须以某种方式四舍五入 latlng 位置。

当然,当前的实现在地图放大时还不错,但在缩小时就不那么好了。

有没有办法解决这个问题?

4

1 回答 1

0

是的... API为您提供了获取地图上所有标记的像素坐标的方法。我会做以下事情:

获取标记的像素坐标

在该位置渲染一个虚拟标记

删除原始标记

使用像素值将您的假人动画到新位置

在现场放置一个新的地图标记

移除假人

在开始和结束时,您可以使用 api 从像素中获取 latlng,反之亦然。

于 2010-10-02T09:15:04.113 回答