【问题标题】:How to animate a marker smoothly with Google Maps?如何使用 Google 地图平滑地为标记设置动画?
【发布时间】:2011-04-20 03:10:42
【问题描述】:

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

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 位置。

当然,当前的实现在地图放大但不是 缩小后效果很好。

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

【问题讨论】:

    标签: google-maps google-maps-api-3 google-maps-markers


    【解决方案1】:

    是的... api gives you methods 获取地图上所有标记的像素坐标。我会做以下事情:

    获取标记的像素坐标

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

    删除原来的标记

    动画你的假人到新的地方 使用像素值

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

    移除假人

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

    【讨论】:

    • 问题是您只能通过 Latlng 对象定位标记。不能直接设置pizels:/
    • 从像素坐标转换给我同样的问题,我正在尝试解决:谷歌在像素转换方面做得很差
    • 第一个问题可以通过从像素坐标中获取 latlang 来解决,对此有一种方法......但如果你认为转换质量很差,那么没有什么可做的: (
    • 但话又说回来,我认为谷歌首先使用相同的转换函数将标记定位在屏幕上......所以我看不出转换如何不合标准。跨度>
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多