У меня есть Cloud Firestore Collection (Locations), в которой есть поля GeoPoint, и я хочу сделать запрос на основе местоположения текущего пользователя, чтобы найти близлежащие места.
Похоже, Cloud Firestore еще не может этого сделать, но geofirestore, кажется, жизнеспособный вариант.Я пытаюсь запросить коллекцию Cloud Firestore (Locations) с координатами 34.0103, 118.4962.Тем не менее, я получаю следующую ошибку:
[2019-05-26T19: 28: 26.891Z] @ firebase / firestore :, Firestore (6.0.4): ВНУТРЕННЯЯ НЕПРАВИЛЬНАЯ ОШИБКА:, configureNetworkMonitoring
Вот что я посмотрел:
- Сбор данных (местоположений) загружен в Cloud Firestore корректно
- Облачный Firestore GeoPointсинтаксис и данные верны
- Geoquery не работает
Облачные данные Firestore:
{
city: "Santa Monica",
geopoint: [34.0103, 118.4962],
location_id: "LA_00012",
location_name: "Santa Monica Pier",
state: "CA",
street: "200 Santa Monica Pier,
zip_code: "90401",
}
React Component (Поиск):
// Imports: Dependencies
import React, { Component } from 'react';
import { Button, SafeAreaView, StyleSheet, Text, View } from 'react-native';
import 'firebase/firestore';
import { GeoCollectionReference, GeoFirestore, GeoQuery, GeoQuerySnapshot } from 'geofirestore';
// Screen: Search
class Search extends Component {
constructor (props) {
super(props);
this.state = {
location: null,
errorMessage: null,
};
}
// Get Nearest Locations
getNearestLocations = async () => {
try {
// Create Firestore Reference
const collection = firebase.firestore().collection('locations');
// Query Limit (10)
const limitQuery = collection.limit(10);
// Geo Query
const query = new GeoQuery(limitQuery).near({
center: new firebase.firestore.GeoPoint(34.0103, 118.4962),
radius: 10,
});
query.get().then((value) => {
value.docs.forEach(doc => {
console.log(doc);
});
});
}
catch (error) {
console.log(error);
}
}
render() {
return (
<SafeAreaView style={styles.container}>
<Text>Search</Text>
<Button title="Search" onPress={this.getNearestLocations} />
</SafeAreaView>
);
}
}
// Styles
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
// Exports
export default Search