微信小程序原生使用map组件实现轨迹、多边形

这篇具有很好参考价值的文章主要介绍了微信小程序原生使用map组件实现轨迹、多边形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用地图本身的map组件实现地图

初始化地图:

<map id='map' longitude="{{longitude}}" latitude="{{latitude}}" bindtap='handlerMap' enable-satellite="{{satellite}}" scale="{{scale}}" circles="{{circles}}" markers="{{markerData}}" polyline="{{polyline}}" polygons="{{polygons}}" enable-zoom="{{true}}" rotate="{{0}}" show-compass="{{true}}" />

map组件的属性

longitude

必须

Number

中心点经度

latitude

必须

Number

中心点纬度

scale

选填

Number

地图的缩放级别(缩放切换时使用)

include-points

选填

Array.

缩放视野以展示所有坐标点

markers

选填

Array.

地图展示的坐标点集合

polyline

选填

Array.

地图展示的线路集合

circles

选填

Array.

地图展示的圆的集合

polygons

选填

Array.

地图展示的多边形的集合

rotate

选填

Number(0-360)

地图旋转的角度

show-compass

选填

true/false

展示指南针

enable-zoom

选填

true/false

缩放(默认true)

enable-scroll

选填

true/false

拖动(默认true)

enable-satellite

选填

true/false

是否开启卫星地图(切换地图图层使用)

bindtap

选填

eventhandle

点击地图触发的事件

bindmarkertap

选填

eventhandle

点击坐标点触发

以上是map组件的部分属性,我在开发过程中用到的一部分以及我觉得可能会用到的。

如果只是简单的展示地图,只需要两个参数即可:

<map id='map' longitude="{{longitude}}" latitude="{{latitude}}" /> Page({ data:{ longitude:116.39479288997632, latitude:40.0772127801174, } })

需要什么功能我们往里边添加即可

添加缩放控件:scale 有两个属性:min-scale最小缩放(默认3)、max-scale最大缩放(默认20)

<map id='map' longitude="{{longitude}}" latitude="{{latitude}}" scale="{{scale}}"/> <view bindtap='handBScale'> <img src="../../imgs/jia.png" /> 
</view> <view bindtap='handSScale'>
 <img src="../../imgs/jian.png" /> 
</view> 
Page({
 data:{ 
 longitude:116.39479288997632,
 latitude:40.0772127801174,
 scale:10,
 },
 handBScale(){ 
let scale=this.data.scale
 scale++
 if(scale>20)scale=20 //当scale突破20之后,虽然地图并没有继续放大,但是绑定的值是在增大的,如果不管当你缩小的时候,会出现失效的情况
 this.setData({ scale:scale }) 
},
 handBScale(){
 let scale=this.data.scale
 scale--
 if(scale<3)scale=3//同放大
 this.setData({ scale:scale }) 
} 
})

ok,这样就完成了一个缩放的功能,因为微信的map组件没有自带的缩放控件,所以需要自己单独写一个。当然我相信样式对各位是小意思,所以我就不写了。QAQ

接下来是点线面的实现,因为地图并没有点击滑动划线的方法(我没找到)。点线面都是由点击实现,这样的话点线面是连贯实现。

<map id='map' longitude="{{longitude}}" latitude="{{latitude}}" scale="{{scale}}"
              markers="{{markers}}" polyline="{{polyline}}" polygons="{{polygons}}"
              bindtap="handTap"
/> 
<view class="body-view">
        <slider bindchange="slider3change" min="200" max="30200" value="200" show-value/>
</view>
Page({
    data:{
        longitude:116.39479288997632,
        latitude:40.0772127801174,    
        scale:10,
        marker:null,//改变圆半径时圆心的坐标点
        markers:[],
        polyline:[],
        polygons:[],
        markerId:1
    },
    handTap(event){
        let lnglat=event.detail
        let marker = this.generateMarker(lnglat)
        let markers=this.data.markers
        markers.push(marker)  //push是不断给地图添加坐标点,如果只需要一个,直接赋值即可
        this.setData({
            marker:marker,
            markers:markers
        })
        let circle=this.generateCircle(marker,200)
        
let circles=[]
    circles.push(circle)
        this.setData({
        longitude:marker.longitude, //画圆时需要把圆心定为地图的中心,不画圆可以不要
                latitude:marker.latitude
        scale:16,
        circles:circles
        })
        if(markers.length>1){
            let polyline=this.generatePolyline(markers)      
            let polylines=[]
            polylines.push(polyline)
            this.setData({
                polyline:polylines
            })
        }
        if(markers.length>2){
            let polygon=this.generatePolygon(markers)      
            let polygons=[]
            polygons.push(polygon)
            this.setData({
                polygons:polygons
            })
        }
    },
    slider3change(event){
     let value=event.detail.value
     let marker=this.data.marker
         if(marker==null)return
     let circle=this.generateCircle(marker,value)
     let circles=[]
     let scale=0
     if(value<500){
        scale=16
     }else if(value<1000){
        scale=14
     }else if(value<5000){
        scale=12
     }else if(value<10000){
        scale=10
     }else if(value<35000){
        scale=9
     }else{
        scale=12
     }
         circles.push(circle)
     this.setData({
        circles:circles,
        scale:scale
     })
    },
    generateMarker(data){  //创建坐标点的函数
        let longitude=data.longitude||data.lng
        let latitude=data.latitude||data.lat
        let markerId=this.data.markerId
        let iconPath="../../imgs/dian.png"  
        let marker={
            longitude:longitude,   //必填经度
            latitude:latitude,     //必填纬度
            iconPath:iconPath,     //必填图标路径
            markerId:markerId,     //选填点位id,id作为唯一的标识符,我觉得填上会好点,可以不填。
            width:20,              //图片的宽度,默认为实际宽度
            height:20,             //图片的高度,默认为实际高度
            anchor:{               //图标的中心点(0-1选值)
                x:.5,
                y:.5                 
            }
        }    
        this.setData({
            markerId:markerId++     //每次生成坐标点给这个值加1,保证点位内的id唯一性        
        })
        return marker   
    },
    generatePolyline(data=[]){  //创建线条
        let polyline={}
        let points=[]
        for(let ite of data){
            points.push({
                longitude:ite.longitude,
                latitude:ite.latitude            
            })   
        }
        polyline={
            points:points,            //坐标点集合
            color:"#333333",          //线条的颜色
            colorList:[],             //彩虹线,使用时会忽略color的值
            width:5,                  //线条的宽度
            dottedLine:true,          //是否虚线
            //arrowLine:false,          //是否有箭头
            //arrowIconPath:'',         //箭头更换时的图标地址,arrline为true时生效
            //borderColor:'blue',       //线条边框的颜色
            //borderWidth:3,            //线条边框的宽度
            abovelabels:'abovelabels'   //压盖层级:('aboveroads':道路之上楼块之下,'abovebuildings':楼块之上POI之下,'abovelabels':所有的POI之上,默认是这个)    
        }
        return polyline
    },
    generatePolygon(data){   //创建多边形
        let polygon={}
        let points=[]
        for(let ite of data){
            points.push({
                longitude:ite.longitude,
                latitude:ite.latitude              
            })      
        }
        polygon={
            points:points,              //坐标点集合  
            dashArray:[10,10],          //描边线默认为实线,如果需要虚线使用这个属性,接收两个值的数组,分别是实线和虚线的长度
            strokeWidth:4,              //描边的宽度
            strokeColor:"#555555",      //描边的颜色,只接受16进制和RGBA格式
            fillColor:"rgba(152,132,152,.5)",       //多边形围绕成的空间的填充色
            zindex:4,                   //多边形z轴数值
            level:'abovelabels'         //压盖层级
        }
        return polygon
    },
    generateCircle(marker,radius){      //创建圆
       let circle={
            longitude:marker.longitude, //圆中心坐标点的经度
            latitude:marker.latitude,   //圆中心坐标点的纬度
            radius:radius,              //圆的半径
            color:'#555555',            //描边颜色
            fillColor:'#666666',        //填充颜色
            strokeWidth:3,              //描边宽度
            level:'abovelabels'         //压盖层级
       }
        return circle
    }
})

以上就是点、线、面的实现。文章来源地址https://www.toymoban.com/news/detail-770727.html

到了这里,关于微信小程序原生使用map组件实现轨迹、多边形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序原生button组件使用并修改样式

     想使用原生button组件,但是想使用不同样式 注意type使用得type必须和修改时选择器样式(button[type=default])一样,才能对其修改样式,否则样式不会被修改 如果是多端适配,需要使用type为default再修改样式  

    2024年02月14日
    浏览(32)
  • uniapp使用微信小程序提供的原生插件(组件)

    小程序交易保障标展示组件 为例 参考uniapp加载插件、微信小程序加载插件 1. manifest.json: 先打开manifest.json文件,然后我们找到\\\"mp-weixin\\\",引入需要使用的插件 2. pages.json 打开pages.json文件,然后再对应的页面配置处添加东西 3.页面使用

    2024年02月11日
    浏览(39)
  • 微信小程序原生实现无边框table组件支持横向和纵向滚动

    效果图(支持单元格样式自定义) table组件代码 wxml文件 wxss文件 js文件 组件使用 1、在page页面的json文件中引入组件(默认大家都会引入); 2、在page页面的wxml文件中使用组件 3、在page页面的js文件中设置数据 4、在page页面的wxss文件中修改样式

    2024年02月07日
    浏览(48)
  • 原生微信小程序使用u-charts(组件版)折线图示例

            之前一直使用的都是 wx-charts,链接: xiaolin3303/wx-charts: 微信小程序图表charts组件 ,但是这个库已经五六年没有维护了,经常出现 canvas层级过高弹窗无法覆盖等问题(微信小程序前面新推出了 canvas-2d,解决了这个问题)         摸索了官网文档一个下午,今天来介

    2024年02月09日
    浏览(38)
  • 微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)

    网上的教程都太乱了,代码根本没办法拿到自己的项目中去。 本文实现了 微信小程序中接入使用腾讯地图插件详细教程,并提供了 基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化等等操作, 你可以直接复制示例代码,稍微改改就能

    2024年02月09日
    浏览(72)
  • Uniapp实现微信小程序跑步运动轨迹、历史轨迹和轨迹回放等功能

    一、先看效果 【跑跑步】微信小程序 二、实现功能         【跑跑步】是一款基于Uniapp开发的微信小程序,主要实现了跑步轨迹记录、历史轨迹、轨迹纠偏、轨迹回放和轨迹排名等功能。室内跑步记录正在开发,还没有发布,主要利用手机加速度传感器实现计步功能。更多

    2024年02月09日
    浏览(43)
  • 微信小程序(原生)封装弹框组件

    小程序封装原生弹框组件(一个弹框,点击确定关闭弹框,有需要的直接复制哦) 上面是组件的内容,下面是引用方法 首先第一步在app.json或者单文件json文件引入 我用的比较多就在app.json引入的 下面是文件使用方法: 只需要子啊data中控制这两个属性就可以了,喜欢的点个赞

    2024年02月11日
    浏览(40)
  • uniapp 微信小程序实现运动轨迹、行车轨迹、历史轨迹、轨迹回放、不同速度有不同的路线颜色

    先看效果 实现效果: 根据不同速度绘制不同颜色的轨迹 根据终点起点获取地图中心点,尽可能在屏幕内完全展示轨迹 获取最快的路段并显示 自定义点图标 实现步骤: map组件 view标签部分 js部分 points 数据格式 注意:由于小程序会不断更新迭代,源码和体验效果可能有一定

    2024年02月11日
    浏览(54)
  • 微信小程序原生写法——24小时时间选择器组件

    使用picker-view来封装成的一个时间选择器 开始时间是当前时间的一个小时之后,秒默认是0秒 可能还有一些情况未处理,后续发现再更新 js文件 第一版:略繁琐 第二版js文件:根据当前时间的时间戳A与24小时之后的时间戳B两者来进行处理获取对应的列表 json文件 wxml文件 wxs

    2024年02月04日
    浏览(38)
  • 微信小程序原生开发功能合集二:下拉选择组件封装

      本章实现小程序中下拉选择组件的封装实现,通过自定义组件的方式实现下拉选择功能,使用小程序的picker组件实现下拉数据的展示及相关自定义处理,封装数据加载过程,数据切换逻辑监听等。   本节实现select组件的开发说明,另使用nodejs创建express服务器,为远程

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包