Невозможно импортировать значение геоджона в виде строки на картах Google с помощью Firebase Web - PullRequest
0 голосов
/ 06 мая 2018

Итак, я настроил свою пожарную базу для связи с моим веб-приложением, использующим API Google Maps, и моя цель заключается в следующем: когда пользователь рисует фигуру на карте (многоугольник, линия), я хочу отправить значение geoJson как он передается в базу данных Firebase (в настоящее время отправляет его в виде строки), а затем возвращает его обратно, чтобы он отображался на карте для всех (поскольку он синхронизируется из базы данных Firebase). Моя проблема заключается в том, что, когда я пытаюсь получить данные geoJson и добавить их на карты Google, в строке map.data.addGeoJson(geoJsonString); (geoJsonString = значение geoJson, которое хранится в firebase), я получаю сообщение об ошибке:

Uncaught Jb {сообщение: «не Feature или FeatureCollection», имя: «InvalidValueError», стек: «Ошибка» на новом Jb (https://maps.googleapis.com/m…tatic.com/firebasejs/4.13.0/firebase.js:1:278304)"}

По какой-то причине API Google Maps не принимает значение geoJson, даже если console.log(geoJsonString); возвращает действительное значение geoJson (проверено на http://geojsonlint.com/)

Теперь странная часть заключается в том, что если я пытаюсь импортировать одно и то же значение geoJson вручную (сохраняя значение geoJson в переменной, а затем 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);
      }
 } 
 }

Эта функция обновляет и помещает данные в базу данных

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 случайных геоДжона

enter image description here Я не могу проследить, где проблема. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Обновление: Мне удалось решить эту проблему, проанализировав строку с JSON.parse("retrieved string from firebase"), сохранив ее в переменной и добавив на карту с помощью map.data.addgeoJson(parsed variable).

0 голосов
/ 06 мая 2018

Мы до сих пор не сталкивались с этой проблемой, однако знаем о ней.

Наше предполагаемое решение - использовать GeoFire: библиотеку с открытым исходным кодом для базы данных Firebase Realtime, которая добавляет поддержку геопространственных запросов.

Вы можете найти описание библиотеки здесь: https://firebase.google.com/docs/libraries/

Для библиотеки, поддерживаемой в Интернете: https://github.com/firebase/geofire-js

...