[RN] React Native 获取地理位置

 React Native 获取地理位置

 

实现原理:

1、用  navigator.geolocation.getCurrentPosition 获取到坐标信息

2、调用 高德地图 接口,解析位置数据

 

本文所用RN 版本为 0.57.8

 

实现代码如下:

import React, {Component} from 'react';
import {StyleSheet, Text, View} from 'react-native';

export default class TestGeo extends Component {

    state = {
        longitude: '',//经度
        latitude: '',//纬度
        city: '',
        district: '',
        street: '',
        position: '',//位置名称
    };

    componentWillMount = () => {
        this.getPositions();
    };

    getPositions = () => {
        return new Promise(() => {
            /** 获取当前位置信息 */
            navigator.geolocation.getCurrentPosition(
                location => {
                    this.setState({
                        longitude: location.coords.longitude,//经度
                        latitude: location.coords.latitude,//纬度
                    });
                    //通过调用高德地图逆地理接口,传入经纬度获取位置信息
                    fetch(`http://restapi.amap.com/v3/geocode/regeo?key=97c933e33025b3843b40016900074704&location=${this.state.longitude},${this.state.latitude}&radius=1000&extensions=all&batch=false&roadlevel=0`, {
                        method: "POST",
                        headers: {
                            "Content-Type": "application/x-www-form-urlencoded"
                        },
                        body: ``
                    })
                        .then((response) => response.json())
                        .then((jsonData) => {
                            // console.log(jsonData)
                            try {
                                this.setState({
                                    city: jsonData.regeocode.addressComponent.city,
                                    district: jsonData.regeocode.addressComponent.district,
                                    street: jsonData.regeocode.addressComponent.township,
                                    position: jsonData.regeocode.formatted_address,
                                });
                            } catch (e) {

                            }
                        })
                        .catch((error) => {
                            console.error(error);
                        });
                },
                error => {
                    console.error(error);
                }
            );

        })
    }


    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.instructions}>经度:{this.state.longitude}</Text>
                <Text style={styles.instructions}>纬度:{this.state.latitude}</Text>
                <Text style={styles.instructions}>城市:{this.state.city}</Text>
                <Text style={styles.instructions}>区域:{this.state.district}</Text>
                <Text style={styles.instructions}>街道:{this.state.street}</Text>
                <Text style={styles.instructions}>详细位置:{this.state.position}</Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
    },
});

 

附:

高德 接口文档: 

https://lbs.amap.com/api/webservice/summary

 

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/11062409.html

转载请著名出处!谢谢~~

 

posted @ 2019-06-21 03:19  wukong1688  阅读(4252)  评论(0编辑  收藏  举报