Navigator.geolocation.getCurrentPosition не работает в React Native

   constructor(props) {
        super(props);
        this.state = {
          initialPosition: {
                latitude: 0,
                longitude: 0,
                latitudeDelta: 0,
                longitudeDelta: 0,
              }
        }; 
}

      componentDidMount () {
         navigator.geolocation.getCurrentPosition(
            (position) => {
                var lat = parseFloat(position.coords.latitude);
                var long = parseFloat(position.coords.longitude);


                var initialRegion = {
                    latitude: lat,
                    longitude: long,
                    latitudeDelta: LATITUDE_DELTA,
                    longitudeDelta: LONGITUDE_DELTA,
                }

                this.setState({ initialPosition: initialRegion});
            },
            (error) => this.setState({ error: error.message }),
            { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 },
          );

Моя функция getCurrentPosition не работает

После того, как я получу свое текущее местоположение, как я могу узнать название моего текущего местоположения.

Как это исправить?

Определите: «не работает» Что происходит? Что вы ожидаете?

Georgi Georgiev 14.01.2019 11:41

Разве вы не задавали здесь этот вопрос stackoverflow.com/questions/54176353/…

Andrew 14.01.2019 11:54

@Andrew теперь я понял, что мой getCurrentPosition также не работает. Не знаю почему.

Shubham Bisht 14.01.2019 11:59
1
3
6 397
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Место расположения

Я думаю, вам нужно прочитать документацию о том, как местоположение работает в react-native. Здесь есть все методы, которые вам нужны для отслеживания местоположения пользователей.

https://facebook.github.io/react-native/docs/geolocation

getCurrentPosition

Invokes the success callback once with the latest location info.

Это означает, что вы получаете только одно обновление для каждого вызова этой функции. Поэтому, если вы ожидаете, что он будет получать непрерывный поток обновлений, вы не читаете документацию.

watchPosition

Invokes the success callback whenever the location changes.

Это означает, что всякий раз, когда ваше устройство перемещает местоположение, вы будете получать уведомление и можете обновить свое состояние, указав новое местоположение. Однако он обновляется только при перемещении местоположения. Если вы не переместите местоположение, вы не будете получать обновления.

Из этого туториала Вы узнаете, как использовать различные доступные методы определения местоположения. https://hackernoon.com/react-native-basics-geolocation-adf3c0d10112

Обратный поиск геокода

Во-вторых, получение названия текущего местоположения пользователя на основе координат GPS называется обратным поиском геокода. В настоящее время существует несколько пакетов, которые делают это

https://www.npmjs.com/package/@kiwicom/react-native-reverse-geocode

https://www.npmjs.com/package/@binpar/react-native-geocoder

https://www.npmjs.com/package/react-native-geocoder

Некоторые из них находятся в стадии альфа / бета, некоторые давно не обновлялись. Таким образом, ваш пробег может отличаться, однако вы не можете использовать эти пакеты с Expo.

Обратное геокодирование с помощью fetch и google api

Вам следует посмотреть документацию, которая есть в Google. https://developers.google.com/maps/documentation/geocoding/start#reverse

Reminder: To use the Geocoding API, you must get an API key and you must enable billing. You can enable billing when you get your API key (see the Quick guide) or as a separate process (see Usage and Billing).

Эта простая функция должна позволить вам выполнить обратный поиск геокода, вам просто нужно передать широту, долготу и ваш ключ API Google.

async getAddress (latitude, longitude, APIKEY) {
  let url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${latitude},${longitude}&key=${APIKEY}`;
  try {
    let response = await fetch(url);
    let responseJson = await response.json();
    // do what you want with the responseJson here.
    return responseJson
  } catch (error) {
    console.warn(error); 
    // make sure you handle error and return something if an error occurs
  }
}

как я могу это сделать, получив его из ключа API Google?

Shubham Bisht 14.01.2019 13:40

См. Мое обновление, но учтите, что использование API геокодирования может стоить.

Andrew 14.01.2019 14:12

Вот как вы получаете адрес и все, что хотите, из API карты Google.

handleAddress = () => {
        const API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx';
        const {latitude, longitude} = this.props;
        const requestOption = {
            method: 'GET'
        };

        fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=${latitude},${longitude}&key=${API_KEY}`, requestOption)
            .then(res => res.json())
            .then(response => {
                this.setState({
                    address: response.results[0].formatted_address});
            })
            .catch(error => {
                console.warn(error);
            });
    };

Другие вопросы по теме