uniapp开发小程序解析经纬度获取当前位置信息(腾讯地图二)

这篇具有很好参考价值的文章主要介绍了uniapp开发小程序解析经纬度获取当前位置信息(腾讯地图二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

选择了腾讯地图定位

腾讯地图官网

uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档

具体实践步骤如下:

  1. 申请开发者密钥 申请密钥key
  1. 开通webserviceAPI服务
  1. 下载小程序SDK 腾讯地图小程序文档sdk
  1. 微信后台配置请求request域名 小程序管理后台
uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档
uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档
uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档

详细步骤

1. 下载解压后的 qqmap-wx-jssdk.js文件放到项目中,然后在页面引入使用
[ uni-app中我们使用 qqmap-wx-jssdk.js 这个文件就好(另一个.min.js不管)]
uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档
2.上代码
  1. uni.getLocation方法 负责获取用户所在经纬度;

2.使用腾讯sdk 的reverseGeocoder方法解析经纬度–拿到用户省市区街道信息;


getLocation() {
                var _this = this
                const tMap = new QQMapWX({
                    key: 'Z3PBZ-RIXRM-OB66T-6TPXJ-XGPM6-ZDBY6' //开发者密钥
                });
            //使用 uni.getLocation获取用户所在经纬度
                uni.getLocation({
                    type: 'wgs84',
                    geocode: true,
                    success: (res) => {
                        console.log("获取经纬度成功");
                        const re = _this.$mapChange.wgs84Togcj02(res.longitude, res.latitude)
                        console.log(re)
                        _this.longitude = re[0]
                        _this.latitude = re[1]
                    },
                    fail: () => {
                        console.log("获取经纬度失败");
                    },
                    complete: () => {
                        // 使用腾讯sdk的reverseGeocoder方法 解析经纬度
                        tMap.reverseGeocoder({
                            location: {
                                latitude: _this.latitude,
                                longitude: _this.longitude
                            },
                            success: function(res) {
                                console.log("解析地址成功", res);
                                console.log("当前地址:", res.result.address);
                                //保存缓存
                                uni.setStorage({
                                    key: 'local',
                                    data: res.result.address,
                                    success() {
                                        console.log("用户地址信息已缓存")
                                    }
                                })
                            },
                            fail: function(res) {
                                uni.showToast({
                                    title: '定位失败',
                                    duration: 2000,
                                    icon: "none"
                                })
                                console.log(res);
                            },
                            complete: function(res) { //无论成功失败都会执行
                                console.log('获取定位信息')
                                return
                                uni.openLocation({
                                    latitude: _this.latitude,
                                    longitude: _this.longitude,
                                    success: function() {
                                        console.log('success');
                                    }
                                });
                            }
                        })
                    }
                })
            }

3.为了获取位置信息更加精确,这里自己封装了一个转换wgs84为gcj02方法


export default {
    wgs84Togcj02(lng, lat) {
        if (this.out_of_china(lng, lat)) {
            return [lng, lat]
        }
        //定义一些常量
        //GCJ02 转换为 WGS84
        var that = this;
        const x_PI = 3.14159265358979324 * 3000.0 / 180.0;
        const PI = 3.1415926535897932384626;
        const a = 6378245.0;
        const ee = 0.00669342162296594323;
        let dlat = that.transformlat(lng - 105.0, lat - 35.0);
        let dlng = that.transformlng(lng - 105.0, lat - 35.0);
        let radlat = lat / 180.0 * PI;
        let magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        let sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
        //return [lng * 2 - mglng, lat * 2 - mglat]
    },

    out_of_china(lng, lat) {
        return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
    },

    transformlat(lng, lat) {
        const x_PI = 3.14159265358979324 * 3000.0 / 180.0;
        const PI = 3.1415926535897932384626;
        const a = 6378245.0;
        const ee = 0.00669342162296594323;
        let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(
            lng));
        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
        return ret
    },
    transformlng(lng, lat) {
        const x_PI = 3.14159265358979324 * 3000.0 / 180.0;
        const PI = 3.1415926535897932384626;
        const a = 6378245.0;
        const ee = 0.00669342162296594323;
        let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
        return ret
    }
}

上测试全部代码


<script>
    //引入腾旭地图sdk
    import QQMapWX from '@/utils/qqmap-wx-jssdk.js'
    export default {
        data() {
            return {
                name: '若依移动端框架',
                longitude: '',
                latitude: ''
            }
        },
        onLoad() {
            //拿地址
            this.getMapAddress();
        },
        methods: {
            // #ifdef MP-WEIXIN
            getMapAddress() {
                var _this = this
                uni.authorize({
                    scope: 'scope.userLocation',
                    success() { //1.1 允许授权
                        _this.getLocation();
                    },
                    fail() { //1.2 拒绝授权
                        uni.showModal({
                            content: '检测到您没打开获取信息功能权限,是否去设置打开?',
                            confirmText: "确认",
                            cancelText: '取消',
                            success: (res) => {
                                if (res.confirm) {
                                    uni.openSetting({
                                        success: (res) => {
                                            console.log(res);
                                            _this.getLocation();
                                        }
                                    })
                                } else {
                                    console.log('取消');
                                    return false;
                                }
                            }
                        })
                        return false;
                    }
                })
            },
            getLocation() {
                var _this = this
                const tMap = new QQMapWX({
                    key: 'Z3PBZ-RIXRM-OB66T-6TPXl-XGPM6-ZDBY6' //开发者密钥
                });
            //使用 uni.getLocation获取用户所在经纬度
                uni.getLocation({
                    type: 'wgs84',
                    geocode: true,
                    success: (res) => {
                        console.log("获取经纬度成功");
                        const re = _this.$mapChange.wgs84Togcj02(res.longitude, res.latitude)
                        console.log(re)
                        _this.longitude = re[0]
                        _this.latitude = re[1]
                    },
                    fail: () => {
                        console.log("获取经纬度失败");
                    },
                    complete: () => {
                        // 使用腾讯sdk的reverseGeocoder方法 解析经纬度
                        tMap.reverseGeocoder({
                            location: {
                                latitude: _this.latitude,
                                longitude: _this.longitude
                            },
                            success: function(res) {
                                console.log("解析地址成功", res);
                                console.log("当前地址:", res.result.address);
                                //保存缓存
                                uni.setStorage({
                                    key: 'local',
                                    data: res.result.address,
                                    success() {
                                        console.log("用户地址信息已缓存")
                                    }
                                })
                            },
                            fail: function(res) {
                                uni.showToast({
                                    title: '定位失败',
                                    duration: 2000,
                                    icon: "none"
                                })
                                console.log(res);
                            },
                            complete: function(res) { //无论成功失败都会执行
                                console.log('获取定位信息')
                                return
                                uni.openLocation({
                                    latitude: _this.latitude,
                                    longitude: _this.longitude,
                                    success: function() {
                                        console.log('success');
                                    }
                                });
                            }
                        })
                    }
                })
            }
            // #endif
        }
    }
</script>

效果如下(手机真机测试会很精确,pc端测试不会很精确

uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档

注意: uni.authorize()仅适用于微信小程序端

uniapp小程序获取当前位置,vue,uniapp,uni-app,小程序,javascript,Powered by 金山文档

这样就小程序解析经纬度换取详细地址信息完成了!!!

授权地理位置信息弹窗见我上篇文章文章来源地址https://www.toymoban.com/news/detail-557623.html

到了这里,关于uniapp开发小程序解析经纬度获取当前位置信息(腾讯地图二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni.app开发小程序如何获取当前经纬度、位置信息以及如何重新发起授权定位

    amap-wx.js 文件 (也可去高德官网下载)

    2024年02月16日
    浏览(60)
  • uniapp微信小程序uni.getLocation获取位置(经纬度)之逆地址解析获取城市信息

    前言: 我好像隐隐约约的记得前几个月用uniapp开发微信小程序使用API接口uni.getLocation好像能获取到城市信息,但是现在只能获取到经度、纬度了,然后去看了一下uniapp官网发现仅App端支持......好吧!那可能是我记错了,也没关系,竟然能获取到经度和纬度那我们就使用第三方

    2024年02月10日
    浏览(64)
  • uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码)

    最近在做获取用户当前定位信息的时候,发现uniapp官方提供的uni.getLocation(OBJECT)兼容性并不是特别好,光注意事项都是密密麻麻一大堆,在实际使用场景下,效果并不理想,也不是很稳定。于是便重新封装了一下腾讯地图的一些东西,提高了下兼容度!下边我会把我用的封装

    2024年02月07日
    浏览(66)
  • uniapp微信小程序getLocation获取经纬度报错

    uniapp开发微信小程序时,需要做一个授权位置信息的需求,使用getLocation获取用户当前的经纬度。期间遇到了一个问题老是报这个错误:“getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json” 根据官方文档 https://developers.weixin.qq.com/miniprogram/dev/api/loc

    2024年02月13日
    浏览(61)
  • uniapp使用高德地图地理位置逆解析/将获取到的经纬度转化为地址

    1、在高德登录注册,进行个人或企业开发者认证(个人开发者可以随时升级企业开发者) 高德地图开发aip网址 2、进入控制台,按以下图示操作 添加完成之后把key复制一下。 3、使用uni.request进行请求(用什么框架就这么请求,这里示例的是uniapp),请求地址为:https://rest

    2024年02月08日
    浏览(51)
  • uniapp 开发微信小程序,获取经纬度转化详细地址

    正常开发中,我们通过 uni.getLocation 只能得到经纬度,微信又没有给我们具体的地理位置,这个时候我们可以通过反编译,来获取详细地址。操作如下 第一步:我们先去腾讯地图申请key腾讯地图  在 控制台== 应用管理 == 我的应用 ==创建应用 == 添加key== 除了必填的,勾选Web

    2024年02月04日
    浏览(61)
  • 【小程序】微信小程序获取用户位置,经纬度及逆地址解析

    在针对小程序埋点时,需要获取到用户的位置,uniapp有自带获取位置的方法 uni.getLocation 其中可以获取到经纬度,以及中文地址 address ,但是中文地址仅APP端支持,小程序是用不了的。现在只能拿到经纬度,再通过经纬度逆地址解析,得到中文地址。 提示:以下是本篇文章正

    2024年02月09日
    浏览(61)
  • uniapp实现城市列表选择获取经纬度、附带搜索功能(移动端、微信小程序)

    所用到的技术 腾讯地图微信小程序SDK 高德地图WebServiceAPI服务 APP获取是否授权插件 uview框架(不是必须) 接下来带大家去申请 腾讯地图微信小程序SDK 微信小程序JavaScript SDK 点击下载 JavaScriptSDK v1.2 然后去申请腾讯地图的 key 先创建应用 在添加key 在应用列表中就能看到我们申

    2024年02月11日
    浏览(69)
  • Openlayers获取浏览器当前用户的经纬度位置并定位到对应位置

    专栏目录: OpenLayers实战进阶专栏目录 本篇讲一下Openlayers获取浏览器当前用户的经纬度位置并定位到对应位置,会像高德地图一样触发浏览器左上角位置权限,确认后就可以获取位置并控制地图中心点到用户所在位置。 适用于Edge、firefox和移动端浏览器,pc端的chrome即使允许

    2024年02月08日
    浏览(58)
  • uniapp 在app中获取经纬度

    在uniapp中app端,uni.getLocation获取经纬度会有大概1-2公里的偏差,在实际项目中,有的需求对经纬度的准确度要求比较严格,研究了很多种方式,最终发现使用高德地图api的微信小程序的插件获取的准确性是最准的,偏差最小的。 1.先去高德地图获取key,注意,这里是要获取微

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包