基于3d地图做的一些效果,首先看下效果图
准备工作:下载echarts 和3d地图需要用到的依赖包,版本随意就行
下载依赖之后,在页面引入,引入网上下载的地图json文件
用户不直接操作地图,因为是大屏,只做展示使用,右边列表有两种模式,如果列表数据没有撑开盒子,每3秒轮播高亮,高亮到那个地区,地图上就高亮那一块区域,且显示对应的tooltip(这里没有使用echarts中的tooltip,因为高亮地图的时候,2d地图可以主动触发tooltip出现,但是3d里面不支持,所以这个弹框是我自己写的,因为项目中只有3个地区的数据,只用写3个弹框就行,如果梅个区域都有数据,不建议使用这种方式)
第二种展示方式就是,如果右边列表数据过多,就会无限滚动,当高亮哪一个区域的时候,就高亮某一个地图区域
重点主要将如何在vue中使用3d地图,如果有对两边联动效果如何做的小伙伴感兴趣,给我私信吧
在data()中定义渲染3d地图的options:
data(){
let _this = this
return {
option: {
tooltip: {
show: false,//地图自带的tooltip,在这里我设置为false,并没有使用,可以放开看下效果
triggerOn: 'mousemove',//鼠标hover地图区域时出现
trigger: 'item',
transitionDuration: 1,//延时一秒出现
formatter: function(params){
//返回的是dom结构,你可以在这里写好样式,也可以使用下面的配置项去设置样式
return `<div style="position:absolute;left:10px;top:16px;width:8px;height:8px;background-color:#FD9A5A;"></div>
<div class="tips" style="padding:12px;">
<h1 style="font-size:16px;">${params.name}边缘云设置总量</h1>
<p style="font-size:16px;">
<span style="color:#03dbf3;font-size:30px;display:inline-block;padding:5px 0">${354645}</span>
台
</p>
</div>`
},
//这里就是设置地图自带的弹框样式
borderColor: '#419bf9',
borderWidth: 1,
padding: [0, 15],
// backgroundColor: '#0a1d54',
backgroundColor: 'rgba(0,2,89,0.8)',
borderRadius: 0,
textStyle: { color:'#fff'},
// hoverAnimation:true
},
series: [
{
//你引入的地图文件的json文件的名称
name: 'china',
type: 'map3D',//我们需要使用3d地图
// type: 'map',
map: 'china', //地图类型。echarts-gl 中使用的地图类型同 geo 组件相同
regionHeight: 3, //模型的高度
boxWidth: 85, //三维地图在三维场景中的宽度
boxDepth: 73, //三维地图在三维场景中的深度
top: '-15%',
itemStyle: {
normal: {
//静态模式下显示的默认样式
borderColor: '#3f82e5',
borderWidth: 2,
color: '#0a55ea',
opacity: 0.4
}, //阴影效果
emphasis: {
// color:'#3f82e5',
color: '#0a55ea',
// opacity:1,
label:{
show:false
}
}
},
viewControl: {
alpha: 45, // 视角绕 x 轴,即上下旋转的角度。配合 beta 可以控制视角的方向。[ default: 40 ]
beta: 10,
rotateSensitivity:0,
zoomSensitivity:0,
//用于鼠标的旋转,缩放等视角控制。
autoRotate: false, //是否开启视角绕物体的自动旋转查看
distance: 90 //默认视角距离主体的距离,对于 globe 来说是距离地球表面的距离,对于 grid3D 和 geo3D 等其它组件来说是距离中心原点的距离。在 projection 为'perspective'的时候有效。
},
data:[],
// hoverAnimation:true,
}]
},
}
},
在页面中写一个盒子,用来装你的地图,你可以这么写
<div id="map" ref="myEchart" :style="{width: this.winWidth() / 1.8 + 'px',height: (this.winHeight()-89) / 0.95 + 'px'}"></div>
//因为我的需要适配屏幕,宽高你可以结合实际需要来定
在mounted生命周期函数中,去渲染地图
mounted() {
this.initEcharts()
// 禁用滚动条
document.body.parentNode.style.overflow="hidden";
},
initEcharts() {
//echarts初始化出来后要全局变量接受一下,以后修改echarts的时候就去setoptions
this.myChart = echarts.init(this.$refs.myEchart)
echarts.use([TooltipComponent, VisualMapComponent, GeoComponent,EffectScatterChart])
echarts.registerMap('china', china)
this.myChart.setOption(this.option)
console.log('渲染后得options===',this.myChart.setOption(this.option))
//echarts自适应
window.onresize = this.myChart.resize
//在渲染完毕之后,你可以结合实际需要,给地图绑定事件,我帮事件是因为我原先要做tooltip的鼠标跟随,虽然能够实现,但是有坑,无法解决,所以就放弃了,改成自己写的弹框,头铁的老哥可以自己试下
//绑定市区点击事件
// this.myChart.on("click",(params)=>{
// this.mapClick(params)
// })
// this.myChart.on("mouseover",(params)=>{
// this.mapover(params)
// })
// this.myChart.on("mouseout",(params)=>{
// this.mapMouseout(params)
// })
// this.myChart.on("mousemove",(params)=>{
// this.mapMousemove(params)
// })
// this.myChart.on("globalout",(params)=>{
// this.mapGlobalout(params)
// })
},
代码走到此处,那么你的地图就能够成功的渲染出来了,那么如何做地图的高亮呢?
其实代码很简单,将你要高亮的地区区域名称得到,然后设置样式就可以实现高亮,这个应该不难的,但是因为我的列表是滚动的,当时就没有想到好的办法,如何得到我当前是哪个地区的数据,所以给列表加了一个高亮的样式,然后通过获取高亮样式,来判断列表当前滚动到哪一个区域,得到区域后,使用以下方法就可以实现地图高亮了
// 高亮右侧地图
handleProvinceChange(val){
let _this = this
// // 高亮当前选中的省份
let data = [{
name:val,
itemStyle:{
color:'#7CFFFB',
opacity:1,
label:{
show:false
}
}
}]
_this.option.series[0].data = data
if(_this.myChart){
_this.myChart.setOption(this.option);
}
},
地图已经高亮,那么对应的弹框是不是也应该出现,来看我写的自定义弹框,设置了三个变量来控制显隐,当滚到对应区域的时候,就让这个弹框出现,其他隐藏,弊端就是这个定位的位置是写死的,如果要求适配各种大屏,那么需要写几套样式,比较复杂。

样式如下:
.tool__tip-map {
position:absolute;
z-index:999;
font-size:16px;
color:#fff;
width: 206px;
height: 80px;
border: 1px solid #419bf9;
box-sizing: border-box;
padding: 12px 25px;
// background: rgba(0,2,89,0.8);
background: rgba(10,29,84,0.8);
// background: #0a1d54;
//牵引线就是两个伪元素实现的,只写了关键样式,其他的细微样式自己调
&::after {
content: "";
width: 100px;
height: 2px;
background: #02C6E5;
position: absolute;
left: -120px;
top: 50%;
transform: translateY(-50%);
}
&::before{
content: "";
width: 2px;
height: 117px;
background: #02C6E5;
position: absolute;
left: -140px;
top: 36px;
transform:rotateZ(20deg);
}
}
如果你没有列表,单纯的想通过点击地区区域出现tooltip,那么你绑定点击事件,完全是可以实现的,而且效果很赞,这里我的代码就不贴了
如果你没有列表,鼠标跟随出现tooltip,你也可以绑定地图事件,但是弊端就是,在地图划过任何区域都是可以的,但是当你离开画布,那么最后一个你离开的tooltip不会消失
还有个小技术的点是:
这个蓝色的线是根据边框轨迹滑动的,看起来比较高大上,如果你想做,看我的另外一篇博客吧利用径向渐变做酷炫的按钮闪光效果_亦双城的双子娴的博客-CSDN博客

无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍 介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。 内容有: ①:Hub模型的方法介绍 ②:服务器端代码介绍 ③:前端vue3安装并调用后端方法 ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke() 去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on
平时开发中我们经常会遇到这样的需求,在一个不限高度的盒子中会有很多内容,如果全部显示用户体验会非常不好,所以可以先折叠起来,当内容达到一定高度时,显示展开更多按钮,点击即可显示全部内容,先来看看效果图: 这样做用户体验瞬间得到提升,接下来看看具体细节。0">主要操作在内容这里{{item.username}},……展开更多样式大家可依据自己项目需求进行设计,这里就不贴了,主要说几个关键的。1、在data中定义三个属性isShowMore:false, //控制展开更多的显示与隐藏textHeight:null, //框中内容的高度status:false, //内容状态是否打开2.计算内容是否
这里写自定义目录标题一、问题二、解决三、解决方案四、打包预览一、问题在使用vue3.2和vite2开发一个移动端或者钉钉端H5微服务iosapp内置浏览器打开没问题安卓app内置浏览器打开空白页面vconsole打印出现报错globalthisundefind二、解决内置浏览器版本比较低打印出来是63vue3代码不兼容低版本浏览器三、解决方案步骤一:vite.config.ts里build.target配置项指定构建目标为es2015或者步骤二:安装@vitejs/plugin-legacy安装完报错也还在指定版本可以解决“@vitejs/plugin-legacy”:“1.8.0”,步骤三: