前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序map切换不同的标记点

小程序map切换不同的标记点

作者头像
算法与编程之美
发布2021-11-23 11:04:57
7970
发布2021-11-23 11:04:57
举报

1 问题

如何利用小程序的自定义组件实现map切换不同的标记点

2 方法

  1. 创建一个组件mapchart

图中的mapchart就是一个自定义组件,自定义组件为了规范通常放在conponents里。

在map页面的json文件里引用组件

代码语言:javascript
复制

{
 "usingComponents": {
   "mapchart":"/components/mapchart/mapchart"
 },
}

引用后就可以在wxml文件里使用该自定义组件。

代码语言:javascript
复制
给自定义组件定义方法和属性
mapchart.wxml
<view>
   <map id="map"
   longitude="{{longitude}}"
   latitude="{{latitude}}"
   scale="15"
   controls="{{controls}}"
   bindcontroltap="controltap"  
   bindcallouttap="test"
   markers="{{markers}}"
   bindmarkertap="markertap"
   bindregionchange="regionchange"
   show-location
   style="width: 100%; height: 1414.5rpx;"  
   enable-overlooking="true" enable-building="true"
   enable-3D="true"
   show-scale="true">
   </map>
 </view>mapchart.js
// components/mapchart/mapchart.js
Component({
 /**
  * 组件的属性列表
  */
 properties: {
   markers: Array,
   polyline: Array,
   latitude: Number,
   longitude: Number,
   tabs: Array,
   datalist:Array,
   bindmarkertap:Array,
   scale:Number
 },
 /**
  * 组件的初始数据
  */
 data: {
   datalist: [],
 },
 /**
  * 组件的方法列表
  */
 methods: {
   bindcallouttap: function (e) {
     console.log("头上文字被点击", e)
   },
   test: function (event) {
     console.log(event)
     wx.getLocation({
       type: 'gcj02', //返回可以用于wx.openLocation的经纬度
       success: (res) => {
         const latitude = res.latitude
         const longitude = res.longitude
         wx.openLocation({
           //终点
           latitude: event.currentTarget.dataset.item.latitude,
           longitude: event.currentTarget.dataset.item.longitude,
           address: event.currentTarget.dataset.item.name,
           scale: 18
         })
       }
     })
   },
})mapchart.json
{
 "component": true,
 "usingComponents": {
 }
}
  1. 在map中使用该自定义组件

map.wxml

代码语言:javascript
复制
<view class="navbar">
 <label
   wx:for="{{navbar}}"
   wx:key="unique"
   data-idx="{{index}}"
   class="item {{currentTab==index ? 'active' : ''}}"
   bindtap="navbarTap"
   >
   {{item}}
 </label>
</view>
<view hidden="{{currentTab!==0}}" class="current">
 <mapchart markers="{{markers_0}}" polyline="{{polyline}}" longitude="{{longitude}}" latitude="{{latitude}}" tabs="{{tabs_0}}" datalist="{{datalist_0}} " >
 </mapchart>
</view>
<view hidden="{{currentTab!==1}}">
 <mapchart markers="{{markers_1}}" polyline="{{polyline}}" longitude="{{longitude}}" latitude="{{latitude}}" tabs="{{tabs_1}}" datalist="{{datalist_1}} " ></mapchart>
</view>
<view hidden="{{currentTab!==2}}">
 <mapchart markers="{{markers_2}}" polyline="{{polyline}}" longitude="{{longitude}}" latitude="{{latitude}}" tabs="{{tabs_2}}" datalist="{{datalist_2}}" ></mapchart>
</view>
<view hidden="{{currentTab!==3}}">
 <mapchart markers="{{markers_3}}" polyline="{{polyline}}" longitude="{{longitude}}" latitude="{{latitude}}" tabs="{{tabs_3}}" datalist="{{datalist_3}}" ></mapchart>
</view>

map.js

代码语言:javascript
复制
const app = getApp()
Page({
 data: {
   //选项卡
   navbar: ['科普点', '动物场馆', '游览点','卫生间'],
   longitude: 116.336590,  //默认定位经度
   latitude: 39.941127,   //默认定位纬度
   currentTab: 0,
   showDialog: false,
   mapId: "map", //wxml中的map的Id值
   datalist: [],
   //科普点
markers_0: [ ]//里面写标记点的相关信息
//动物场馆
markers_1: [ ]
//游览点
markers_2: [ ]
//卫生间
markers_3: [ ]

map.wxss

代码语言:javascript
复制
/* pages/map.wxss */
page{
 display: flex;
 flex-direction: column;
 height: 100%;
}
.navbar{
 flex: none;
 display: flex;
 background: #fff;
}
.navbar .item{
 position: relative;
 flex: auto;
 text-align: center;
 line-height: 80rpx;
}
.navbar .item.active{
 color: #FFCC00;
}
.navbar .item.active:after{
 content: "";
 display: block;
 position: absolute;
 bottom: 0;
 left: 0;
 right: 0;
 height: 4rpx;
 background: #FFCC00;
}

3 实验结果与讨论

最终结果如图:

图片
图片

4 结语

本次我们介绍了如何用自定义组件实现map上切换不同的标记点,使用本方法虽然可以实现我们的目标,但切换标记点时会有闪屏的情况,本质上还是属于切换到另外一个页面,并没有在同一个地图页面完成切换不同标记点,后续将对此进行改进。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档