走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】

news2024/9/23 1:36:27

文章目录

  • 🌟前言
  • 🌟效果展示
  • 🌟使用Echarts
    • 🌟Echarts官网
    • 🌟体验示例小程序
    • 🌟下载
    • 🌟引入组件
    • 🌟创建图表
    • 🌟暂不支持的功能
  • 🌟使用地图
    • 🌟map组件
    • 🌟创建图表
  • 🌟写在最后

在这里插入图片描述

🌟前言

哈喽小伙伴们,小程序的新星计划在这周也进入了尾声,回顾一个月输出小程序相关文章以来,收获颇多充实了很多;大家一定在项目需求当中遇到过需要使用 Echarts地图组件 吧;今天这篇文章我会带领大家去实际的操作一下;话不多说,咱们直接开整!🤘

🌟效果展示

在这里插入图片描述

🌟使用Echarts

🌟Echarts官网

Echarts官方介绍微信小程序使用Echarts

🌟体验示例小程序

在微信中扫描下面的二维码即可体验 ECharts Demo:

在这里插入图片描述

🌟下载

为了兼容小程序 Canvas,我们提供了一个小程序的组件,用这种方式可以方便地使用 ECharts。

首先,下载 GitHub 上的 ecomfe/echarts-for-weixin 项目。

其中,ec-canvas 是我们提供的组件,其他文件是如何使用该组件的示例。

ec-canvas 目录下有一个 echarts.js,默认我们会在每次 echarts-for-weixin 项目发版的时候替换成最新版的 ECharts。如有必要,可以自行从 ECharts 项目中下载最新发布版,或者从官网自定义构建以减小文件大小。

🌟引入组件

在创建项目之后,可以将下载的 ecomfe/echarts-for-weixin 项目完全替换新建的项目,然后将修改代码;或者仅拷贝 ec-canvas 目录到新建的项目下,然后做相应的调整。

如果采用完全替换的方式,需要将 project.config.json 中的 appid 替换成在公众平台申请的项目 idpages 目录下的每个文件夹是一个页面,可以根据情况删除不需要的页面,并且在 app.json 中删除对应页面。

如果仅拷贝 ec-canvas 目录,则可以参考 pages/bar 目录下的几个文件的写法。下面,我们具体地说明。

🌟创建图表

首先,在 pages/echarts 目录下新建一个echarts Page,会自动为我们生成echarts .jsecharts .jsonecharts .wxml、 echarts .wxss

echarts.json 配置如下:

{
  "usingComponents": {
    "ec-canvas": "../../ec-canvas/ec-canvas"
  }
}

这一配置的作用是,允许我们在 pages/echarts/index.wxml 中使用 <ec-canvas> 组件。注意路径的相对位置要写对,如果目录结构和本例相同,就应该像上面这样配置。

echarts .wxml 中,我们创建了一个 组件,内容如下:

其中 ec 是一个我们在 echarts.js 中定义的对象,它使得图表能够在页面加载后被初始化并设置。echarts.js 的结构如下:

<!--pages/echarts/echarts.wxml-->
<view class="container">
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>

echarts.wxss 配置如下:

/* pages/echarts/echarts.wxss */
ec-canvas {
    width: 100%;
    height: 100%;
}

echarts.js 配置如下:

// pages/echarts/echarts.js
import * as echarts from '../../ec-canvas/echarts';

let chart = null;

function initChart(canvas, width, height, dpr) {
  chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr // new
  });
  canvas.setChart(chart);

  var option = {
    tooltip: {
      trigger: 'axis',
      axisPointer: {            // 坐标轴指示器,坐标轴触发有效
        type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
      },
      confine: true
    },
    legend: {
      data: ['热度', '正面', '负面']
    },
    grid: {
      left: 20,
      right: 20,
      bottom: 15,
      top: 40,
      containLabel: true
    },
    xAxis: [
      {
        type: 'value',
        axisLine: {
          lineStyle: {
            color: '#999'
          }
        },
        axisLabel: {
          color: '#666'
        }
      }
    ],
    yAxis: [
      {
        type: 'category',
        axisTick: { show: false },
        data: ['汽车之家', '今日头条', '百度贴吧', '一点资讯', '微信', '微博', '知乎'],
        axisLine: {
          lineStyle: {
            color: '#999'
          }
        },
        axisLabel: {
          color: '#666'
        }
      }
    ],
    series: [
      {
        name: '热度',
        type: 'bar',
        label: {
          normal: {
            show: true,
            position: 'inside'
          }
        },
        data: [300, 270, 340, 344, 300, 320, 310],
        itemStyle: {
          // emphasis: {
          //   color: '#37a2da'
          // }
        }
      },
      {
        name: '正面',
        type: 'bar',
        stack: '总量',
        label: {
          normal: {
            show: true
          }
        },
        data: [120, 102, 141, 174, 190, 250, 220],
        itemStyle: {
          // emphasis: {
          //   color: '#32c5e9'
          // }
        }
      },
      {
        name: '负面',
        type: 'bar',
        stack: '总量',
        label: {
          normal: {
            show: true,
            position: 'left'
          }
        },
        data: [-20, -32, -21, -34, -90, -130, -110],
        itemStyle: {
          // emphasis: {
          //   color: '#67e0e3'
          // }
        }
      }
    ]
  };

  chart.setOption(option);
  return chart;
}
Page({

    /**
     * 页面的初始数据
     */
    data: {
        ec: {
            onInit: initChart
          }
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        setTimeout(function () {
            // 获取 chart 实例的方式
            // console.log(chart)
          }, 2000);
    }
})

这对于所有 ECharts 图表都是通用的,用户只需要修改上面 option 的内容,即可改变图表。option 的使用方法参见 ECharts 配置项文档。对于不熟悉 ECharts 的用户,可以参见 5 分钟上手 ECharts 教程。

完整的例子请参见 ecomfe/echarts-for-weixin 项目。

🌟暂不支持的功能

ECharts 中的绝大部分功能都支持小程序版本,因此这里仅说明不支持的功能,以及存在的问题。

以下功能尚不支持,如果有相关需求请在 issue 中向我们反馈,对于反馈人数多的需求将优先支持:

  • Tooltip
  • 图片
  • 多个 zlevel 分层

此外,目前还有一些 bug 尚未修复,部分需要小程序团队配合上线支持,但不影响基本的使用。已知的 bug 包括:

  • 安卓平台:transform 的问题(会影响关系图边两端的标记位置、旭日图文字位置等)
  • iOS 平台:半透明略有变深的问题
  • iOS 平台:渐变色出现在定义区域之外的地方

🌟使用地图

🌟map组件

map组件 提供了地图展示、交互、叠加点线面及文字等功能,同时支持个性化地图样式,可结合地图服务 API 实现更丰富功能。

更多map组件配置项请查看 官方文档

🌟创建图表

首先,在 component/map 目录下新建一个map Component,会自动为我们生成map.jsmap.jsonmap.wxml、 map.wxss

map.wxml

<map id="map" controls longitude="{{longitude}}" latitude="{{latitude}}" markers="{{markers}}" scale="14" style="width: 100%;height: 100%;"></map>

map.wxss

page{
    width: 100%;
    height: 100%;
}

map.js

Component({
    /**
     * 组件的属性列表
     */
    properties: {

    },

    /**
     * 组件的初始数据
     */
    data: {
        markers: [],
        latitude: '',
        longitude: ''
    },
    lifetimes: {
        // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
        attached: function () {
            console.log('QQmap');
        },
        moved: function () {},
        detached: function () {},
    },

    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
    attached: function () {}, // 此处attached的声明会被lifetimes字段中的声明覆盖
    ready: function () {
        this.getLocation()
    },

    pageLifetimes: {
        // 组件所在页面的生命周期函数
        show: function () {},
        hide: function () {},
        resize: function () {},
    },
    /**
     * 组件的方法列表
     */
    methods: {
        //获取位置
        getLocation() {
            this.mapCtx = wx.createMapContext('myMap')
            // 调用接口
            wx.getLocation({
                type: 'gcj02',
                success: (res) => {
                    // console.log("res", res)
                    if (res) {
                        this.setData({
                            latitude: res.latitude,
                            longitude: res.longitude,
                            markersStatus: true,
                            markers: [{
                                    id: 1,
                                    latitude: res.latitude,
                                    longitude: res.longitude,
                                    // 这个zIndex一定要有,并且不能是一个固定值,否则会出现标记点和label,callout层级混乱
                                    zIndex: 1
                            }]
                        })

                    } else {
                        wx.showToast({
                            title: '定位失败',
                            icon: 'none',
                            duration: 1500
                        })
                    }
                    // qqmapsdk.reverseGeocoder({
                    //     success: (res) => {
                    //         console.log('=============', res)
                    //     },
                    // });
                },
                fail(err) {
                    wx.hideLoading({});
                    console.log("asafasfs", err)
                    // wx.showToast({
                    //     title: '定位失败',
                    //     icon: 'none',
                    //     duration: 1500
                    // })
                    setTimeout(function () {
                        // wx.navigateBack({
                        //     delta: 1
                        // })
                    }, 1500)
                }
            })
        }
    }
})

🌟写在最后

这篇文章给大家讲解了一下在小程序当中如何引入Echarts图表和地图组件,后续会持续更多小程序知识与API,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 2019/2017/2015官方安装教程

安装VisualStudio找不到官方版本&#xff1f;只能找到第三方&#xff1f;害怕中毒&#xff1f; 不要急&#xff0c;本文例举了VS 2019 2017 2015的官方位置&#xff0c;不用但心装成第三方Visual Studio 百度搜索 Visual Studio 2017&#xff0c;只有第三方的包&#xff0c;而…

Network 之八 详解 MAC 地址、MAC 协议、MAC 控制器

在网络通信中&#xff0c;MAC 一词应用非常广泛&#xff0c;可以指 MAC 协议&#xff0c;也可以指 MAC 控制器&#xff0c;还用来表示 MAC 地址&#xff0c;因此&#xff0c;今天就来系统学习一下网络通信中 MAC 相关的知识。 MAC 协议 MAC&#xff08;Media Access Control&a…

宝安日报:联诚发跨界创新“追光”十九载!

世界一流声光电智造一体化服务商、国家级高新技术企业、国家级专精特新“小巨人”企业、博士后创新实践基地、深圳自主创新百强企业……这些熠熠生辉的关键词&#xff0c;是位于宝安区航城街道的深圳市联诚发科技股份有限公司&#xff08;以下简称&#xff1a;联诚发&#xff0…

Hbase简介

HBase简介 一、HBase简介 1. HBase简介 (1) apache的顶级项目&#xff0c;hadoop的数据库&#xff0c;分布式、大规模的大数据存储。 HBase是Google的BigTable的开源java版本&#xff0c;建立在hdfs之上的&#xff0c;分布式、列存储、非关系&#xff08;nosql、key-value&a…

MySQL(复合查询)

文章目录 0 前言1 基本查询2 多表查询3 自连接4 子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询4.5 合并查询4.5.1 union4.5.3 union all 0 前言 相关内容已经准备好了 链接&#xff1a;https://gitee.com/ding-xushengyun/linux__cpp/blob/ma…

2023/4/23周报

目录 摘要 论文阅读 1、标题和现存问题 2、矩阵分解&#xff08;MF&#xff09;和图神经网络 3、GNN_MF框架 4、项目聚集和社会聚集 5、实验准备和结果 2、深度学习 1、GCN 2、代码实例 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于GNN的矩阵分解推荐算法…

【机器学习】 多维kd-tree的python实现

一、说明 本篇主要介绍一个用python实现kd-tree的代码&#xff0c;以及围绕代码实现的kd-tree原理。期望能够为读者打开另一个视角&#xff0c;看待kd-tree的好处。 二、什么是K维树&#xff1f; K-D 树&#xff08;也称为 K 维树&#xff09;是一种二叉搜索树&#xff0c;其中…

甘蔗种植成本居高不下 培育良种和提高机械化覆盖率或成行业破局关键

一、甘蔗种植行业概述及分类 甘蔗是一种重要的经济农作物&#xff0c;是世界上最重要的糖料作物及较有发展潜力的可再生能源作物&#xff0c;现广泛种植于热带及亚热带地区&#xff0c;最大的甘蔗生产国是巴西、印度和中国。 根据观研报告网发布的《中国甘蔗种植市场发展态势分…

matlab 点云滤波(中值、均值、高斯滤波)代码

点云中值、均值、高斯滤波 介绍一下滤波函数 smoothdata: 对含噪数据进行平滑处理 B smoothdata(___,method) 为上述任一语法指定平滑处理方法。例如&#xff0c;B smoothdata(A,sgolay) 使用 Savitzky-golay 滤波器对 A 中的数据进行平滑处理。Method-平滑处理方法 "…

java实现修改excel中数据格式

目录 背景&#xff1a;过程&#xff1a;方案&#xff1a;个人想法&#xff1a;总结&#xff1a;1、清楚边界&#xff0c;全局观2、工欲善其事&#xff0c;必先利其器3、别总想着改源码&#xff0c;别总觉得自己做不出来&#xff0c;要给自己积极的心理暗示。有用。 背景&#x…

基于深度强化学习训练《街头霸王·二:冠军特别版》通关关底 BOSS -智能 AI 代理项目上手

文章目录 SFighterAI项目简介实现软件环境项目文件结构 运行指南环境配置验证及调整gym环境&#xff1a; gym-retro 游戏文件夹错误提示及解决Could not initialize NNPACK!错误提示&#xff1a;libGL error: MESA-LOADER: failed to open swrast 运行测试训练模型查看曲线 Tip…

《Redis设计与开发》读书笔记

《Redis设计与实现》读书笔记 简单动态字符串 SDS的定义 结构&#xff1a; buf数组&#xff1a;用于保存字符串 len属性&#xff1a;记录SDS中保存字符串的长度 free属性&#xff1a;记录buf中未使用字节数量 遵循C字符串以空字符串结尾的惯例&#xff0c;保存空字符串的…

默认成员函数之构造函数,构造函数的特点,创建,调用与对象创建的一语双关,默认构造函数等

内置类型与自定义类型 C当中的类型的话分为两类&#xff1a;一种就是内置类型/基本类型&#xff0c;就是c语言自带的那些类型基本类型&#xff0c;如int, char, double, 指针&#xff08;任何类型的指针&#xff0c;因为指针就是地址嘛&#xff09;等等&#xff1b;还有就是自…

某安全对抗行走APP逆向分析

1.定位url 抓包: https://api5.xxxx.com/xxx-rest-service/message/fun_getnearby 看一下参数: opentime:时间戳 reqdata:base64编码 sign 未知,需要解密 # -*- coding: utf-8 -*- # @Author : Codeooo # @Time : 2022-10-14import frida, sysm199a = "&qu…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法&#xff08;环境vs&#xff09; if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少&#xff1f; _Bool原码 BOOL、TRUE、…

IT_开发提测标准规范

背景 公司 IT 规模小&#xff0c;开发提测质量差&#xff0c;流程不规范&#xff0c;导致测试任务重&#xff0c;于是推行 &#xff1a;IT_开发提测标准规范&#xff0c;正文如下&#xff1b;拟定开发提测标准规范后&#xff0c;测试与项目经理内部评审后&#xff0c;发至IT群…

低相位噪声链路调试分析

上图为原始状态,与项目结项评审指标差不多,确实存在几个噪声比较差的点。 频率分布大约在几Hz,20K,50K左右。 由于测试时由子卡进行输出,采用直接进行直接输出,以看出,明显的尖峰已经没有了,只剩下20K左右的尖峰,但是总体来说,效果很差,可能时单端输出的问题。试…

【SVN已解决】svn下载成功图标不显示解决方法

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航&#xff1a;视图->显示框->导航窗格…

《春琴抄》庭有枇杷树,今已亭亭如盖矣~

《春琴抄》庭有枇杷树&#xff0c;今已亭亭如盖矣~ 谷崎润一郎&#xff08;1886年7月24日&#xff5e;1965年7月30日&#xff09;&#xff0c;日本近代小说家&#xff0c;唯美派文学主要代表人物之一&#xff0c;《源氏物语》现代文的译者。 代表作有《刺青》《春琴抄》《细雪》…