uniapp 地图组件(map)的使用总结

简介: uniapp 地图组件(map)的使用总结

这段时间在开发uniapp的时候使用到map组件


总结一下本次在uniapp中使用map遇到的一些问题


文章分别是基础 定位图标  获取自身经纬度 通过经纬度获取当时城市信息


首先先看成品

b3195a2cef0d4a3eb32b68f80b9a54cf.png


废话不多说,直接开始。


首先引入map组件

<template>
    <view class="content">
      <map style="width: 100%; height: 90vh;" :layer-style='5'  :style="{height:mapheight}" :show-location='true'  :latitude="latitude" :longitude="longitude" :markers="marker" :scale="scale"  @markertap="markertap"   @callouttap='callouttap'>
       </map>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                        latitude:23.106574, //纬度
                        longitude:113.324587,//经度
                        scale:13,//缩放级别
                        bottomData:false,
                        marker: [
                                            {
                                            id:0,
                                            latitude: 23.13065,//纬度
                                            longitude: 113.3274,//经度
                                            iconPath: '',    //显示的图标        
                                            rotate:0,   // 旋转度数
                                            width:20,   //宽
                                            height:30,   //高
                                                //   title:'我在这里',//标注点名
                                            alpha:0.5,   //透明度
                                            callout:{//自定义标记点上方的气泡窗口 点击有效  
                                            content:'天宝大厦',//文本
                                            color:'#ffffff',//文字颜色
                                            fontSize:14,//文本大小
                                            borderRadius:15,//边框圆角
                                            borderWidth:'10',
                                            bgColor:'#e51860',//背景颜色
                                            display:'ALWAYS',//常显
                                            },
                                            },
                                            {
                                                    id:1234597,
                                                    latitude:  23.106574,//纬度
                                                    longitude: 113.324587,//经度
                                                    iconPath: '',    //显示的图标        
                                                    rotate:0,   // 旋转度数
                                                    width:20,   //宽
                                                height:30,   //高
                                            //  title:'我在这里',//标注点名
                                                    alpha:0.5,   //透明度
                                                //      label:{//为标记点旁边增加标签   //因背景颜色H5不支持
                                                //   color:'red',//文本颜色
                                                //      },
                                                    callout:{//自定义标记点上方的气泡窗口 点击有效  
                                                content:'广州塔',//文本
                                                color:'#ffffff',//文字颜色
                                                fontSize:14,//文本大小
                                                borderRadius:15,//边框圆角
                                                borderWidth:'10',
                                                bgColor:'#e51860',//背景颜色
                                                display:'ALWAYS',//常显
                                                },
                                            },
                                            {
                                                    id:2,
                                                    latitude:  23.1338,//纬度
                                                    longitude: 113.33052,//经度
                                                    iconPath: '',    //显示的图标        
                                                    rotate:0,   // 旋转度数
                                                  width:20,   //宽
                                                    height:30,   //高
                                                    alpha:0.5,   //透明度
                                            callout:{//自定义标记点上方的气泡窗口 点击有效  
                                                content:'德隆大厦',//文本
                                                color:'#ffffff',//文字颜色
                                                fontSize:14,//文本大小
                                                borderRadius:15,//边框圆角
                                                borderWidth:'10',
                                                bgColor:'#e51860',//背景颜色
                                                display:'ALWAYS',//常显
                                                },
                                            },
                                                {
                                                    id:3,
                                                    latitude:  23.136455,//纬度
                                                    longitude: 113.329002,//经度
                                                    iconPath: '',    //显示的图标        
                                                    rotate:0,   // 旋转度数
                                                        width:20,   //宽
                                                        height:30,   //高
                                                        alpha:0.5,   //透明度
                                                    callout:{//自定义标记点上方的气泡窗口 点击有效  
                                                    content:'羊城国际商贸中心',//文本
                                                    color:'#ffffff',//文字颜色
                                                    fontSize:14,//文本大小
                                                    borderRadius:15,//边框圆角
                                                    borderWidth:'10',
                                                    bgColor:'#e51860',//背景颜色
                                                    display:'ALWAYS',//常显
                                                    },
                                                },
                                            {
                                                    id:4,
                                                    latitude:  23.224781,//纬度
                                                    longitude: 113.293911,//经度
                                                    iconPath: '',    //显示的图标        
                                                    rotate:0,   // 旋转度数
                                                  width:20,   //宽
                                                    height:30,   //高
                                                    alpha:0.5,   //透明度
                                                callout:{//自定义标记点上方的气泡窗口 点击有效  
                                                    content:'天瑞广场A座',//文本
                                                    color:'#ffffff',//文字颜色
                                                    fontSize:16,//文本大小
                                                    borderRadius:15,//边框圆角
                                                    borderWidth:'12',
                                                    bgColor:'#e51860',//背景颜色
                                                    display:'ALWAYS',//常显
                                                },
                                                },
                                            { 
                                                        id:5,
                                                        latitude:  23.072726,//纬度
                                                        longitude: 113.277921,//经度
                                                        iconPath: '',    //显示的图标        
                                                        rotate:0,   // 旋转度数
                                                width:20,   //宽
                                                    height:30,   //高
                                                    alpha:0.5,   //透明度
                                            callout:{//自定义标记点上方的气泡窗口 点击有效  
                                                    content:'大米和小米儿童康复(广州盈丰)中心',//文本
                                                    color:'#ffffff',//文字颜色
                                                    fontSize:14,//文本大小
                                                    borderRadius:15,//边框圆角
                                                    borderWidth:'8',
                                                    bgColor:'#e51860',//背景颜色
                                                    display:'ALWAYS',//常显
                                                },
                                                },
                                        ],
            }
            },
        onLoad() {
        },
        computed:{
                    mapheight(){
                        let data =''
                        if(this.bottomData){
                            if(this.upTop){
                                data ='50px'
                            }else{
                                data ='200px'
                            }
                        }else{
                            data ='90vh'
                        }
                        return data
                    },
                    coverbottom(){
                        let data =''
                        if(this.bottomData){
                            data ='20rpx'
                        }else{
                            data ='100rpx'
                        }
                        return data
                    }
                },
        methods:{
                //地图点击事件
            markertap(e) {
                console.log("===你点击了标记点===",e)
                },
            //地图点击事件
            callouttap(e){
                console.log('地图点击事件',e)
        }
        }
    }
</script>


得到的样式是这样

7275efe2fd8244839d8bbe9ff7c9863d.png


这里只给了两个回调 有更多需求可以去uniapp中搜索 map | uni-app官网


位图


查了一下官方文档,发现官方文档中并没有关于定位的写法 ,没办法只能自己手写一个了。


大概是这样的

a2f9504032194a03a4567f55dc7ff748.png


<template>
    <view class="page-section page-section-gap map-container">
          <map style="width: 100%; height: 90vh;" :layer-style='5'  :style="{height:mapheight}" :show-location='true'  :latitude="latitude" :longitude="longitude" :markers="marker" :scale="scale"  @markertap="markertap"   @callouttap='callouttap'>
            <cover-view class="cover-view" :style='{bottom:coverbottom}' @click="onControltap">
              <cover-image class="cover-image" @click="play" src="@/static/ditudingwei.png"></cover-image>
              <cover-view>
                  定位
              </cover-view>
          </cover-view> 
      </map>
    </view>
</template>
<script>
  export default {
    data() {
      return {
            latitude:23.106574, //纬度
            longitude:113.324587,//经度
            scale:13,//缩放级别
            bottomData:false,
            marker: [
                      {
                      id:0,
                      latitude: 23.13065,//纬度
                      longitude: 113.3274,//经度
                      iconPath: '',    //显示的图标        
                      rotate:0,   // 旋转度数
                      width:20,   //宽
                      height:30,   //高
                        //   title:'我在这里',//标注点名
                      alpha:0.5,   //透明度
                      callout:{//自定义标记点上方的气泡窗口 点击有效  
                      content:'天宝大厦',//文本
                      color:'#ffffff',//文字颜色
                      fontSize:14,//文本大小
                      borderRadius:15,//边框圆角
                      borderWidth:'10',
                      bgColor:'#e51860',//背景颜色
                      display:'ALWAYS',//常显
                      },
                      },
                      {
                          id:1234597,
                          latitude:  23.106574,//纬度
                          longitude: 113.324587,//经度
                          iconPath: '',    //显示的图标        
                          rotate:0,   // 旋转度数
                          width:20,   //宽
                        height:30,   //高
                      //  title:'我在这里',//标注点名
                          alpha:0.5,   //透明度
                        //      label:{//为标记点旁边增加标签   //因背景颜色H5不支持
                        //   color:'red',//文本颜色
                        //      },
                          callout:{//自定义标记点上方的气泡窗口 点击有效  
                        content:'广州塔',//文本
                        color:'#ffffff',//文字颜色
                        fontSize:14,//文本大小
                        borderRadius:15,//边框圆角
                        borderWidth:'10',
                        bgColor:'#e51860',//背景颜色
                        display:'ALWAYS',//常显
                        },
                      },
                      {
                          id:2,
                          latitude:  23.1338,//纬度
                          longitude: 113.33052,//经度
                          iconPath: '',    //显示的图标        
                          rotate:0,   // 旋转度数
                          width:20,   //宽
                          height:30,   //高
                          alpha:0.5,   //透明度
                      callout:{//自定义标记点上方的气泡窗口 点击有效  
                        content:'德隆大厦',//文本
                        color:'#ffffff',//文字颜色
                        fontSize:14,//文本大小
                        borderRadius:15,//边框圆角
                        borderWidth:'10',
                        bgColor:'#e51860',//背景颜色
                        display:'ALWAYS',//常显
                        },
                      },
                        {
                          id:3,
                          latitude:  23.136455,//纬度
                          longitude: 113.329002,//经度
                          iconPath: '',    //显示的图标        
                          rotate:0,   // 旋转度数
                            width:20,   //宽
                            height:30,   //高
                            alpha:0.5,   //透明度
                          callout:{//自定义标记点上方的气泡窗口 点击有效  
                          content:'羊城国际商贸中心',//文本
                          color:'#ffffff',//文字颜色
                          fontSize:14,//文本大小
                          borderRadius:15,//边框圆角
                          borderWidth:'10',
                          bgColor:'#e51860',//背景颜色
                          display:'ALWAYS',//常显
                          },
                        },
                      {
                          id:4,
                          latitude:  23.224781,//纬度
                          longitude: 113.293911,//经度
                          iconPath: '',    //显示的图标        
                          rotate:0,   // 旋转度数
                          width:20,   //宽
                          height:30,   //高
                          alpha:0.5,   //透明度
                        callout:{//自定义标记点上方的气泡窗口 点击有效  
                          content:'天瑞广场A座',//文本
                          color:'#ffffff',//文字颜色
                          fontSize:16,//文本大小
                          borderRadius:15,//边框圆角
                          borderWidth:'12',
                          bgColor:'#e51860',//背景颜色
                          display:'ALWAYS',//常显
                        },
                        },
                      { 
                            id:5,
                            latitude:  23.072726,//纬度
                            longitude: 113.277921,//经度
                            iconPath: '',    //显示的图标        
                            rotate:0,   // 旋转度数
                        width:20,   //宽
                          height:30,   //高
                          alpha:0.5,   //透明度
                      callout:{//自定义标记点上方的气泡窗口 点击有效  
                          content:'大米和小米儿童康复(广州盈丰)中心',//文本
                          color:'#ffffff',//文字颜色
                          fontSize:14,//文本大小
                          borderRadius:15,//边框圆角
                          borderWidth:'8',
                          bgColor:'#e51860',//背景颜色
                          display:'ALWAYS',//常显
                        },
                        },
                    ],
      }
      },
    onLoad() {
    },
    computed:{
          mapheight(){
            let data =''
            if(this.bottomData){
              if(this.upTop){
                data ='50px'
              }else{
                data ='200px'
              }
            }else{
              data ='90vh'
            }
            return data
          },
          coverbottom(){
            let data =''
            if(this.bottomData){
              data ='20rpx'
            }else{
              data ='100rpx'
            }
            return data
          }
        },
    methods:{
        //地图点击事件
      markertap(e) {
        console.log("===你点击了标记点===",e)
        },
      //地图点击事件
      callouttap(e){
        console.log('地图点击事件',e)
    }
    }
  }
</script>
<style lang='less' scoped>
    .map-container {
    position: relative;
    overflow: hidden;
    .cover-view {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      width: 80rpx;
      height: 80rpx;
      color: #484848;
      background-color: #fff;
      background-size: 120rpx 120rpx;
      background-position: center center;
      position: absolute;
      bottom: 100rpx;
      right: 32rpx;
    }
    .cover-image{
      display: inline-block;
      width: 30rpx;
      height: 30rpx;
    }
    }
</style>


获取自身经纬度


进入页面拿到用户自身的经纬度


在onShow中输入


1.onShow() {
        uni.getLocation({
                geocode:true,
                type: 'wgs84',
                success: (res) => {
                  console.log(res,'获取当前位置')
                },
                address:(res) =>{
                  console.log('address',res)
                }
        });


1d88322464904b7db54c2fe5b8834970.png


需要打开manifest.json

3c343c0ba3dd46c597937645e7508221.png


如果从来没配置过appld请先配置在进行操作

cd40dbb40ab6434485144255aead315c.png


49c6253ea1ef419588b2ad18fc9bfef1.png


然后重新编译就会出现

99410eb94896486693fb3bab312dfe15.png


允许之后就可以拿到经纬度信息8aa0e3bf53974748b26ef8f46f53f71d.png


然后可以将经纬度信息赋值给data中的latitude longitude

  onShow() {
        uni.getLocation({
                geocode:true,
                type: 'wgs84',
                success: (res) => {
                  console.log(res,'获取当前位置')
                  this.longitude =res.longitude
                  this.latitude = res.latitude
                },
                address:(res) =>{
                  console.log('address',res)
                }
        });
    },


通过经纬度 获取当前城市信息


首先需要进入腾讯位置服务 /控制台/应用管理/我的应用/添加key选择webServiceApi

3902590d073b4b678ed12d3ba088d0fe.png


然后去小程序开发管理/开发设置/服务器域名/request合法域名后面新增

https://apis.map.qq.com;


然后下载

https://mapapi.qq.com/web/miniprogram/JSSDK/qqmap-wx-jssdk1.1.zip


引入

498dab650afe4435972b01717e84e166.png


在ohshow中使用

var qqmapsdk
      // 实例化API核心类
      qqmapsdk = new QQMapWX({
        key: '创建的key'
      });
      qqmapsdk.reverseGeocoder({
      location:{
        latitude:this.latitude,
        longitude:this.longitude
      },
      success:(res)=>{
        console.log('reverseGeocoder',res)
      },
      fail:(err)=>{
        console.log('reverseGeocoder',err)
      }
    })


这样就可以通过自身的经纬度获取到当前所在的详细信息


更多地图事件可以查询官网腾讯位置服务 - 立足生态,连接未来


关于地图气泡弹窗在真机不显示或者显示颜色不明显的情况,你可以使用在callout中使用padding


这样就可以显示颜色了


在uniapp中使用地图大概就这些

相关文章
|
28天前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
30 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
129 10
|
2月前
|
数据可视化 大数据 API
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
125 2
|
2月前
|
存储 API 数据库
uniapp APP自动更新组件
uniapp APP自动更新组件
83 1
|
2月前
|
移动开发 编解码 数据可视化
低代码可视化-uniapp SliderRange区间组件-代码生成器
SliderRange区间组件是一种用户界面元素,允许用户通过拖动滑块选择数值范围。组件支持微信小程序、H5和App,具有高度可定制性、响应式设计和多种事件处理功能。适用于价格筛选、音量调节等场景。代码实现包括滑动区域、滑块、事件处理等部分,支持可视化配置步长、颜色等属性。使用时需注意选择合适步长、提供清晰标签和考虑无障碍设计。
40 0
|
6月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
3月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
3月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
4月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
4月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。