services requestauthorization react example react-native geolocation react-native-maps

react-native - requestauthorization - react native maps



navigator.geolocation.watchPosition solo devuelve cada 100 m (1)

Estoy usando navigator.geolocation.watchPosition en mi proyecto nativo de Reaction para pintar una ruta en un mapa mientras el usuario se está moviendo. Noté que la frecuencia de retorno es bastante baja para esta función. Enseñé que era la frecuencia al menos, cuando probé usando el emulador de iOS y el modo "unidad de autopista" en el emulador de gps. Ahora cuando probé con "city run" en su lugar, puedo ver que la frecuencia de retorno de la posición no depende de un intervalo de tiempo, sino de una distancia ... La función está volviendo a su posición una vez cada 100 metros, sin importar cuánto tiempo le tomó a la posición cambiar tanto.

¿Por qué es como este? ¿Es esto un comportamiento esperado? No sé si tiene que ver con el emulador de iOS o con mi código, pero realmente me gustaría que la posición sea más precisa, quiero que vuelva tan a menudo como sea posible.

componentDidMount() { const { region } = this.state; navigator.geolocation.getCurrentPosition( (position) => { this.setState({position}); }, (error) => alert(JSON.stringify(error)), {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} ); this.watchID = navigator.geolocation.watchPosition((lastPosition) => { var { distanceTotal, record } = this.state; this.setState({lastPosition}); if(record) { var newLatLng = {latitude:lastPosition.coords.latitude, longitude: lastPosition.coords.longitude}; this.setState({ track: this.state.track.concat([newLatLng]) }); this.setState({ distanceTotal: (distanceTotal + this.calcDistance(newLatLng)) }); this.setState({ prevLatLng: newLatLng }); } }, (error) => alert(JSON.stringify(error)), {enableHighAccuracy: true, timeout: 20000, maximumAge: 0}); }


Hay una opción que puede configurar que se llama distanceFilter que establece la precisión en metros. Se indica en la documentación de geolocalización pero no se explica qué hace ni el valor predeterminado. Si echas un vistazo al código fuente en github, el valor predeterminado se establece en 100 metros, lo que explica tu comportamiento.

Si quiere una precisión de 1 metro, configure las opciones como: {enableHighAccuracy: true, timeout: 20000, maximumAge: 0, distanceFilter: 1}