You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Firebase实时数据库提取LiveTracker内的经纬度数据?

Firebase实时数据库公交位置数据解析问题

Firebase实时数据库中,LiveTracker节点下存储着公交路线ID(如2、8),每个路线ID下是Firebase自动生成的ID,其内部包含latitude(纬度)和longitude(经度)数据。当前已获取到如下格式的数据:

{-NCQE5NU7ajW2L57gt1o: {latitude: -122.07730612330596, longitude: 37.41749912586621}, -NCQF6O3vx2NYVdZKD0X: {latitude: -122.083922, longitude: 37.4214938}, -NCQF6kWJPOyLuymJeXz: {latitude: -122.07730453282453, longitude: 37.417496832888055}, -NCQF5afZXRqg1Heb9Oq: {latitude: -122.07730562660478, longitude: 37.417495975114676}, -NCQDoU67-ZjN4kNEyPr: {latitude: -122.07730474508638, longitude: 37.41749751091001}}

尝试以下代码获取经纬度但无法解析:

_dbReference?.child("LiveTracker").child(passedId.toString()).onValue.listen((event) {
          var data = event.snapshot.value;
          print("This is data $data");
          /* _markers.add(Marker(
              markerId: MarkerId(DateTime.now().toIso8601String()),
              position: LatLng(double.parse(event.snapshot.value.toString()),
                  double.parse(event.snapshot.value.toString()))));*/
        });

问题原因

你直接把整个snapshot.value转成字符串解析,这显然不对——因为snapshot.value是一个嵌套的Map结构,每个自动生成ID对应一个包含经纬度的子Map。

修复代码

把snapshot.value转成Map<String, dynamic>,然后遍历每个子项提取经纬度:

_dbReference?.child("LiveTracker").child(passedId.toString()).onValue.listen((event) {
  var data = event.snapshot.value as Map<String, dynamic>?;
  if (data != null) {
    // 清空旧标记(可选,避免重复添加)
    _markers.clear();
    // 遍历每个公交位置数据
    data.forEach((key, value) {
      double lat = (value['latitude'] as num).toDouble();
      double lng = (value['longitude'] as num).toDouble();
      _markers.add(Marker(
        markerId: MarkerId(key), // 用Firebase自动生成的ID作为标记ID,避免重复
        position: LatLng(lat, lng),
      ));
    });
    // 如果是Flutter地图组件,需要调用setState更新UI
    setState(() {});
  }
});

关键说明

  • 把snapshot.value强转为Map<String, dynamic>才能正确遍历每个自动生成的ID节点
  • 经纬度数据在Firebase中可能以num类型存储,需要转成double
  • 用Firebase自动生成的key作为MarkerId,比用时间戳更可靠,避免重复标记
  • 每次获取新数据后清空旧标记,再添加新标记,避免地图上堆积大量无效标记

内容的提问来源于stack exchange,提问作者saurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:01:39