vue使用vue-mapvgl实现烟台市各区县行政区绘制、三维柱状图

news2024/11/17 11:03:05

一、效果展示

在这里插入图片描述

二、地图组件: vue-mapvgl

https://docs.guyixi.cn/vue-mapvgl/#/

三、代码

main.js

//vue-mapvGL
import VueBMap from 'vue-bmap-gl';
import 'vue-bmap-gl/dist/style.css'
import VueMapvgl  from 'vue-mapvgl';
Vue.use(VueBMap);
Vue.use(VueMapvgl);
VueBMap.initBMapApiLoader({
  ak: ak,
  v: '1.0'
});

yantaiMap.vue

<template>

    <div class="globalLayout">
		<el-bmap vid="bmapDemo" ref="bmapDemo" :mapStyleV2="mapStyle" :tilt="60" :heading="0" 		:zoom="zoom" :center="center" class="bmap-View">
            <el-bmapv-view>
              <el-bmapv-bar-layer 
                :data="barData" 
                :edge-count="50" 
                :size = "200">
                </el-bmapv-bar-layer>
                <el-bmapv-ripple-layer 
                  :data="rippleData"
                  >
                </el-bmapv-ripple-layer>
                <el-bmapv-polygon-layer  v-for="(item,index) in yantaiGeometry"
                  :key="'yantai'+index"
                  :enablePicked="true"
                  selectedColor="rgba(42, 109, 249, 1)"
                  line-join="miter" 
                  line-color="rgba(137, 227, 250, 1)" 
                  fillColor="rgba(26, 72, 224, .7)" 
                  :line-width="2" 
                  :data="item"
                  >
                </el-bmapv-polygon-layer>
            </el-bmapv-view>
          </el-bmap>

    </div>
  </template>

  <script>
  //百度个性定制https://lbsyun.baidu.com/apiconsole/custommap
  import styleJson from '../../assets/baiduMap/mapStyle.json'
  //烟台地图geoJson
  //https://geo.datav.aliyun.com/areas_v3/bound/370600_full.json
  import yantaiJson from '../../assets/baiduMap/yantai.json'

    export default {
      name: 'bmap-page',
      computed:{
        mapStyle:function(){
          let style = {
            styleJson:styleJson
          }
          return style;
        }
        yantaiGeometry:function(){
          let arr = yantaiJson.features;
          let mapArr = []
          arr.forEach((item,index) => {
            let regionName = item.properties.name;
            let geometry = item.geometry;
            let mapItem = [{
              regionName,
              geometry,
              properties:{
                height:5
              }
            }]
            mapArr.push(mapItem);
          });
          return mapArr;
        },
        lineData:function(){
           let line = [{
              geometry:yantaiJson.features[0].geometry ,
              properties: {
                  height: 500
              }
          }]
          return line;
        }
      },
      data() {

        return {
          boxBackgroundColor:'rgba(0, 11, 41, .7)',
          count: 1,
          zoom: 10,
          center: [120.786975, 36.943199],
          barData:[
            {
              geometry: {
                  type: 'Point',
                  coordinates: [121.05863804, 37.34544754],
              },
              value: [100,150,150,80],
              height: function (value, index, array) {
                  return value * 100;
              },
              size: 2 * 1000,
              color: ['rgba(9, 244, 162, 1)', 'rgba(253, 230, 84, 1)',  'rgba(255, 143, 28, 1)','rgba(251, 70, 41, 1)']
            },
            {
              geometry: {
                  type: 'Point',
                  coordinates: [120.70863804, 37.00544754],
              },
              value: [50,100,50,50],
              height: function (value, index, array) {
                  return value * 100;
              },
              size: 2 * 1000,
              color: ['rgba(9, 244, 162, 1)', 'rgba(253, 230, 84, 1)',  'rgba(255, 143, 28, 1)','rgba(251, 70, 41, 1)']
            },
            {
              geometry: {
                  type: 'Point',
                  coordinates: [121.35863804, 37.34544754],
              },
              value: [100,100,50,20],
              height: function (value, index, array) {
                  return value * 100;
              },
              size: 2 * 1000,
              color: ['rgba(9, 244, 162, 1)', 'rgba(253, 230, 84, 1)',  'rgba(255, 143, 28, 1)','rgba(251, 70, 41, 1)']
            },
          ],
          sparkHeight(data){
            return data.properties.height;
          },
          rippleData: [
              {
                geometry: {
                    type: 'Point',
                    coordinates: [120.84443667, 37.29848811],
                },
                properties: {
                  size: 100,
                  color: '#ffeb3b'
                }
              },
            ]

        };
      },
      mounted(){
        console.log(this.yantaiGeometry)
      },
      methods: {
      }
    };
</script>

四、心路历程

搞了两天终于出来比较满意的效果。下面讲讲我的试错历程:

最开始使用vue-baidu-map,vue-baidu-map使用的百度api是2.0版本,地图渲染采用的是瓦片图,使用map.setMapStyle个性定制地图是总会出现瓦片图片加载失败的情况,体验感不好。在网上搜解决方案是使用3.0版本,map.setMapStyleV2,3.0版本使用webGl渲染图片。3.0没有瓦片加载失败的问题,但是当按住鼠标拖拽是页面会有重影,这个问题不知如何解决。使用3.0还有一个问题就是使用new BMap.Boundary()绘制行政区域回报错,可能是api升级方法改了?没有时间做研究着急要效果,在网上搜到了vue-mapvgl这个地图组件库。于是舍弃之前的方法,尝试使用vue-mapvgl。

vue-baidu-map api改为3.0版本参考文章:
https://www.cnblogs.com/raonet/p/14898367.html

最终,使用vue-mapvgl的平面图层el-bmapv-polygon-layer实现行政区域绘制,这里讲一下思路。
vue-mapvgl官网给出的el-bmapv-polygon-layer绘制平面图层所需的数据格式

 //vue-mapvgl官网给出的el-bmapv-polygon-layer绘制平面图层所需的数据格式
 data: [{
       geometry: {
           type: 'Polygon',
           coordinates: [
             [
                 [121.5273285, 31.21515044],
                 [121.5373285, 31.21515044],
                 [121.5373285, 31.22515044],
                 [121.5273285, 31.22515044]
             ]
           ],
       },
       properties: {
           height: 0
       }
   }]

烟台geoJson的数据,这里推荐一个json可视化工具,很好用。https://altearius.github.io/tools/json/index.html
在这里插入图片描述

绘制区域只需要geoJson中的geometry数据即可,烟台地图geoJson里有每个区的geometry,所以只需要把这些数据拿出来就可以了;

yantaiGeometry:function(){
          let arr = yantaiJson.features;
          let mapArr = []
          arr.forEach((item,index) => {
            let regionName = item.properties.name;
            let geometry = item.geometry;
            let mapItem = [{
              regionName,//区县的名称
              geometry,//绘制平面图层需要的数据
              properties:{
                height:5
              }
            }]
            mapArr.push(mapItem);
          });
          return mapArr;
        },

以上实现了烟台市各区县行政区绘制,但是有一个问题截止到2023–04-21,从各个平台找的geoJson都没有高新区,为了解决这个问题,我打算使用阿里云的数据可视化地图边界生成器,大致画一下高新区,在使用得到的GeoJson绘制高新区。因为我们的项目对具体的地理位置要求不严格,只是做一个地图的可视化展示,所以地图上有高新区的大致位置就可以了。
http://datav.aliyun.com/portal/school/atlas/area_generator#10.04/121.482587/37.461168
在这里插入图片描述

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

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

相关文章

c++算法——算法章节-时间空间复杂度

算法开章咯 这次是csp-j组算法 枚举法常用排序合集hash一维前缀和vector结构体queuestack贪心-简单贪心区间递归二分setmap二叉树图的遍历-邻接矩阵迷宫问题-dfs-深度优先搜素bfs-广度优先搜索动态规划-简单动态规划-01背包动态规划-背包-多重背包二分答案 算法是什么嘛&…

腾讯云轻量4核8G12M应用服务器带宽、月流量详细性能评测

腾讯云轻量4核8G12M应用服务器带宽&#xff0c;12M公网带宽下载速度峰值可达1536KB/秒&#xff0c;折合1.5M/s&#xff0c;每月2000GB月流量&#xff0c;折合每天66GB&#xff0c;系统盘为180GB SSD盘&#xff0c;地域节点可选上海、广州或北京&#xff0c;4核8G服务器网来详细…

0基础同学如何快速入门学Python

转自&#xff1a;https://www.zhihu.com/question/596253606/answer/2994169972 想学Python的小伙伴&#xff0c;这里给你们汇总了&#xff1a;学习资源、平台、小白环境配置、相关课程、书籍资料&#xff01;并且&#xff0c;附送学习方法以及计划制定。 一、可以了解到Pyth…

Appuploader证书申请教程

转载&#xff1a;IOS证书制作教程 点击苹果证书 按钮 点击新增 输入证书密码&#xff0c;名称 这个密码不是账号密码&#xff0c;而是一个保护证书的密码&#xff0c;是p12文件的密码&#xff0c;此密码设置后没有其他地方可以找到&#xff0c;忘记了只能删除证书重新制作&…

还在精神内耗?还在焦虑?可以看看这个

作为一个即将毕业的本科生&#xff0c;总是会不由自主的焦虑。因为不考研&#xff0c;所以显得和同学们格格不入&#xff0c;每天都在进行精神内耗&#xff0c;但是我不经意间看到了一个东西-《邓宁克鲁格效应》 上述的四个阶段刻画出了一条典型的“大师养成之路”。但大师毕竟…

华为三层交换机命令集合,已经分好类了,网工建议收藏!

你好&#xff0c;这里是网络技术联盟站。 本文给大家带来的是华为三层交换机的命令集合&#xff0c;我已经分好类&#xff0c;大家可以收藏备用&#xff01; 一、系统管理命令 1.1 查看版本信息 display version此命令用于查看交换机的版本信息&#xff0c;包括交换机的软件…

【AI理论学习】深入理解Prompt Learning和Prompt Tuning

深入理解Prompt Learning和Prompt Tuning 背景Prompt Learning简介1. Prompt是什么&#xff1f;2. 为什么要使用Prompt&#xff1f;3. Prompt Learning的形式&#xff08;举例&#xff09;4. 有哪些Pre-training language model&#xff1f;5. 常见的Prompt Learning的方法 Pro…

WebRTC 源码分析——Android 视频硬件编码

作者&#xff1a;DevYK 1. 简介 本文将重点介绍在 Android 平台上&#xff0c;WebRTC 是如何使用 MediaCodec 对视频数据进行编码&#xff0c;以及在整个编码过程中 webrtc native 与 java 的流程交互。 本篇开始会先回顾一下 Andorid MediaCodec 的概念和基础使用&#xff0…

Node【Global全局对象】之【Process】

文章目录 &#x1f31f;前言&#x1f31f;Process&#x1f31f;process属性&#x1f31f;process.env &#x1f31f;process方法&#x1f31f;process事件&#x1f31f;uncaughtException &#x1f31f;写在最后 &#x1f31f;前言 哈喽小伙伴们&#xff0c;新的专栏 Node 已开…

VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法

文章目录 问题背景问题描述测试代码测试结果现象描述问题分析 解决方案修改默认配置1. 已经存在的文件全部使用gbk编码重新保存。2. 在工程目录下新建.vscode目录&#xff0c;如果已存在则跳过此步骤。3. 在.vscode目录中新建settings.json&#xff0c;launch.json两个文件&…

SAP CAP篇二:为Service加上数据库支持

在篇一快速创建一个Service&#xff0c;基于Java的实现中&#xff0c;可见使用SAP CAP &#xff08;Cloud Programming Model&#xff09;确实可以提高开发效率。尤其是Java技术栈上&#xff0c;对比于之前使用Olingo框架来实现oData&#xff0c;使用SAP CAP真的可以做到指数级…

Hightopo应邀参加 2023 第十届中国工业数字化论坛

3 月 30 日&#xff0c;以“加快数字化转型&#xff0c;助推高质量发展”为主题的第十届中国工业数字化论坛在北京隆重举行。厦门图扑软件科技有限公司&#xff08;以下简称“图扑软件”&#xff09;应邀参展&#xff0c;与诸位专家、领导、业界同仁共同研讨工业领域的数字化创…

红包算法关于---随机分发和平均分发

目录 群发普通红包 流程图 MainRedPacket类 Manager类 Member类 User类 群发普通红包 题目介绍 某软件有多名用户&#xff08;User类&#xff09;&#xff0c;某群聊中有群主&#xff08;Manager类&#xff09;和多名普通成员&#xff08;Member类&#xff09;&#x…

c++ 11 auto的概念和用法

目录 auto的概念&#xff1a; 使用auto声明变量的语法: auto关键字使用场景: 1.简化代码的书写和阅读 2.避免类型繁琐的重复定义 auto使用时的注意事项&#xff1a; auto的概念&#xff1a; 在C11标准中&#xff0c;auto是一种类型推导机制。它可以让编译器根据右值表达式…

代码随想录训练营day52|300、最长递增子序列;674、最长连续递增序列;718、最长重复子数组

300、最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

【Spring Boot】SpringBoot 优雅整合Swagger Api 自动生成文档

文章目录 前言一、添加 Swagger 依赖二、创建接口类三、添加 Swagger 配置类四、访问 Swagger 页面五、整合一个更友好的UI接口文档 Knife4j1、添加 Knife4j 依赖2、添加 Knife4j 配置类3、访问 Knife4j 页面 总结 前言 Swagger 是一套 RESTful API 文档生成工具&#xff0c;可…

《选择》比努力更重要——C语言

目录 前言: 1.语句 2.选择语句 2.1小栗子 2.2选择结构 3.误导性else 3.1写法上的可读性和代码的稳健性&#xff1a; 3.2一些练习 4.switch选择语句 4.1嵌套的switch ❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其…

Qt·DBus快速入门

目录 一、QtDBus简介 二、QtDBus类型系统 1、QtDBus类型系统简介 2、原生类型 3、复合类型 4、类型系统的使用 5、扩展类型系统 三、QtDBus常用类 1、QDBusMessage 2、QDBusConnection 3、QDBusInterface 4、QDBusReply 5、QDBusAbstractAdaptor 6、QDBusAbstract…

【Python_Opencv图像处理框架】图像阈值与滤波

写在前面 本篇文章是opencv学习的第二篇文章&#xff0c;主要讲解了图像的阈值和滤波操作&#xff0c;作为初学者&#xff0c;我尽己所能&#xff0c;但仍会存在疏漏的地方&#xff0c;希望各位看官不吝指正❤️ 写在中间 一、 图像阈值 &#xff08; 1 &#xff09;简单介绍…

扩散模型原理记录

1 扩散模型原理记录 参考资料&#xff1a; [1]【54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读】 https://www.bilibili.com/video/BV1b541197HX/?share_sourcecopy_web&vd_source7771b17ae75bc5131361e81a50a0c871 [2] https://t.bili…