更改谷歌地图的旋转轴

Posted

技术标签:

【中文标题】更改谷歌地图的旋转轴【英文标题】:Change Google Map's axis of rotation 【发布时间】:2020-01-22 09:10:18 【问题描述】:

我在 android 应用中使用 Google Map API 并尝试旋转地图。我已经通过改变方位值来做到这一点,但问题是它围绕屏幕中心旋转。

CameraPosition bottomPos = new CameraPosition.Builder()
                    .bearing(bearing)
                    .build();

mainMap.animateCamera(CameraUpdateFactory.newCameraPosition(bottomPos));

我想改变它的旋转轴,让它围绕屏幕底部的一个点旋转

有没有改变地图旋转轴的功能?

【问题讨论】:

请查看答案更新。 【参考方案1】:

无论如何,您可以使用这样的解决方法 - 通过创建两倍宽和两倍高的 MapView (MapFragment) 并使用边距将其位置与底部中心对齐,就像在图上一样,将地图旋转中心点移动到屏幕底部下面:

在这种情况下,默认情况下:

CameraPosition bottomPos = new CameraPosition.Builder()
                    .bearing(bearing)
                    .build();

mainMap.animateCamera(CameraUpdateFactory.newCameraPosition(bottomPos));

您的mainMap 将围绕屏幕底部的中心旋转。

更新:

您也可以使用获取当前地图中心屏幕坐标,然后更改y 坐标并获取新的屏幕中心。类似的东西:

...
CameraPosition bottomPos = new CameraPosition.Builder()
                    .bearing(bearing)
                    .build();

mainMap.moveCamera(CameraUpdateFactory.newCameraPosition(bottomPos));

LatLng mapCenter = mainMap.getCameraPosition().target;
Projection projection = mainMap.getProjection();
Point centerPoint = projection.toScreenLocation(mapCenter);

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int displayHeight = displayMetrics.heightPixels;

centerPoint.y = centerPoint.y - displayHeight / 2;  // move center down 

LatLng newCenterPoint = projection.fromScreenLocation(centerPoint);

mainMap.animateCamera(CameraUpdateFactory.newLatLngZoom(newCenterPoint, zoom));
...

【讨论】:

以上是关于更改谷歌地图的旋转轴的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 3 原生谷歌地图限制地图移动/拖动/旋转选项

如何使用谷歌地图 api v3 旋转地图方向

将谷歌地图北转换为磁北

在谷歌地图 api v3 上旋转 .gif 图像?

在谷歌地图v2 android中同时旋转标记组的动画

当用户点击地图图钉时动态更改图标图像文件:谷歌地图