使用 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,您可以像以前一样更改相机位置,但如果您不更改缩放系数,相机会保留旧的缩放系数,您只需将bearingtilt设置为你喜欢。

【讨论】:

由于某些原因它不起作用。它完全忽略了缩放/目标/方位/倾斜,只需要第一个带边界的“animateCamera”。 @FabriceFroehly :: 再次查看代码。这是我在onMapReady() 方法中输入的确切代码,并得到了我显示为屏幕截图的结果。检查代码。有用。 :: 还要检查消息是否显示在 logcat 中。 我使用了你的代码,然后我更新了它并应用了我的 2 LatLng,它有点工作。位置是正确的,但是,因为我每秒都调用一次函数(因为它应该在人开车时进行调整)。因此,相机每秒都在旋转,因为它“重置”了上面的代码在每次调用时重置相机位置。这意味着相机的变焦正确,然后应用鸟瞰 (45°) 并正确旋转,但一秒钟后,它重置旋转和鸟以再次应用它们。每次调用该函数时都会重复一次。 @FabriceFroehly :: 你只需要调用上面的代码一次。这将设置地图位置、缩放、倾斜和方位。如果您只想更改相机位置,只需获取新位置 LatLng pos = new LatLng(lat, lng); 并将其应用到带有 newLatLng() 的地图,如下所示 :: mMap.moveCamera(CameraUpdateFactory.newLatLng(pos));。这样所有其他设置都将保留。

以上是关于使用 GoogleMap 带边界的 CameraPosition的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式获取带边界的数据

(Android) 使用地图标记创建边界框并在 Google Map V2 中获取其宽度

带边界的 MimeMultipart 消息转储

Google Map中的瓦片

带边界半径的多线圆角

为什么我不能在单词边界旁使用带重音符号?