热搜:前端 nest neovim nvim

3D渲染和加上纹理图片的操作

lxf2023-05-13 00:59:08

我正参与「程序编写·启航计划」

下面我们就以广西南宁市的做案例,去进行这一3D渲染和加上纹理图片的操作。

3D渲染和加上纹理图片的操作

首先我们要先看一下文本文档,echarts 的geo的areaColor是能够适用利用图片来对地形图的地区具体内容去进行纹路添充的,还可以进行色调修改。

文档具体地址:echarts.apache.org/zh/option.h…

3D渲染和加上纹理图片的操作

但这个纹理图片的添充是推动为 HTMLImageElement, HTMLCanvasElement,不兼容途径字符串数组,所以我们要新构建一个图片信息。

3D渲染和加上纹理图片的操作

展示图片我们可以用下边二者方式来开展,自然方法有很多,也可以用别的的办法,这里不一一列举了

//方法一
 let img = document.createElement('img')
 img.src = require('../../../assets/image/2.jpg')
//方法二
<img ref="mapSvg" id="mapSvg" v-show="false" hidden style="width:500px;height:500px;" src="../../../assets/image/2.jpg">
this.$refs.mapSvgAreaMap

获得针对区域内的json文档,这一能去下边网址获得,也可以去gitHub上边立即获得,诸位你情我愿

//阿里巴巴的获得地形图json文件信息
http://datav.aliyun.com/portal/school/atlas/area_selector
//gitHub上边能直接获得详细每一个省区和市区的
https://github.com/ljy-110/china-geojson-map

下面来看看具体代码展示具体内容

(1)数据类型展现

dataMapList : [
  //座标就是为了呈现label定位
  {name:"兴业银行区",value:[108.320189,22.819511],datas:12},
  ...
]

(2)累加层及发光效果能够参考代码

initAreaMap(){
   var myChart = echarts.init(this.$refs.areaMap);
  //GuangXi  引进的地形图json文档
        echarts.registerMap("mapStype", GuangXi);
   let option = {}
   //label的照片引进
   let mapLabel = require('../../../assets/image/home/mapLabel.png');
   let data = this.dataMapList
   option={
    tooltip: {
     trigger: "item",
     formatter: function(params) {
      return params.name;
      }
     },
    geo: [
      {
      map: "mapStype",
      geoIndex: 1,
      zoom: 1,
      layoutCenter: ["50%", "44%"],
      layoutSize: "80%",
      zlevel: 4,
      show: true,
      label: {
       normal: {
        show: false,       textStyle: {
         color: "#fff",
         fontSize: "16"
         }
        },
       emphasis: {
        show: true,
        label: {
         formatter: function(params) { // 鼠标经过的调用函数 
          return params.name
          },
         },
        textStyle: {
         color: "#fff"
         }
        }
       },
      roam: false, // 是否允许放大
      itemStyle: {
       normal: {
        areaColor:'rgb(0,0,0,0)',
        borderWidth: 1,
        borderColor: 'rgb(222, 238, 255,0.5)',
        shadowColor: '#1773c3',
        shadowBlur: 20,
        },
       emphasis: {
        borderColor: 'rgb(222, 238, 255,0.5)',
        areaColor:'rgb(26, 92, 158,0.6)',
        }
       }
      },
      {
      map: "mapStype",
      geoIndex: 3,
      zoom: 1,
      layoutCenter: ["50%", "44%"],
      layoutSize: "80%",
      zlevel: 2,
      // aspectScale: 1,
      silent: true,
      label: {
       emphasis: {
        show: false
        }
       },
      roam: false, // 是否允许放大
      itemStyle: {
       areaColor: {
        image: this.$refs.mapSvgAreaMap, // 适用为 HTMLImageElement, HTMLCanvasElement,不兼容途径字符串数组
        repeat: 'repeat' // 是不是铺满, 能是 'repeat-x', 'repeat-y', 'no-repeat'
        },
       }
      },
      {
      map: "mapStype",
      animation:true,
      animationDurationUpdate:0,
      geoIndex: 4,
      zoom: 1,
      layoutCenter: ["50%", "45.5%"],
      layoutSize: "80%",
      zlevel: 1,
      // aspectScale: 1,
      silent: true,
      label: {
       emphasis: {
        show: false
        }
       },
      roam: false, // 是否允许放大
      itemStyle: {
       borderWidth: 1,
       areaColor:'#030a17',
       shadowColor: '#1773c3',
       shadowBlur: 60,
       }
      }
     ],
    series: [
      {
      type: 'map',
      geoIndex: 1,
      zoom: 1.2,
      showLegendSymbol: false, // 存有legend时表明
      label: {
       normal: {
        show: false,
        color: 'rgba(255,255,255,0.9)'
        },
       emphasis: {
        show: false,
        textStyle: {
         color: '#fff'
         }
        }
       },
      roam: false,
      data: data
      },
      {
      type: "scatter",
      coordinateSystem: "geo",
      label: {
       normal: {
        show: true,
        color: "#fff",
        fontWeight:500,
        fontSize:18,
        verticalAlign:'top',
        lineHeight:-26,
        formatter: function(params) {
         return params.data.name   '     '  params.data.datas;
         },
        },
       emphasis: {
        show: false
        },
       },
      itemStyle: {
       opacity: 1
       },
      symbol:'image://'   mapLabel,
      symbolSize: [160, 70],
      symbolOffset: [0, 0],
      zlevel: 6,
      data: data
      },
     ]
    }
   if (option && typeof option === 'object') {
    myChart.setOption(option,true);
    }
   window.addEventListener('resize', myChart.resize);
   },

tip

1.那一个照片展示很有可能也会变得模糊不清

2.照片没法展现可以用setTimeout,延迟渲染

很有可能以及各种难题,欢迎大家大家一起来讨论处理。

最终贴一张纹理图片,大家可以一个人去提取。实景地图方式去提取。

3D渲染和加上纹理图片的操作

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!