Что я пытаюсь сделать:
- Функция в Firebase Functions создает геокоды с адресом
- Есть набор результатов, которые я хочуубедитесь, что находятся в пределах карты
Импорт функций FB и Admin, инициализация
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
Обработка CORS во время тестирования
const cors = require('cors');
const corsHandler = cors({origin: true});
Клиенты Карт Google - google-maps-services-js
const googleMapsClient = require('@google/maps').createClient({
key: 'xxxxxxx'
});
Основная проблема заключается в том, что я хочу запросить базу данных и выполнить проверку бэкэндаесли результаты находятся в пределах карты, отфильтруйте результаты и ответьте.Я не хочу получать все результаты и фильтровать их во внешнем интерфейсе.
exports.myFunction = functions.https.onRequest((request, response) => {
// CORS Container - allow all request origins
corsHandler(request, response, () => {
// Retrieve listings data from DB
return admin.database().ref('/listings').once('value').then(snapshots => {
// Geocode an address.
return googleMapsClient.geocode({
address: '1600 Amphitheatre Parkway, Mountain View, CA'
}, function(err, response) {
if (!err) {
let res = response.json.results;
let lat = res[0]["geometry"]["location"]["lat"];
let lng = res[0]["geometry"]["location"]["lng"];
// Want to get the bounds here
// let bounds = ???
let results = [];
// Filter snapshot results
snapshots.forEach(snapshot => {
// Get snapshot's position
const position = snapshot.val().position;
// Check if snapshot position is within map's bounds
if (bounds.contains(position)) {
results.push(snapshot);
}
});
return response.status(200).send({
"data": bounds
});
}
});
}).catch(e => {
return response.status(422).send({
"data": e
});
});
});
});
Легко получить границы карты и проверить, находится ли объект местоположения в пределах границ внешнего интерфейса:
map.getBounds().contains(marker.getPosition());
Борьба за то, чтобы это работало на бэкэнде с функциями Firebase.