谷歌地图 LatLngBounds 偏移

Posted

技术标签:

【中文标题】谷歌地图 LatLngBounds 偏移【英文标题】:Google map LatLngBounds offset 【发布时间】:2017-09-04 12:55:41 【问题描述】:

我有这个代码

        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(mainLocation);
        builder.include(userLocation);
        LatLngBounds bounds = builder.build();
        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 0);
        mMap.animateCamera(cu);

这有效,它显示了边界,但我想在屏幕的上半部分显示边界(有没有办法放置偏移 y?)。

(希望这张图能更好地说明问题)

【问题讨论】:

我认为您需要在屏幕上的不同位置显示纬度/经度,对吧? 0.o @FrancisRodrigues 是的,你是对的。 【参考方案1】:

如果我理解正确,您现在得到的是地图居中,这意味着您提供的位置在地图上居中。并且您希望这些位置位于屏幕的上部。

似乎there is not 这样的 API 只允许在底部应用填充。

您可以在屏幕下方为LatLngBounds.Builder 添加一个虚假位置,现在CameraUpdate 也会包含该点,这将移动您在上方的2 个真实点。

【讨论】:

是的,你理解正确我会尝试这样的事情。泰 @MePo 我建议您使用相同的文档。我相信有了这个文档,你可以完成你想要的,就像我也解决了同样的问题一样。 ;)【参考方案2】:

您可以使用来自GoogleMap 对象的the setPadding method。

在您的情况下,您需要添加底部填充:

mMap.setPadding(0, 0, 0, 150);

【讨论】:

【参考方案3】:

也许晚了,但我解决了这个问题。我在调用 animateCamera 之前为地图制作底部填充,并在更新后返回填充。

val heightValue = (Resources.getSystem().displayMetrics.heightPixels * 0.5).toInt()
map.setPadding(0,0,0,heightValue)

 val update = CameraUpdateFactory.newLatLngBounds(bounds,50)

 map.animateCamera(update,object:GoogleMap.CancelableCallback
            override fun onFinish() 
                inUi 
                    map.setPadding(0,0,0,0)
                
            

            override fun onCancel() 
        )

【讨论】:

【参考方案4】:

这是我找到的实现此效果的最佳解决方案。 在为相机设置动画之前强制填充所需的填充,然后立即将填充重置为任何值。

map.setPadding(left, top, right, bottom) // In your example, this will be the only non-zero value.
animateCamera(cameraUpdate) // Trigger the animation
map.setPadding(0, 0, 0, 0) // Reset the padding

【讨论】:

以上是关于谷歌地图 LatLngBounds 偏移的主要内容,如果未能解决你的问题,请参考以下文章

使用谷歌地图将海里转换为给定纬度的经度

缩放和调整谷歌地图V3

访问无偏移的谷歌地图——工具篇

如何在谷歌地图 api V3 中偏移中心点

自动调整缩放以适应谷歌地图中的所有标记

尝试显示谷歌地图时出现“偏移宽度”错误[重复]