【问题标题】:How can I have a smooth animated move between 2 Google Maps locations?如何在 2 个 Google 地图位置之间进行流畅的动画移动?
【发布时间】:2011-01-07 16:16:12
【问题描述】:

在 Google 地图中从一个标记单击到另一个标记时,如果两个标记都在初始地图视图中,则地图屏幕会平滑移动,但如果其中一个标记不在屏幕上,则会跳转。

我正在尝试设置一张地图,该地图在主地图区域内有多个位置,但有一个位于“屏幕外”。我有一个路标图标,指向初始地图区域内更远的位置,我希望在单击时平滑滚动到屏幕外位置(以便更好地了解它的相对位置)。我在 Maps API 中找不到任何可以让我这样做的东西。

我可以缩小、移动然后再次放大,但这看起来有点不协调。我是否遗漏了 API 中的某些内容,或者有人有什么建议吗?

【问题讨论】:

    标签: google-maps


    【解决方案1】:

    很遗憾,我认为这是不可能的(如果 Google 没有做出改变)。来自v3 API referencepanTo

    将地图的中心更改为给定的 LatLng。如果变化小于地图的宽度和高度,则过渡将平滑动画。

    这意味着如果该更改不小于地图的尺寸​​,则过渡将不会平滑动画。其他平移方法类似。

    您可以尝试分多个步骤移动,但这有点麻烦,我怀疑结果会很差。

    对不起,这不是很有帮助(我有同样的问题)。

    【讨论】:

    • 是的,使用多个步骤或自己编写 pan 的结果很差。往往会出错的是,要么你最终平移的速度比获取瓷砖的速度快,这让你在空白灰色上毫无意义地平移,或者你必须比 panTo() 在范围内时平移得慢得多,这意味着它当需要平移很长的距离时,需要花费不可接受的长时间。注意:多次调用 .panTo() 不会排队。第二个调用会中断当前正在进行的任何平移并替换它。
    • 是的,尝试了多个卷轴,看起来不太好。最后,当另一个标记出现在屏幕上时,我决定缩小并平移。看起来还不错 (tinyurl.com/ye46vy5),而且比突然跳跃效果更好。
    • 为什么不进行动画缩小,直到两个位置都可见,然后平移原生动画?编辑:事实上有人在 2012 年提出了建议:stackoverflow.com/a/816132/339872
    • 注:我提供的解决方案链接不再有效。
    【解决方案2】:

    如果您使用的是 Gmaps API V2,那么您可以使用 panBy() 方法非常轻松地实现平滑的动画移动。您必须使用 fromLatLngToContainerPixel() 方法来查找要平移的像素数量。

    这是一段代码:

    var newLoc = map.fromLatLngToContainerPixel(new GLatLng(lat, lng));
    map.panBy(new GSize( newLoc.x, newLoc.y ));
    

    但是,我想做的是在地图 API V3 中实现相同的功能,但遗憾的是 fromLatLngToContainerPixel() 方法不再像以前那样工作了:(

    【讨论】:

    • 你可以使用 map.getBounds();相反,从调用 bounds.getSouthWest() 和 bounds.getNorthEast() 获取 4 个角的纬度/经度。
    【解决方案3】:

    对我来说,这种方法有效,但我使用的是 Google Maps API v2。

    LatLng latLng = new LatLng(lat,lng);
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, ZOOM_FACTOR));
    

    这会将相机从当前位置动画到新位置。

    【讨论】:

    • 帮助!谢谢!
    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多