【问题标题】:如何在谷歌地图上获得地图旋转?
【发布时间】:2021-04-29 07:09:12
【问题描述】:

我正在尝试获取地图旋转(方位),但无法使用地图控制器找到它。

目前使用 google_maps_flutter:^1.1.1 和 flutter:1.22

【问题讨论】:

    标签: flutter google-maps-flutter


    【解决方案1】:

    找到它:CameraPosition 有方位:

     controller.animateCamera(
                CameraUpdate.newCameraPosition(
                  CameraPosition(
                      bearing: location.heading.value,
                      target: LatLng(location.latitude ?? 51.4,
                          location.longitude ?? 4.4),
                      zoom: 18),
                ),
    

    【讨论】:

    • 你从哪里得到这个location对象?是来自@Hrvoje Čukman 建议的地理定位器吗?
    【解决方案2】:

    您可以通过使用此geolocator 插件来做到这一点,然后您可以通过以下方式获得您的职位:

    Position position = await Geolocator.getCurrentPosition();
    

    然后更新地图:

    controller.animateCamera(
        CameraUpdate.newCameraPosition(
          CameraPosition(
            target: LatLng(position.latitude, position.longitude),
            zoom: 16,
            bearing: position.heading,
          ),
        ),
      ),
    

    【讨论】:

    • 我认为您的意思是使用地理定位器获取用户的标题。但我打算只获取地图的摄像头航向,以便在用户旋转地图时获得不同的航向。
    【解决方案3】:

    其实我找到了我要找的东西。 GoogleMap 构造函数上有 onCameMove 回调,它接收当前的 CameraPosition 作为其参数。它具有方位、目标、倾斜和缩放字段。

    这样我可以随时了解地图方位的变化。

    PS:该函数在用户移动地图时重复执行,不应执行昂贵的操作。

    【讨论】:

      【解决方案4】:

      您可以在您的 GoogleMaps 库中的 CameraPosition 函数的属性中找到它。

      _googleMapController!.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
              target: LatLng(cLoc.latitude!, cLoc.longitude!),
              bearing: cLoc.heading!,
              tilt: 30,
              zoom: 18,
            )))
      

      您也可以通过location.onLocationChanged.listen((LocationData cLoc) {} 拨打电话

      就是这样。

      【讨论】:

        【解决方案5】:

        您可以通过以下步骤获取实时更新的方位:

        使用以下方法监听位置变化:

        double mainBearing = 15.0;
        location.onLocationChanged.listen((locationLib.LocationData cLoc) {
          //You can get the bearing of current location by using
          mainBearing =  cLoc.heading
        
          //Or you can do newCameraPoistion here with new bearing
           _controller.animateCamera(
              CameraUpdate.newCameraPosition(
                CameraPosition(
                  target: LatLng(cLoc.latitude, cLoc.longitude),
                  zoom: zoomCamera,
                  bearing: cLoc.heading,
                ),
              ),
            );
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-20
          • 2016-12-07
          • 1970-01-01
          • 2012-08-12
          • 2014-08-25
          • 2014-08-03
          相关资源
          最近更新 更多