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

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

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

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

首先先看成品 .



首先引入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>


得到的样式是这样



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

定位图标

 

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


<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中输入

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



需要打开manifest.json


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


然后重新编译就会出现


允许之后就可以拿到经纬度信息


然后可以将经纬度信息赋值给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


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

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


然后下载

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


引入


在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

这样就可以显示颜色了

相关文章
|
1月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
34 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
139 10
|
2月前
|
数据可视化 大数据 API
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
130 2
|
2月前
|
存储 API 数据库
uniapp APP自动更新组件
uniapp APP自动更新组件
87 1
|
2月前
|
移动开发 编解码 数据可视化
低代码可视化-uniapp SliderRange区间组件-代码生成器
SliderRange区间组件是一种用户界面元素,允许用户通过拖动滑块选择数值范围。组件支持微信小程序、H5和App,具有高度可定制性、响应式设计和多种事件处理功能。适用于价格筛选、音量调节等场景。代码实现包括滑动区域、滑块、事件处理等部分,支持可视化配置步长、颜色等属性。使用时需注意选择合适步长、提供清晰标签和考虑无障碍设计。
41 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是一个不允许重复元素的集合。