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 не работает
После того, как я получу свое текущее местоположение, как я могу узнать название моего текущего местоположения.
Как это исправить?
Разве вы не задавали здесь этот вопрос stackoverflow.com/questions/54176353/…
@Andrew теперь я понял, что мой getCurrentPosition также не работает. Не знаю почему.
Я думаю, вам нужно прочитать документацию о том, как местоположение работает в 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.
Вам следует посмотреть документацию, которая есть в 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?
См. Мое обновление, но учтите, что использование API геокодирования может стоить.
Вот как вы получаете адрес и все, что хотите, из 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);
});
};
Определите: «не работает» Что происходит? Что вы ожидаете?