google-maps - Flutter - 拖动标记并获得新位置

标签 google-maps flutter dart geolocation

在 Flutter 中,我有一张 map ,它借助 location 获取设备位置.然后我在Google Maps Flutter的帮助下使用这个位置在谷歌地图中显示标记插件。

代码类似

 child: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: CameraPosition(
          target: LatLng(lat, lng),
          zoom: 5,
        ),
        markers: Set<Marker>.of(
          <Marker>[
            Marker(
              draggable: true,
              markerId: MarkerId("1"),
              position: LatLng(lat, lng),
              icon: BitmapDescriptor.defaultMarker,
              infoWindow: const InfoWindow(
                title: 'Usted está aquí',
              ),
            )
          ],
        ),
        onMapCreated: (GoogleMapController controller) {
          mapController = controller;
        },
      ))

如果位置插件失败或获取错误数据,我需要有重新定位此标记的选项。我使用 draggable: true 来拖动标记,但我需要获取新的纬度和经度以将其保存在数据库中。

所以问题是:使用 draggable 如何获得新的纬度和经度?

最佳答案

如果您允许,我会建议使用不同的方法来解决这个问题。我认为在当前版本的 google maps for Flutter (0.4.0) 中,您没有办法在拖动标记后获得新位置,所以我的解决方案是使用相机位置来移动标记然后使用当前相机位置以获取新坐标。 所以在你的代码中,你可以做这样的事情:

    child: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: CameraPosition(
          target: LatLng(lat, lng),
          zoom: 5,
        ),
        markers: Set<Marker>.of(
          <Marker>[
            Marker(
              draggable: true,
              markerId: MarkerId("1"),
              position: LatLng(lat, lng),
              icon: BitmapDescriptor.defaultMarker,
              infoWindow: const InfoWindow(
                title: 'Usted está aquí',
              ),
            )
          ],
        ),
        onCameraMove: ((_position) => _updatePosition(_position)),            
        onMapCreated: (GoogleMapController controller) {
          mapController = controller;
        },
      ))

然后您可以在每次用户移动相机时设置标记的新状态,并将此坐标用于您需要的任何其他目的:

void _updatePosition(CameraPosition _position) {
    Position newMarkerPosition = Position(
        latitude: _position.target.latitude,
        longitude: _position.target.longitude);
    Marker marker = markers["1"];

    setState(() {
      markers["1"] = marker.copyWith(
          positionParam: LatLng(newMarkerPosition.latitude, newMarkerPosition.longitude));
    });
  }

希望对您有所帮助!

关于google-maps - Flutter - 拖动标记并获得新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55003179/

相关文章:

javascript - map 平移时避免自定义叠加点击事件(谷歌地图 API)

google-maps - react 原生谷歌地图替代品

database - 如何在flutter中从SQLITE表中获取不同记录?

flutter - 如何使用免费且公开的Rapid API并在flutter Application中调用API

android-studio - adb.exe 已停止使用 Android Studio 4.3.1 和 Android 9.+

ios - 使用自动完成 api 获取邮政编码

html - 谷歌地图 API v3 : Change Map Type Event

flutter - Dart/Flutter 中的 AsyncMemoizer

Flutter:将 flavor 配置添加到 Visual Studio

dart - 如何在 Dart 中将字符串转换为小时数?