无法在带有firebase网页的Google地图中将geojson值导入为字符串

时间:2018-05-06 09:52:55

标签: json firebase firebase-realtime-database geojson

所以,我设置我的firebase与我使用google maps api的web应用程序进行通信,我的目标是:当用户在地图上绘制一个形状(polygon,linestring)时,我想发送geoJson值它到firebase(当前以字符串形式发送),然后将其检索回来,以便它显示在地图上供所有人使用(因为它已从firebase数据库中同步)。我的问题是,当我尝试检索geoJson数据并将其添加到谷歌地图上时,在map.data.addGeoJson(geoJsonString);行(geoJsonString =存储在firebase中的geoJson值)我收到错误消息:

  

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)“}

由于某些原因,即使console.log(geoJsonString);返回有效的geoJson值(在http://geojsonlint.com/处检查),谷歌地图api也不接受geoJson值

现在奇怪的是,如果我尝试手动导入相同的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示例

enter image description here 我无法追查问题所在。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

更新:我设法通过使用JSON.parse("retrieved string from firebase")解析字符串,将其保存到变量,然后使用map.data.addgeoJson(parsed variable)将其添加到地图来解决此问题。

答案 1 :(得分:0)

我们仍未面对这个问题,但是,我们已经意识到这一点。

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

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

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