【问题标题】:Flutter get lat and long value where marker pointer isFlutter 在标记指针所在的位置获取 lat 和 long 值
【发布时间】:2021-02-26 15:38:31
【问题描述】:

我在地图中心显示谷歌地图和简单的标记。我需要做的是我需要在标记所在的位置打印更新的 long 和 lat 值。我只需要打印值。

我的代码

class MapSample extends StatefulWidget {
  @override
  State<MapSample> createState() => MapSampleState();
}

class MapSampleState extends State<MapSample> {
  Completer<GoogleMapController> _controller = Completer();
  LatLng currentPostion;
  bool showMap = false;
  Map<MarkerId, Marker> _markers = <MarkerId, Marker>{};
  int _markerIdCounter = 0;
  Completer<GoogleMapController> _mapController = Completer();

  @override
  void initState() {
    _getUserLocation();
  }

  void _onMapCreated(GoogleMapController controller) async {
    _mapController.complete(controller);
    if (currentPostion != null) {
      MarkerId markerId = MarkerId(_markerIdVal());
      LatLng position = currentPostion;
      Marker marker = Marker(
        markerId: markerId,
        position: position,
        draggable: false,
      );
      setState(() {
        _markers[markerId] = marker;
      });

      Future.delayed(Duration(seconds: 1), () async {
        GoogleMapController controller = await _mapController.future;
        controller.animateCamera(
          CameraUpdate.newCameraPosition(
            CameraPosition(
              target: position,
              zoom: 17.0,
            ),
          ),
        );
      });
    }
  }

  String _markerIdVal({bool increment = false}) {
    String val = 'marker_id_$_markerIdCounter';
    if (increment) _markerIdCounter++;
    print(val);
    return val;
  }

  void _getUserLocation() async {
    var position = await GeolocatorPlatform.instance
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);

    setState(() {
      currentPostion = LatLng(position.latitude, position.longitude);

      showMap = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text(
          'Select Location',
          style: Theme.of(context).textTheme.headline4,
        ).tr(),
      ),
      body: showMap
          ? Container(
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height,
              child: GoogleMap(
                markers: Set<Marker>.of(_markers.values),
                onMapCreated: _onMapCreated,
                initialCameraPosition: CameraPosition(
                  target: currentPostion,
                  zoom: 18.0,
                ),
                myLocationEnabled: true,
                onCameraMove: (CameraPosition position) {
                  if (_markers.length > 0) {
                    MarkerId markerId = MarkerId(_markerIdVal());
                    Marker marker = _markers[markerId];
                    Marker updatedMarker = marker.copyWith(
                      positionParam: position.target,
                    );

                    setState(() {
                      _markers[markerId] = updatedMarker;
                    });
                  }
                },
              ),
            )
          : Center(
              child: SpinKitWave(
                  color: kPrimaryColor, type: SpinKitWaveType.center)),
    );
  }
}

我只需要在标记所在的位置打印更新后的经纬度。它工作正常标记正在改变它的位置,但没有给出价值,或者我不知道我该怎么做。我不想使用可拖动指针选项,所以尝试这种方式。

【问题讨论】:

  • 您想在调用onCameraMove 时打印这些值吗?如果是这样,position.target 的类型为 LatLng,因此您可以访问其上的 latitudelongitude 属性。

标签: flutter dart


【解决方案1】:

正如您所说,您已经可以更改标记的位置,这意味着 updatedMarker 正在按预期工作。可以通过

获取更新后标记的经纬度
int updatedLat = updatedMarker.position.latitude;
int updatedLong = updatedMarker.position.longitude;

您或许可以将更新后的纬度和经度值存储在您将 updatedMarker 分配给数组的 setState() 中。

您可以浏览插件的文档以了解更多信息。

https://pub.dev/documentation/google_maps_flutter_platform_interface/latest/google_maps_flutter_platform_interface/Marker-class.html

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多