Как движутся маркеры без обновления приложения, используя GPS андроида - PullRequest
1 голос
/ 17 марта 2019

Я в настоящее время на модуле отслеживания пользователей, используя геолокацию карты 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" />

Так как я уже закончил создание функции, я покажу вам, ребята, мои коды, так что другая проблема, имеющая ту же проблему, решит и эту проблему,

Это мое текущее местоположение на моем мобильном телефоне,

My current location

Как вы можете видеть в верхней части моей карты 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>
      )
  }
...