firebase 谷歌Map与FirestoreFlutter:当用户缩小GoogleMap时如何更新地理查询

siv3szwd  于 2023-01-18  发布在  Flutter
关注(0)|答案(1)|浏览(124)

bounty将在6天后过期。此问题的答案可获得+200声誉奖励。Zach Russell正在寻找来自声誉良好来源的答案:我正在寻找一个高层次的解决方案,或至少一般的最佳做法,这样我就可以实现它的自定义解决方案。

我正在使用google_maps_flutter和Firestore/GeoFlutterFire,我认为我的用例非常常见。
1.用户加载Map以其位置为中心的应用程序。初始查询基于其位置的$X半径(基于初始缩放进行硬编码)。
1.用户缩小Map
如何更新此处的查询以显示Map新边界框中的标记?具体来说:
1.如何收听缩放的变化
1.我如何使用这些更改来更新查询?我想我需要计算出Map的宽度/高度来确定LatLngBounds之类的半径,但我很难将这些数据转换为兼容的geo查询。

zc0qhyus

zc0qhyus1#

您可以尝试此解决方案:

static GoogleMapController? mapController;
  int zoomLevel = 3;
  double zoomRadius = 400000; 
  Future<void> getNewRadius() async {
    double zoomvalue = await mapController!.getZoomLevel(); //this will get your zoom level
    int zoomLevel = zoomvalue.toInt();
    if (zoomLevel < 4 && zoomLevel != zoomLevel) {
      zoomLevel = zoomLevel;
      zoomRadius = 400000;
      setState(() {});
    } else if (zoomLevel > zoomLevel) {
      int factor = zoomLevel - zoomLevel;
      zoomLevel = zoomLevel;
      zoomRadius = zoomRadius / (2 * factor);
      setState(() {});
    } else if (zoomLevel < zoomLevel) {
      int factor = zoomLevel - zoomLevel;
      zoomLevel = zoomLevel;
      zoomRadius = zoomRadius * (2 * factor);
      setState(() {});
    }
  }

  // here we're calling the method on zoom in and zoom out of the map so that we can dynamically update the value
  void _onCameraMove(CameraPosition position) async {
    try {
      await radius();
    } catch (_) {}
  }

  void _onMapCreated(GoogleMapController mapController) {
    GoogleMapPageState.mapController = mapController;
  }

相关问题