当前位置: 首页 > news >正文

Uniapp实现地图获取定位功能

摘要:本文将手把手教你如何在Uniapp项目中集成地图功能、实现定位获取,并解决微信小程序、APP、H5三端的兼容性问题🚀🚀🚀


一、环境准备

  1. 地图平台选择

    • 微信小程序:腾讯地图(强制使用)
    • H5/APP:可自由选择(高德/百度/谷歌地图)
    • 推荐方案:H5/APP使用高德地图(API免费额度高)
  2. 申请开发者密钥

    • 微信小程序:需在微信公众平台申请mapKey
    • 高德地图:前往高德开放平台创建应用并获取Web端KeyAndroid/iOS Key

二、配置地图基础功能

2.1 微信小程序配置

  1. manifest.json配置

    "mp-weixin": {
      "appid": "你的小程序ID",
      "setting": {
        "urlCheck": false
      },
      "usingComponents": true,
      "permission": {
        "scope.userLocation": {
          "desc": "需要获取您的位置以提供地图服务"
        }
      },
      "requiredPrivateInfos": ["getLocation"]
    }
    
  2. 页面中使用map组件

    <map 
      id="myMap" 
      style="width: 100%; height: 300px;" 
      :latitude="latitude" 
      :longitude="longitude"
      show-location
    ></map>
    

2.2 H5/APP配置(以高德地图为例)

  1. manifest.json注入SDK

    "h5": {
      "sdkConfigs": {
        "maps": {
          "amap": {
            "key": "你的高德Web端Key"
          }
        }
      }
    },
    "app": {
      "maps": {
        "amap": {
          "iosKey": "iOS端Key",
          "androidKey": "Android端Key"
        }
      }
    }
    
  2. 通过uni.chooseLocation调用地图

    uni.chooseLocation({
      success: (res) => {
        console.log('位置名称:' + res.name);
        console.log('经纬度:', res.latitude, res.longitude);
      }
    });
    

三、获取用户定位

3.1 基础定位实现

// 获取经纬度
uni.getLocation({
  type: 'wgs84', // 微信小程序必须为wgs84
  success: (res) => {
    this.latitude = res.latitude;
    this.longitude = res.longitude;
  },
  fail: (err) => {
    uni.showToast({ title: '获取定位失败', icon: 'none' });
  }
});

3.2 定位转具体地址(逆地理编码)

// 需配合高德API(H5/APP示例)
import amap from '@/common/amap-wx.js'; // 从高德官网下载SDK

const amapPlugin = new amap.AMapWX({
  key: '你的高德Web端Key'
});

amapPlugin.getRegeo({
  location: `${longitude},${latitude}`,
  success: (data) => {
    console.log('详细地址:', data[0].regeocodeData.formatted_address);
  }
});

四、多平台适配要点

4.1 条件编译处理差异

<!-- 微信小程序使用原生map组件 -->
<!-- #ifdef MP-WEIXIN -->
<map ...></map>
<!-- #endif -->

<!-- H5/APP使用第三方地图 -->
<!-- #ifdef H5 || APP -->
<web-view :src="amapUrl"></web-view>
<!-- #endif -->

4.2 权限配置

  • Android:在manifest.json中添加:

    "android": {
      "permissions": [
        "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
        "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>"
      ]
    }
    
  • iOS:需在manifest.json中勾选Location usage description


五、常见问题及解决方案

问题现象原因分析解决方案
微信小程序地图不显示未配置mapKey在微信公众平台申请并配置mapKey
H5定位失败非HTTPS环境本地开发使用Chrome开启--unsafely-treat-insecure-origin-as-secure
APP返回错误代码LOCATION_FAILED未开启定位权限检查manifest配置并引导用户手动开启权限
逆地理编码返回null未绑定安全域名(H5)在高德控制台添加当前域名白名单

注意点

  1. 统一坐标系:微信小程序使用wgs84,高德地图用gcj02,需注意转换
  2. 错误兜底:定位失败时显示手动选择位置按钮
  3. 性能优化:使用<map>组件的@regionchange事件懒加载标记点

相关文章:

  • 基于muduo+mysql+jsoncpp的简易HTTPWebServer
  • linux wifi driver深度实践之内核编译加载
  • 从零构建CNN:框架与自定义实现对比
  • 本地部署Hive集群
  • 使用RabbitMQ实现流量削峰填谷
  • 数据结构 -图 -基础
  • 软考网络和信息安全哪个好?
  • 【推荐项目】 043-停车管理系统
  • 本地部署资源聚合搜索神器 Jackett 并实现外部访问
  • SQL注入之sqli-labs靶场搭建
  • 点云从入门到精通技术详解100篇-基于超像素分割和点云配准的电力设备红外三维建模与应用(续)
  • 【MySQL_05】语法简述(是语法,不详细介绍各种语句)
  • 【redis】事务
  • Reflect.get和target[key]有何不同?
  • C++学习之QT高级
  • FPGA前端设计适合哪些人学?该怎么学?
  • 越早越好!8 个反直觉的金钱真相|金钱心理学
  • System 类的核心 API
  • Deepseek应用技巧-chatbox搭建前端问答
  • 语音识别-FunASR-docker部署-【超简洁步骤】
  • 特写|银耳种植“北移”到沧州盐山,村民入伙可年增收4万元
  • 大环线呼之欲出,“金三角”跑起来了
  • 新片|《碟中谍8:最终清算》定档5月30日
  • 广西等地旱情缓解,水利部针对甘肃启动干旱防御Ⅳ级响应
  • 布局50多个国家和地区,我国科技型企业孵化器数量全球第一
  • 端午假期购票日历发布,今日可购买5月29日火车票