所以,我设置我的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示例答案 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