Вы можете сделать это с помощью React-родной геолокации:
https://facebook.github.io/react-native/docs/geolocation.html
Существует уже хороший пример есть о том, как вы можете сделать это:
componentDidMount: function() {
navigator.geolocation.getCurrentPosition(
(position) => {
var initialPosition = JSON.stringify(position);
this.setState({initialPosition});
},
(error) => alert(error.message),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
this.watchID = navigator.geolocation.watchPosition((position) => {
var lastPosition = JSON.stringify(position);
this.setState({lastPosition});
});
}
You теперь имеют начальную позицию (широту и долготу), используйте ее вместо жесткого кодированного значения. Функция watchPosition вызывает обратный вызов успеха всякий раз, когда изменяется местоположение.
В настоящее время я использую это, чтобы найти местные рестораны в нашем приложении.
Обновлено Ответ:
Я использую Genymotion эмулятор для запуска этого. Если вы также собираетесь запустить этот код в Genymotion, убедитесь, что вы установили поддержку Google Play, в противном случае карты native-native не будут работать. Вам не нужно делать этот шаг, если вы используете физическое устройство.
https://github.com/codepath/android_guides/wiki/Genymotion-2.0-Emulators-with-Google-Play-support
Что касается Geolocation, пожалуйста, убедитесь, что вы добавили разрешение ACCESS_FINE_LOCATION в AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
В противном случае вы получите сообщение об ошибке: «Похоже, что приложение Безразлично» t иметь разрешение на доступ к местоположению. "
Также убедитесь, что ваш GPS/Wifi/Data включен, в противном случае ваше устройство не сможет получить ваше текущее местоположение.
var React = require('react');
var ReactNative = require('react-native');
var {
StyleSheet,
PropTypes,
View,
Text,
Dimensions,
TouchableOpacity,
} = ReactNative;
var MapView = require('react-native-maps');
var { width, height } = Dimensions.get('window');
const ASPECT_RATIO = width/height;
// (Initial Static Location) Mumbai
const LATITUDE = 19.0760;
const LONGITUDE = 72.8777;
const LATITUDE_DELTA = 0.01;
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO;
var CustomMap = React.createClass({
getInitialState() {
return {
region: {
latitude: LATITUDE,
longitude: LONGITUDE,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
},
};
},
componentDidMount: function() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
region: {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
}
});
},
(error) => alert(error.message),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
this.watchID = navigator.geolocation.watchPosition((position) => {
const newRegion = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
}
this.onRegionChange(newRegion);
});
},
componentWillUnmount: function() {
navigator.geolocation.clearWatch(this.watchID);
},
onRegionChange(region) {
this.setState({ region });
},
render() {
return (
<View style={styles.container}>
<MapView
ref="map"
mapType="terrain"
style={styles.map}
region={this.state.region}
onRegionChange={this.onRegionChange}
>
</MapView>
<View style={styles.bubble}>
<Text style={{ textAlign: 'center'}}>
{`${this.state.region.latitude.toPrecision(7)}, ${this.state.region.longitude.toPrecision(7)}`}
</Text>
</View>
</View>
);
},
});
var styles = StyleSheet.create({
container: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
justifyContent: 'flex-end',
alignItems: 'center',
},
map: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
},
bubble: {
backgroundColor: 'rgba(255,255,255,0.7)',
paddingHorizontal: 18,
paddingVertical: 12,
borderRadius: 20,
},
});
module.exports = CustomMap;
Запуск выше кода, вы обнаружите, что ваше оригинальное статическое расположение (Mumbai) переписываются с вашим текущим местоположением из устройства через componentDidMount когда getCurrentPosition называется.
Если вам необходимо отслеживать изменения в положении, используйте watchPosition в сочетании с onRegionChange, в противном случае, если вам просто нужно, чтобы получить начальное положение удалить watchPosition шаг.
эй я обновил свой код, вы можете увидеть его как вопрос, но идеальное место по-прежнему не рендеринга – atif
вы используете genymotion?Вы уверены, что ваш GPS включен? Пробовали ли вы консольную запись, чтобы убедиться, что getCurrentPosition возвращает действительную позицию? Я также заметил, что вы не обрабатываете ошибки в вызове getCurrentPosition. Попробуйте добавить «(error) => alert (error.message)», чтобы узнать, получаете ли вы какие-либо ошибки. – Antoni4
Я использую физическое устройство для тестирования. Я удалил часть ошибки, попробовал добавить ее, но не успел. мой код правильный? – atif