React Native:解决通过Geolocation.getCurrentPosition获取经纬度后通过高德地图转换地理位置不准确的问题

         通过Geolocation.getCurrentPosition获取经纬度后,直接通过高德地图的逆地址编码进行具体的地址转换后,地理位置偏移了690m,在高德地图开发文档寻找解决方法,看到坐标转换最终解决问题。

React Native:解决通过Geolocation.getCurrentPosition获取经纬度后通过高德地图转换地理位置不准确的问题_第1张图片

       因为Geolocation.getCurrentPosition获取的经纬度要进行坐标转换后,用高德地图转地理位置才是准确的。因为本身转给高德的经纬度不是通过高德的方式获取的。

高德地理/逆地理编码api:https://lbs.amap.com/api/webservice/guide/api/georegeo/,

高德坐标转换api:https://lbs.amap.com/api/webservice/guide/api/convert/

代码如下:

getPositions=()=>{
        //获取位置再得到城市先后顺序,通过Promise完成
        return new Promise((resolve, reject) => {

            Geolocation.getCurrentPosition(
                location => {
                    this.setState({
                        longitude: location.coords.longitude,//经度
                        latitude: location.coords.latitude,//纬度
                    });
                    fetch(`https://restapi.amap.com/v3/assistant/coordinate/convert?locations=${this.state.longitude},${this.state.latitude}&coordsys=gps&output=json&key=${config.GaoDeKey.key}`, { method: "GET" })
                        .then(response => response.json())
                        .then((jsonDa) => {
                            let newVar = jsonDa.locations.split(',')
                                this.setState({
                                    longitude: newVar[0],//经度
                                    latitude: newVar[1],//纬度
                                });
                            //访问网络开始
                            fetch('http://restapi.amap.com/v3/geocode/regeo?key='+config.GaoDeKey.key+'&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) => {
                                    try {
                                        //Toast.show(jsonData.result.formatted_address+jsonData.result.sematic_description)
                                        this.setState({
                                            position:jsonData.regeocode.formatted_address,
                                        });
                                    }catch (e) {

                                    }
                                })
                                .catch((error) => {
                                    console.error(error);
                                });
                            //访问网络结束
                        })
                        .catch(error => {
                            reject(error);
                        });


                },
                error => {
                    reject(error);
                    if(error.code==2){
                        ToastAndroid.show('定位失败,请查看手机是否开启GPS定位服务',ToastAndroid.SHORT);
                    }else if(error.code==3){
                        ToastAndroid.show("定位超时,请尝试重新获取定位",ToastAndroid.SHORT);
                    }else{
                        ToastAndroid.show("定位失败:"+error.message,ToastAndroid.SHORT);
                    }
                }, {
                    enableHighAccuracy: false,
                    timeout: 5000,
                    maximumAge: 10000
                }
            );

        })

    }

 

你可能感兴趣的:(React,Native)