Сопоставление наблюдаемых угловых объектов с огненной базой - PullRequest
0 голосов
/ 02 апреля 2019

Я ищу правильный способ сопоставления объектов из моей базы данных Firebase в реальном времени через службу Angular в массив объектов.Имеется следующий объект.

1

В настоящее время я пытался использовать AngularFireMap, а также Observable с типом array.

Вот мой интерфейс дляобъект маркера.

export interface IGeometry {
  type: string;
  coordinates: number[];
}

export interface IGeoJson {
  type: string;
  geometry: IGeometry;
  properties?: any;
  $key?: string;
}

export class GeoJson implements IGeoJson {
  type = 'Feature';
  geometry: IGeometry;

  constructor(coordinates, public properties?) {
    this.geometry = {
      type: 'Point',
      coordinates
    };
  }
}

export class FeatureCollection {
  type = 'FeatureCollection';
  constructor(public features: Array<GeoJson>) {}
}

В настоящее время я пытался отобразить объект, который я получаю из БД в реальном времени Firebase, по объекту маркера через .valueChanges(), и он работает хорошо, но мне нужен ключ $ из базы данных дляидентификация маркера, но если я хочу работать с .snapshotChanges(), это не очень хорошо работает, на самом деле я не могу правильно отобразить объекты для получения массива объектов.

Вот моя текущая попыткадля функции в моем Сервисе, чтобы правильно получить все маркеры карты.

public getMarkers(): Observable<GeoJson[]> {
  return this.db.list('/markers')
    .snapshotChanges()
    .pipe(
      map(data => {
        let geoData: GeoJson[];
        data.forEach( singleData => {
          // @ts-ignore
          geoData.push(singleData.payload.val());
        });
        return geoData;
    }));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...