uniapp获取当前的地理位置【uni.getLocation(OBJECT)】
uni-app获取当前的地理位置【uni.getLocation(OBJECT)】
在 manifest.json中配置 permission
也可以直接在配置文件中添加:
JavaScript Code复制内容到剪贴板
- /* 小程序特有相关 */
- "mp-weixin" : {
- ...,
- "permission" : {
- "scope.userLocation" : {
- "desc" : "请点击“确定”以获取当前位置信息"
- }
- },
- "requiredPrivateInfos": ["getLocation"]
- },
在需要的页面写:
v2:
JavaScript Code复制内容到剪贴板
- getLocation: async function () {
- // 使用promise 判断地理位置是否授权
- return new Promise((resolve, reject) => {
- uni.getSystemInfo({
- success({
- locationEnabled,
- locationAuthorized
- }) {
- // locationEnabled 判断手机定位服务是否开启
- // locationAuthorized 判断定位服务是否允许微信授权
- if (!locationEnabled && !locationAuthorized) {
- // GPS未开启 与 GPS未给微信授权定位服务
- uni.showModal({
- title: '需要获取地理位置',
- content: 'GPS已开启,GPS未给微信授权定位服务',
- showCancel: false
- });
- reject("GPSnotOpen");
- } else if (locationEnabled && !locationAuthorized) {
- // GPS已开启 与 GPS未给微信授权定位服务
- uni.showModal({
- title: '需要获取地理位置',
- content: 'GPS已开启,GPS未给微信授权定位服务',
- showCancel: false
- });
- reject("GPSauthorization");
- } else if (locationEnabled && locationAuthorized) {
- /*
- GPS已开启 与 GPS已给微信授权定位服务
- 判断微信小程序位置信息是否开启
- */
- uni.authorize({
- scope: "scope.userLocation",
- success() {
- // 微信小程序位置信息已开启
- uni.getLocation({
- success({
- latitude,
- longitude
- }) {
- // latitude; 纬度
- // longitude; 经度
- this.longitude = longitude
- this.latitude = latitude
- resolve({
- latitude,
- longitude
- });
- }
- });
- },
- fail() {
- // 微信小程序位置信息未开启
- uni.getSetting({
- success: (res) => {
- let authStatus = res.authSetting['scope.userLocation'];
- if (!authStatus) {
- uni.showModal({
- title: '需要获取地理位置',
- content: '需要获取您的位置信息,请在设置界面打开相关权限',
- success: (res) => {
- if (res.confirm) {
- uni.openSetting()
- }
- reject()
- }
- })
- } else {
- uni.showModal({
- title: '打卡失败',
- content: '无法获取位置信息',
- showCancel: false
- });
- reject('用户拒绝授权')
- // 拒绝后的回调,这个弹窗应该关掉
- }
- }
- })
- // uni.showModal({
- // title: '需要获取地理位置',
- // content: '微信小程序位置信息未开启',
- // showCancel: false
- // });
- // reject("weixinPositionNotOpen");
- }
- })
- }
- },
- fail(err) {
- let reg = /request:fail/;
- if (reg.test(err.errMsg)) {
- // 无网络
- reject("noNetWork");
- } else {
- // 请求超时'
- reject("requestTimeOut");
- }
- }
- })
- });
- },
v1:
JavaScript Code复制内容到剪贴板
- // 判断地理位置是否授权
- function authorizedPositioning( callBack = ()=>{} ){
- uni.getSystemInfo({ // 获取系统信息
- success(res) {
- let locationEnabled = res.locationEnabled; //判断手机定位服务是否开启
- let locationAuthorized = res.locationAuthorized; //判断定位服务是否允许微信授权
- if (locationEnabled == false || locationAuthorized == false) {
- // GPS 未授权
- callBack("GPSunauthorized");
- } else {
- // GPS 已授权 判断微信定位是否授权
- uni.authorize({
- scope: 'scope.userLocation',
- success() {
- // GPS已授权 微信定位已授权
- uni.getLocation({
- type: 'gcj02',
- success({
- latitude,
- longitude
- }) {
- // latitude; 纬度
- // longitude; 经度
- callBack("Authorized", {
- latitude,
- longitude
- });
- }
- });
- },
- fail() {
- // GPS已授权 微信定位未授权
- callBack("WENXINunauthorized");
- uni.showModal({
- title: '未打开小程序定位',
- content: '找不到您的位置,请开启定位',
- confirmText: '开启定位',
- showCancel: false,
- success: (res) => {
- if (res.confirm) {
- uni.openSetting(); // 打开地图权限设置
- }
- }
- });
- }
- });
- }
- }
- })
- }
- // 使用promise 判断地理位置是否授权
- function authorizedPositioningPromise() {
- return new Promise((resolve, reject) => {
- uni.getSystemInfo({
- success({
- locationEnabled,
- locationAuthorized
- }) {
- // locationEnabled 判断手机定位服务是否开启
- // locationAuthorized 判断定位服务是否允许微信授权
- if (!locationEnabled && !locationAuthorized) {
- // GPS未开启 与 GPS未给微信授权定位服务
- reject("GPSnotOpen");
- } else if (locationEnabled && !locationAuthorized) {
- // GPS已开启 与 GPS未给微信授权定位服务
- reject("GPSauthorization");
- } else if (locationEnabled && locationAuthorized) {
- /*
- GPS已开启 与 GPS已给微信授权定位服务
- 判断微信小程序位置信息是否开启
- */
- uni.authorize({
- scope: "scope.userLocation",
- success() {
- // 微信小程序位置信息已开启
- uni.getLocation({
- success({
- latitude,
- longitude
- }) {
- // latitude; 纬度
- // longitude; 经度
- resolve({
- latitude,
- longitude
- });
- }
- });
- },
- fail() {
- // 微信小程序位置信息未开启
- reject("weixinPositionNotOpen");
- }
- })
- }
- },
- fail(err) {
- let reg = /request:fail/;
- if (reg.test(err.errMsg)) {
- // 无网络
- reject("noNetWork");
- } else {
- // 请求超时'
- reject("requestTimeOut");
- }
- }
- })
- });
- }
在添了es6的语法中,加了弹出框提示:
JavaScript Code复制内容到剪贴板
- // 使用promise 判断地理位置是否授权
- function authorizedPositioningPromise() {
- // 使用promise 判断地理位置是否授权
- return new Promise((resolve, reject) => {
- uni.getSystemInfo({
- success({
- locationEnabled,
- locationAuthorized
- }) {
- // locationEnabled 判断手机定位服务是否开启
- // locationAuthorized 判断定位服务是否允许微信授权
- if (!locationEnabled && !locationAuthorized) {
- // GPS未开启 与 GPS未给微信授权定位服务
- uni.showModal({
- title: '需要获取地理位置',
- content: 'GPS已开启,GPS未给微信授权定位服务',
- showCancel: false
- });
- reject("GPSnotOpen");
- } else if (locationEnabled && !locationAuthorized) {
- // GPS已开启 与 GPS未给微信授权定位服务
- uni.showModal({
- title: '需要获取地理位置',
- content: 'GPS已开启,GPS未给微信授权定位服务',
- showCancel: false
- });
- reject("GPSauthorization");
- } else if (locationEnabled && locationAuthorized) {
- /*
- GPS已开启 与 GPS已给微信授权定位服务
- 判断微信小程序位置信息是否开启
- */
- uni.authorize({
- scope: "scope.userLocation",
- success() {
- // 微信小程序位置信息已开启
- uni.getLocation({
- success({
- latitude,
- longitude
- }) {
- // latitude; 纬度
- // longitude; 经度
- this.longitude = longitude
- this.latitude = latitude
- resolve({
- latitude,
- longitude
- });
- }
- });
- },
- fail() {
- // 微信小程序位置信息未开启
- uni.showModal({
- title: '需要获取地理位置',
- content: '微信小程序位置信息未开启',
- showCancel: false
- });
- reject("weixinPositionNotOpen");
- }
- })
- }
- },
- fail(err) {
- let reg = /request:fail/;
- if (reg.test(err.errMsg)) {
- // 无网络
- reject("noNetWork");
- } else {
- // 请求超时'
- reject("requestTimeOut");
- }
- }
- })
- });
- }
上一篇 创建vue3项目