2016-02-23 2 views
5
-uniqueid1 
      latitude: 30.7188235 
      longitude: 76.810132 
-uniqueid2 
      latitude: 30.7188235 
      longitude: 76.810132 

имеется 1000 таких записей в firebase, я хочу, чтобы найти ближайший к uniqueids конкретный длинный/lat.I начал использовать startAt() и EnDAT(), но не success.How мы выполняем условное предложение и несколько queries.The запроса меня ищет являетсяПоиск рядом LatLng с помощью firebase

SELECT uniqueids from table where (lon-specific_lon)^2+(lat-specific_lat)^2<CONSTANT. 

ответ

12

Что вы ищете, является частью библиотеки Firebase Geofire. Он использует Geohash для умной работы с ограничением Firebase, который вы можете запрашивать только по одному значению.

Geohashes - способ наложения долготы и широты на одно значение, подходящее для запросов диапазона.

Для получения дополнительной информации см. Github repo for Geofire.

+0

большое спасибо, Фрэнк. –

+0

@Frank это кажется лучшим ответом, чем мой собственный. Должен ли я удалить мой, или вы думаете, что есть случаи, когда он может быть полезен? –

+0

Я думал, что ваш интересный, так что, пожалуйста, оставьте его. Тот факт, что есть лучший/более простой ответ, не делает ваш недействительным. OP может подтвердить, что, повышая его (текущая upvote - моя). –

5

Я не верю, что есть встроенный способ сделать это, но один из способов может быть, чтобы создать квадратную сетку и присвоить каждому место для регион - скажем, регион

{x: 2, y: 4}

enter image description here

Тогда вы могли бы вернуть все из мест этого региона и соседних регионов, вернув все в определенном диапазоне, который может быть настроен при вызове данных. Например, если вы хотите, чтобы вернуть все в 1 регионе {x: 2, y: 4}, вы бы вернуть:

{x: 1, y: 3} 
{x: 1, y: 4} 
{x: 1, y: 5} 
{x: 2, y: 3} 
{x: 2, y: 4} // The region you're in right now 
{x: 2, y: 5} 
{x: 3, y: 3} 
{x: 3, y: 4} 
{x: 3, y: 5} 

enter image description here

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

Смежные вопросы