Я в настоящее время на модуле отслеживания пользователей, используя геолокацию карты Google. Я начал кодировать это с 3-х дней назад, я использую реактивные карты для просмотра карты, так как я уже наносил на карту все коды, отображающие мое текущее местоположение и наблюдающие за моим положением, в котором я сейчас нахожусь. Я обнаружил, что когда я выхожу за пределы своего маркера, он не двигается, и я пытаюсь отладить состояние моего лата и долго, функция наблюдения не работает хорошо.
Вопрос: Как сделать движущийся маркер в режиме реального времени без обновления приложения с помощью GPS Android.
Материалы для испытаний :
Мобильный телефон Vivo V9
USB-кабель,
ОС для мобильных телефонов: ОС Funtouch,
Версия Android 8.1 Oreo
Манифест Android:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.network" />
Так как я уже закончил создание функции, я покажу вам, ребята, мои коды, так что другая проблема, имеющая ту же проблему, решит и эту проблему,
Это мое текущее местоположение на моем мобильном телефоне,
Как вы можете видеть в верхней части моей карты Google, мое текущее местоположение или широта и длина моего местоположения.
14.6211748, 121.0138529
Теперь, так как я уже получил свой лат и лонг, используя положение часов, GPS автоматически определяет мой лат и лонг каждый раз, когда двигаешься правильно? Проблема здесь
почему мои латы и лонги не меняются в реальном времени?
Есть ли другая функция для обновления в режиме реального времени lat long?
Теперь, ребята, это мой код для этого,
Мое государство:
this.state = {
currentLocation: {
latitude:0,
longitude:0,
latitudeDelta:0,
longitudeDelta:0
},
updatedLocation: {
latitude:0,
longitude:0,
latitudeDelta:0,
longitudeDelta:0
},
markerPosition: {
latitude:0,
longitude:0,
latitudeDelta:0,
longitudeDelta:0
}
}
Мое асинхронное текущее местоположение
watchID: ?number = null;
async _currentPosition() {
navigator.geolocation.getCurrentPosition((position) => {
//lat and long current
var lat = parseFloat(position.coords.latitude)
var long = parseFloat(position.coords.longitude)
var currentLocationValue = {
latitude:lat,
longitude:long,
latitudeDelta:LATTITUDE_DELTA,
longitudeDelta:LONGTITUDE_DELTA
}
this.setState({currentLocation:currentLocationValue})
this.setState({markerPosition:currentLocationValue})
console.log(currentLocationValue);
},(error) => alert(JSON.stringify(error)),
{enableHighAccuracy: true, distanceFilter: 1, timeout: 1000})
}
Для функции наблюдения положения:
async _updatedPosition() {
this.watchID = navigator.geolocation.watchPosition((position) => {
//lat and long current
var lat = parseFloat(position.coords.latitude)
var long = parseFloat(position.coords.longitude)
var updateLocationValue = {
latitude:lat,
longitude:long,
latitudeDelta:LATTITUDE_DELTA,
longitudeDelta:LONGTITUDE_DELTA
}
this.setState({updatedLocation:updateLocationValue})
this.setState({markerPosition:updateLocationValue})
console.log(updateLocationValue);
},(error) => alert(JSON.stringify(error)),
{enableHighAccuracy: true, distanceFilter: 1, timeout: 1000})
}
Мои компоненты монтируются:
componentDidMount() {
this._currentPosition();
this._updatedPosition();
}
componentWillUnmount() {
navigator.geolocation.clearWatch(this.watchID)
}
Функция My Render:
render() {
return (
<View style={styles.container}>
<MapView
style = {styles.mapcontainer}
region = {this.state.currentLocation}
onRegionChange={this.onRegionChange}
>
<MapView.Marker
coordinate={this.state.markerPosition}>
<View style={styles.radius}>
<View style={styles.marker}/>
</View>
</MapView.Marker>
</MapView>
<Text>
{this.state.updatedLocation.latitude},{this.state.updatedLocation.longitude}
</Text>
</View>
)
}