Vue+Excharts画出重庆地图

一、引入Excharts

全国地图选择器API
http://datav.aliyun.com/tools/atlas/#&lat=30.199123662463407&lng=107.74161937967794&zoom=7.5

在这里插入图片描述

重庆市样例

JSON下载链接
在这里插入图片描述

<template>
  <div class="map_content">
    <div ref="area_json" class="map_body" />
  </div>
</template>

<script>
const echart = require('echarts')
var opt = require('@/assets/geoJson/cqArea.json') // 引入chongqing.json地图文件
// var opt = require('@/assets/geoJson/areaJson.json') // 引入chongqing.json地图文件
export default {
  data() {
    return {
      MapData: [
        { name: '合川区', value: -1, selected: false },
        { name: '江北区', value: -1, selected: false },
        { name: '綦江区', value: -1, selected: false },
        { name: '云阳县', value: -1, selected: false },
        { name: '酉阳县', value: -1, selected: false },
        { name: '渝北区', value: -1, selected: false },
        { name: '彭水县', value: -1, selected: false },
        { name: '铜梁区', value: -1, selected: false },
        { name: '南川区', value: -2, selected: false },
        { name: '璧山区', value: -2, selected: false },
        { name: '垫江县', value: -2, selected: false },
        { name: '大渡口区', value: -1, selected: false }]
    }
  },
  mounted() {
    this.initExcharts()
  },
  methods: {
    initExcharts() {
      this.myChart = echart.init(this.$refs.area_json)
      echart.registerMap('重庆', opt)
      this.myChart.setOption(
        {

          title: {
            text: '全市共享状态图',
            x: 'left',
            y: 'top',
            left: 20,
            textStyle: {
              fontWeight: 'bold',
              fontSize: '18'
            }
          },
          tooltip: {
            show: true,
            trigger: 'item',
            backgroundColor: 'rgba(3, 22, 96, 0.5)',
            formatter: function(params, ticket, callback) {
              let res = ''
              if (params.value < -1) {
                res = '已掉线'
              } else if (params.value === -1) {
                res = '未开通'
              } else if (params.value >= 0) {
                const notFound = params.data?.notFound
                let text = ''
                if (notFound.length > 0) {
                  notFound.map((item, index) => {
                    if (index !== notFound.length - 1) {
                      text += `${item}、`
                    } else {
                      text += `${item}`
                    }
                    return text
                  })
                } else {
                  text = '暂无'
                }
                if (params.name !== '主城九区') {
                  res = `<p>${params?.data?.name}:</p>
                    <p>
                    <span style="margin-right:20px">利用人次:${params?.data?.value}</span>
                    <span>档案利用数:${params?.data?.archivesUseNum}</span>
                    </p>
                    <p>不可访问档案分类:<span style="color:#FFCE2C">${text}</span></p>
                  `
                }
              }
              return res
            },
            textStyle: {
              color: '#fff'
            }
          },
          toolbox: {
            show: false,
            orient: 'vertical',
            left: 'right',
            top: 'center',
            feature: {
              mark: { show: true },
              dataView: { show: true, readOnly: false },
              restore: { show: true },
              saveAsImage: { show: true }
            }
          },
          dataRange: [
            {
              left: '20px',
              bottom: '20px',
              show: false,
              itemGap: 1,
              itemWidth: 10,
              itemHeight: 5,
              orient: 'vertical', // 'horizontal'
              color: [], // 颜色
              splitList: [
                { start: 500, color: '#1592E6' },
                { start: 100, end: 500, color: '#47AEF3' },
                { start: 50, end: 100, color: '#77C9FF' },
                { start: 10, end: 50, color: '#98D6FF' },
                { start: 0, end: 10, color: '#B8E3FF' },
                { start: -1, end: -1, color: '#CCCCCC', label: '未开通' },
                { start: -2, end: -2, color: '#FD716F', label: '已掉线' }
              ],
              textStyle: {
                // 字体设置
                fontSize: 12,
                fontWeight: '500',
                color: '#444444'
              }

            }
          ],
          series: [
            {
              name: '重庆市地图',
              type: 'map',
              zoom: 1.2, // 显示比例大小
              mapType: '重庆', // 自定义扩展图表类型
              itemStyle: {
                normal: { label: { show: true }},
                emphasis: { label: { show: true }}
              },
              label: {
                normal: {
                  show: true, // 是否显示区域label
                  textStyle: {
                    fontSize: 14,
                    color: '#333'
                  }
                }
              },
              data: this.MapData,
              nameMap: {
                '石柱土家族自治县': '石柱县',
                '秀山土家族苗族自治县': '秀山县',
                '酉阳土家族苗族自治县': '酉阳县',
                '彭水苗族土家族自治县': '彭水县',
                '开县': '开州区'
              }
            }
          ]
        })
    }
  }
}
</script>

<style lang="scss" scoped>
  .map_content{
    width: 1200px;height: 1200px;
  .map_body{z-index: 1;height: 700px;width: 700px}
  }
</style>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue和Three.js是两个不同的技术,Vue是一个前端框架,而Three.js是一个基于WebGL的JavaScript库,用于创建3D图形。使用Vue和Three.js可以很方便地实现3D地图场景的展示。 在使用Vue和Three.js创建3D地图时,首先需要设置场景(Scene)、相机(Camera)、光源(Lighting)、对象(Object)等元素,并将它们组合在一起。可以使用Vue的组件化方式来构建这些元素,然后将它们添加到场景中。在设置相机时,需要考虑到相机的位置、方向、FoV等参数,以便实现视角的变换和缩放等操作。 当创建好场景、相机、光源和对象后,可以使用Three.js提供的材质(Material)、纹理(Texture)、几何体(Geometry)等API,来实现对象的样式和效果。例如,可以使用纹理图片来为建筑物、地面等对象添加贴图效果,也可以使用材质来控制对象的表面和反射等特性。 除了基础的场景元素和对象设置外,还可以使用Three.js提供的控制器(Controller)来实现用户交互。例如,可以使用鼠标控制器(OrbitControls)来实现用户通过鼠标操作旋转和缩放场景,或使用触摸控制器(TouchControls)来实现在移动设备上的交互。 最后需要注意的是,3D地图的数据源通常比较大,需要进行优化和压缩。可以使用Vue和Three.js提供的工具和插件,来实现数据的处理和性能的优化。例如,可以使用Vue的懒加载和异步组件,来减少初始化时间和提高页面加载速度;也可以使用Three.js的GeometryUtils和TextureLoader等API,来优化数据加载和渲染性能。 总之,使用Vue和Three.js可以很方便地实现3D地图场景的展示,并且可以通过组件化与API的方式实现更加灵活和丰富的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值