使用 GoogleMap 带边界的 CameraPosition
Posted
技术标签:
【中文标题】使用 GoogleMap 带边界的 CameraPosition【英文标题】:CameraPosition with bounds using GoogleMap 【发布时间】:2018-11-02 14:25:22 【问题描述】:我在使用 CameraPosition 时遇到了一些困难,因为我无法进行适当的缩放。 对我来说,适当的缩放将是标记和我当前位置之间的距离。 但是,我设法使用 CameraUpdateFactory 进行了适当的缩放,但我丢失了所有其他属性(方向(始终朝北)和鸟瞰图(45 度视图))。
我在这两者之间保持平衡(没有正确的缩放):
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(current_location)
.zoom(mGoogleMap.getCameraPosition().zoom)
.bearing(location.getBearing())
.tilt(birdEyesAngle)
.build();
还有这个(右缩放,但缺少其他属性):
CameraUpdateFactory.newLatLngBounds(bounds_between_two_markers, 10);
有什么方法可以同时进行正确的缩放和正确的方向/鸟瞰?
希望你能帮忙, 谢谢
【问题讨论】:
【参考方案1】:试试这个:
首先使用newLatLngBounds
方法获取CameraUpdate
对象:
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds_between_two_markers, 10);
我将以下代码放入我的onMapReady()
方法中:
LatLng pos = new LatLng(51.516667, 12.388889);
LatLng pos1 = new LatLng(53.516667, 14.388889);
MarkerOptions markerOptions = setUserMarker(pos);
if(markerOptions != null)
markerOptions.title(campusLocationName);
mMap.addMarker(markerOptions);
LatLngBounds.Builder b = new LatLngBounds.Builder();
b.include(pos);
b.include(pos1);
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(b.build(), 20);
mMap.animateCamera(cu, 10, new GoogleMap.CancelableCallback()
@Override
public void onFinish()
Log.e(TAG, "Start animate onFinish");
CameraPosition cp = new CameraPosition.Builder()
.zoom(mMap.getCameraPosition().zoom)
.target(pos)
.tilt(45.0f)
.bearing(35.0f)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
// mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cp));
@Override
public void onCancel()
Log.e(TAG, "Start animate onCancel");
);
我设备的结果:
使用CancelableCallBack
,您可以像以前一样更改相机位置,但如果您不更改缩放系数,相机会保留旧的缩放系数,您只需将bearing
和tilt
设置为你喜欢。
【讨论】:
由于某些原因它不起作用。它完全忽略了缩放/目标/方位/倾斜,只需要第一个带边界的“animateCamera”。 @FabriceFroehly :: 再次查看代码。这是我在onMapReady()
方法中输入的确切代码,并得到了我显示为屏幕截图的结果。检查代码。有用。 :: 还要检查消息是否显示在 logcat 中。
我使用了你的代码,然后我更新了它并应用了我的 2 LatLng,它有点工作。位置是正确的,但是,因为我每秒都调用一次函数(因为它应该在人开车时进行调整)。因此,相机每秒都在旋转,因为它“重置”了上面的代码在每次调用时重置相机位置。这意味着相机的变焦正确,然后应用鸟瞰 (45°) 并正确旋转,但一秒钟后,它重置旋转和鸟以再次应用它们。每次调用该函数时都会重复一次。
@FabriceFroehly :: 你只需要调用上面的代码一次。这将设置地图位置、缩放、倾斜和方位。如果您只想更改相机位置,只需获取新位置 LatLng pos = new LatLng(lat, lng);
并将其应用到带有 newLatLng()
的地图,如下所示 :: mMap.moveCamera(CameraUpdateFactory.newLatLng(pos));
。这样所有其他设置都将保留。以上是关于使用 GoogleMap 带边界的 CameraPosition的主要内容,如果未能解决你的问题,请参考以下文章