Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用GoogleMap进行带边界的摄影机定位_Android_Google Maps_Zooming_Marker_Bounds - Fatal编程技术网

Android 使用GoogleMap进行带边界的摄影机定位

Android 使用GoogleMap进行带边界的摄影机定位,android,google-maps,zooming,marker,bounds,Android,Google Maps,Zooming,Marker,Bounds,我在使用CameraPosition时遇到了一些困难,因为我无法进行适当的缩放。 对我来说,适当的缩放应该是标记和当前位置之间的距离。 但是,我使用CameraUpdateFactory成功地实现了适当的缩放,但是我丢失了所有其他属性(方向(始终向北看)和鸟瞰(45度视图)) 我在这两者之间保持平衡(没有正确的缩放): 和此(右缩放,但缺少其他属性): 有没有办法同时实现正确的缩放和正确的方向/鸟眼 希望你能帮忙, 谢谢试试这个: 首先使用newLatLngBounds方法获取CameraUpd

我在使用CameraPosition时遇到了一些困难,因为我无法进行适当的缩放。 对我来说,适当的缩放应该是标记和当前位置之间的距离。 但是,我使用CameraUpdateFactory成功地实现了适当的缩放,但是我丢失了所有其他属性(方向(始终向北看)和鸟瞰(45度视图))

我在这两者之间保持平衡(没有正确的缩放):

和此(右缩放,但缺少其他属性):

有没有办法同时实现正确的缩放和正确的方向/鸟眼

希望你能帮忙, 谢谢

试试这个:

首先使用
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
可以像以前一样更改相机位置,但如果不更改缩放因子,相机将保留旧的缩放因子,您只需根据需要设置
方位和
倾斜角度。

尝试以下操作:

首先使用
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
可以像以前一样更改相机位置,但如果不更改缩放因子,相机将保留旧的缩放因子,您只需根据需要设置
方位
倾斜

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