无法访问 Firestore 快照中的数据以将标记添加到存储在 Firebase 中的 Google 地图

Posted

技术标签:

【中文标题】无法访问 Firestore 快照中的数据以将标记添加到存储在 Firebase 中的 Google 地图【英文标题】:Can't access to data in firestore snapshot to Add Markers to Google Maps stored in Firebase 【发布时间】:2021-06-15 09:26:27 【问题描述】:

我需要帮助访问 Firebase Firestore 快照中的数据,我需要纬度和经度。我在数据库和 Geopoint 中都有这两个字段。我可以在 console.log 中看到数据,但我无法访问单个值。到目前为止,我在这里尝试了不同的方法,使用 doc.latitude 或 doc.longitude 我没有收到错误,但也无法检索数据。

function initialize() 
    var latlng = new google.maps.LatLng(18.465733327729314, -69.93029399778331);
    var myOptions = disableDefaultUI: true, zoom: 9, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP ;
    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    db = firebase.firestore();

    db.collection("GranSantoDomingo").get().then((querySnapshot) => 

    querySnapshot.forEach((doc) => 
        console.log(doc.id, "=>", doc.data());

        var marker = new google.maps.Marker(
                position: lat: parseFloat(doc.latitude), lng: parseFloat(doc.longitude),
                map: map,
            );
    
    
    );
);


系统不让我发图,但是数据结构是这样的:


     "location":"Geopoint(18.7611489,-69.0386113)",
     "sector":"EL SEIBO I  ",
     "calle":"Av. MANUELA DIEZ ( EN LA GERENCIA)",
     "latitude":"18.7611489",
     "longitude":"-69.0386113"
  

【问题讨论】:

我的猜测是您试图在定义和填充它的回调之外访问marker。数据库中的数据只能在回调内部的代码中使用,或者从那里调用。请参阅***.com/questions/64654873/…、***.com/questions/52488087/… 以及来自***.com/… 的更多信息 【参考方案1】:

知道了!获取元素的正确方法:

    function initialize() 
    var latlng = new google.maps.LatLng(18.465733327729314, -69.93029399778331);
    var myOptions = disableDefaultUI: true, zoom: 9, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP, zoomControlsEnabled: true,
                    LocationEnabled: true,
                    LocationButtonEnabled: true, ;
    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    db = firebase.firestore();

    db.collection("GranSantoDomingo").get().then((querySnapshot) => 

    for (i = 0; i < querySnapshot.docs.length; i++)         
        var Latitude = (querySnapshot.docs[i].data().latitude);
        var Longitude = (querySnapshot.docs[i].data().longitude);

        var marker = new google.maps.Marker(
                position: lat: parseFloat(Latitude), lng: parseFloat(Longitude),
                map: map,
                
            );   
    
);


【讨论】:

以上是关于无法访问 Firestore 快照中的数据以将标记添加到存储在 Firebase 中的 Google 地图的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中的Firestore快照侦听器数据重复问题

使用 Firestore 清理快照

在 Flutter 中捕获云 Firestore 文档快照错误

Flutter:将firestore快照转换为streambuilder中的列表

如何从 Vuex 商店中删除 Firestore 快照侦听器

Flutter:Firebase 身份验证和 Firestore 快照流