无法使用 firebase web 在 google 地图中将 geojson 值作为字符串导入

Can't import geojson value as string in google maps with firebase web

因此,我将我的 firebase 设置为与使用 google 地图 api 的网络应用程序通信,我的目标是:当用户在地图上绘制形状(多边形、线串),我想将它的 geoJson 值发送到 firebase(当前将其作为字符串发送),然后将其取回,以便它显示在每个人的地图上(因为它是从 firebase 数据库同步的)。我的问题是,当我尝试取回 geoJson 数据并将其添加到 google 地图时,在行 map.data.addGeoJson(geoJsonString);(geoJsonString = geoJson value that is stored in firebase) 我收到一条错误消息:

Uncaught Jb {message: "not a Feature or FeatureCollection", name: "InvalidValueError", stack: "Error↵ at new Jb (https://maps.googleapis.com/m…tatic.com/firebasejs/4.13.0/firebase.js:1:278304)"}

出于某种原因 google 地图 api 不接受 geoJson 值,即使 console.log(geoJsonString); returns 是一个有效的 geoJson 值(在 http://geojsonlint.com/ 处检查)

现在奇怪的是,如果我尝试手动导入相同的 geoJson 值(将 geoJson 值存储在 var 中,然后 map.data.addGeoJson(geoJsonString);)它工作得很好。

此函数将 firebase 与网络应用程序同步

 function gotData(data){
  paths = data.val();
  if(paths == null){
  console.log("firebase null");
  alert('Database is empty! Try adding some paths.');
  }
  else{
      var keys = Object.keys(paths);
      for(var i = 0; i < keys.length; i++){
      var k = keys[i];
      var geoJsonString = paths[k].geoJsonString;
      console.log(geoJsonString);
      map.data.addGeoJson(geoJsonString);
      }
 } 
 }

该函数在 firebase 中更新和推送数据

function updateData(){
  data = {
  geoJsonString: geoJsonOutput.value
 }
  ref = database.ref('firebasePaths');
  ref.push(data);
}

在这个函数中(用于在本地文件中存储geoJson值),我调用了updateData函数),在地图上绘制了一条新路径后

// Refresh different components from other components.
function refreshGeoJsonFromData() {
map.data.toGeoJson(function(geoJson) {
geoJsonOutput.value = JSON.stringify(geoJson);
updateData();
refreshDownloadLinkFromGeoJson();
 });
}

包含 2 个随机 geoJson 的我的 firebase 示例

我无法追踪问题出在哪里。有什么想法吗?

我们还没有遇到这个问题,但是,我们知道了。

我们的预期解决方案是使用 GeoFire:一个用于 Firebase 实时数据库的开源库,它增加了对地理空间查询的支持。

您可以在此处找到库说明: https://firebase.google.com/docs/libraries/

对于 Web 支持的库: https://github.com/firebase/geofire-js

更新: 我设法解决了这个问题,方法是用 JSON.parse("retrieved string from firebase") 解析字符串,将其保存到一个变量,然后用 [=11] 将它添加到地图=].