2015-02-26 4 views
1

Я пытаюсь извлечь все элементы из базы данных GeoFire при перемещении. Например: при ходьбе я хочу получить в реальном времени места вокруг меня (перемещение или не перемещение).GeoFire извлекает все запросы в пределах диапазона при перемещении.

Если я использую следующий код:

var geoQuery = geoFire.query({ 
      center: [52.35500, 4.931000], 
      radius: 0.1 //kilometers 
}); 

var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) { 
      console.log(key + " entered query at " + location + " (" + distance + " km from center)"); 
     }); 

я получаю только обновление, когда ключи меняются позиции (и вводят запрос). Есть ли возможность извлекать все элементы в определенном диапазоне как своего рода снимок? А оттуда монитор в реальном времени?

Я мог бы, конечно, запрашивать всю базу данных, а затем использовать

GeoFire.distance(location1, location2) 

Но это выглядит как очень дорогой вариант.

ответ

2

Вы можете позвонить GeoQuery.updateCriteria(newQueryCriteria), чтобы обновить центр запроса при перемещении.

Обратите внимание, что вы, вероятно, захотите зарегистрировать обратный вызов key_exited.


Отъезд GeoFire API Reference

+1

Проблема в том, что все еще не будут отображаться существующие СУЩЕСТВУЮЩИЕ клавиши. Будет зарегистрирован только новый ключ или ключ, который изменит позицию. Моя цель: получить все ключи в определенном диапазоне на основе их последней позиции относительно моего геоинформатора. – swennemen

+1

Я не уверен, что вы подразумеваете под этим. Когда исходное состояние запроса GeoFire загружается, все ключи в радиусе «вводят» запрос. Вы можете использовать 'geoQuery.on (« ready », callback)'. Из документов: * «' ready »срабатывает один раз, когда исходное состояние этого запроса загружается с сервера. Событие' ready' будет срабатывать после того, как будут запущены все другие события, связанные с загруженными данными. 'Ready' снова выстрелится каждый раз вызывается «updateQuery()», после того как все новые данные загружены и все другие новые события были запущены ». * Вы можете нажать эти ключи на массив/объект и сохранить полный список. –

+1

Я, вероятно, сейчас начинаю большой нуб и делаю что-то глупое. Спасибо, что нашли время. Но я не могу найти способ отображения начальных ключей, если я добавляю новые ключи или клавиши смены, все работает нормально. Если у меня есть база данных с 10 ключами с координатами gps, которые не перемещаются. Я хочу отобразить эти 10 ключей в заданном диапазоне (данный в моем запросе). С key_exited и key_entered я могу отображать только изменения, я хочу также отображать недвижные клавиши. – swennemen

0

Вам не нужно запрашивать всю базу данных. Вы можете хранить свои места в переменной и вычислять новые расстояния, когда ваша текущая позиция (центр запросов) изменяется.

private places: any; 

var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) { 
    this.places.push({ key, location, distance }); 
}); 

var onKeyExitedRegistration = geoQuery.on("key_exited", function(key, location, distance) { 
    this.places = this.places.filter(place => place.key !== key); 
}); 

updatePlacesDistance(currentLocation) { 
    this.places.map(place => { 
    place.distance = GeoFire.distance(currentLocation, place.location); 
    }); 
}