Флаттер Geofire и Firestore читает проблему - PullRequest
0 голосов
/ 03 февраля 2020

Мне нужно запросить информацию о показаниях в пожарном депо, я разработал простое приложение, которое на основе радиуса (максимум 10 км) находит людей, которые находятся ближе всего ко мне. Проблема в том, что из 10 000 зарегистрированных людей, которые используют приложение одновременно, показания пожарного магазина растут в геометрической прогрессии. Я использую плагин flutter_geofire для флаттера. Есть ли способ кешировать эти данные разумно? Теоретически FireStore сохраняет звонки, но я не понял, как долго после различных тестов. Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2020

Я не знаю о кешировании, но несколько общих советов было бы разделить пользователей на разделы. При использовании GPS вы обнаруживаете страну, в которой находится человек, с помощью API обратного геокодирования от Google. Более того, вы можете использовать administrator_area_level_1 , чтобы получить штат / провинцию, или вы можете найти другие близкие города или штаты с помощью Обратное геокодирование Api .

Таким образом, когда пользователь 1 входит в приложение, вы получаете координаты, используете API Google и получаете Страна: Великобритания, Ближний Город: Лондон, Ближайшие города: [Оксфорд, Кембридж, ...].

Затем напишите в firestore.

cities -> UK -> London -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Oxford -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Cambridge -> rendomgeneratedId - {userinfo&coordinates}

Теперь, когда пользователь 2, который живет в Оксфорде, устанавливает радиус на 10 км, приложение получает координаты пользователя 2 -> находит страну пользователя 2, текущий город и близлежащие города. И выполняет поиск в Cloud Firestore с долготой и широтой:

//Search in Oxford
cities.UK.Oxford.rendomgeneratedId.where("longitute", "<", 100) 
cities.UK.Oxford.rendomgeneratedId.where("longitute", ">", 50) 
//same for latitude

//Search in London
cities.UK.London.rendomgeneratedId.where("longitute", "<", 100) 
cities.UK.London.rendomgeneratedId.where("longitute", ">", 50) 

etc.

Я рекомендую использовать пакет Flutter LatLong для расчета пункта назначения 0,5 км от центра:

final Distance distance = const Distance();
final num distanceInMeter = (EARTH_RADIUS * math.PI / 4).round();

final p1 = new LatLng(0.0, 0.0);
final p2 = distance.offset(p1, distanceInMeter, 180);

// LatLng(latitude:-45.219848, longitude:0.0)
print(p2.round());

Flutter LatLong

...