Firestore: запрос гео-точек с использованием границ (lessThan / moreThan) - PullRequest
0 голосов
/ 06 июня 2019

Я хочу запросить коллекцию документов по их географическим точкам, используя ограничивающую рамку, взятую с карты. У меня есть границы:

СЕВЕР: 50,730

ВОСТОК: -1.861

ЮГ: 50,700

ЗАПАД: -1.893

И это моя фактическая структура документа (основываясь на его значениях, я ожидаю, что он вернется):

document: {
  d: {
    coordinates: GeoPoint [50.72, -1.87]
  }
}

Это то, что я пытаюсь, но не работает:

db
  .collection('exploreMap')
  .where('d.coordinates.latitude', '<=', NORTH)
  .where('d.coordinates.latitude', '>=', SOUTH)
  // .where('d.coordinates.longitude', '<=', EAST)
  // .where('d.coordinates.longitude', '>=', WEST)
  .limit(80)
  .get()

Он просто возвращает пустой запрос, без ошибок. Я пробовал оба запроса EAST / WEST и NORTH / SOUTH, оба одинаковые результаты.

Я знаю, что не могу выполнить полный запрос коробки, поскольку Firestore не поддерживает .where () для нескольких полей, поэтому выполнение простого запроса широты или долготы было бы хорошо. После этого я могу вручную отфильтровать результаты.

Может кто-нибудь подсказать, пожалуйста, что я делаю не так?

1 Ответ

1 голос
/ 06 июня 2019

Я не нашел способа запросить только долготу или широту. Но если вы создаете GeoPoint с правильной широтой, это работает для меня.

Возвращает все документы из моей коллекции, которые находятся между 35 и 40 широтой:

var NORTH = new firebase.firestore.GeoPoint(40, 0);
var SOUTH = new firebase.firestore.GeoPoint(35, 0);

db
  .collection('10k')
  .where('location', '<=', NORTH)
  .where('location', '>=', SOUTH)

Рабочий образец: https://jsbin.com/yatisun/edit?js,console

Поскольку Firestore упорядочивает географические точки по широте, а затем по долготе, вы не можете фильтровать только по долготе. Вы можете фильтровать только по долготе, если точно знаете точное значение широты, которую вы хотите вернуть (поэтому не диапазон).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...