vue集成mars3d后,basemaps加不上去

news2025/1/16 8:43:24

首先:

<template>

  <div id="centerDiv" class="mapcontainer">

    <mars-map :url="configUrl" @οnlοad="onMapload" />

  </div>

</template>

<script>

import MarsMap from '../components/mars-work/mars-map.vue'

import * as mars3d from 'mars3d'

//npm install mars3d-echarts --save

import 'mars3d-echarts'

const Cesium = mars3d.Cesium

export default {

  // eslint-disable-next-line vue/multi-word-component-names

  name: 'Index',

  components: {

    MarsMap

  },

  data() {

    const basePathUrl = window.basePathUrl || ''

    return {

      configUrl: basePathUrl + 'config/config.json'

    }

  },

  methods: {

    // 地图构造完成回调

    onMapload(map) {

      // 以下为演示代码

      map.setCameraView({ lat: 30.617828, lng: 116.294045, alt: 44160, heading: 357, pitch: -59 })

      // 创建entity图层

      const graphicLayer = new mars3d.layer.GraphicLayer()

      map.addLayer(graphicLayer)

      const tiles3dLayer = new mars3d.layer.TilesetLayer({

        url: '//data.mars3d.cn/3dtiles/bim-qiaoliang/tileset.json',

        maximumScreenSpaceError: 16,

        position: { lng: 117.096906, lat: 31.851564, alt: 45 },

        rotation: { z: 17.5 },

        flyTo: true

      })

      map.addLayer(tiles3dLayer)

      const poiQueryButton = new PoiQueryButton({

        insertIndex: 0 // 插入的位置顺序

      })

      map.addControl(poiQueryButton)

      // 2.在layer上绑定监听事件

      graphicLayer.on(this.mars3d.EventType.click, function (event) {

        console.log('监听layer,单击了矢量对象', event)

      })

      graphicLayer.on(this.mars3d.EventType.mouseOver, function (event) {

        console.log('监听layer,鼠标移入了矢量对象', event)

      })

      graphicLayer.on(this.mars3d.EventType.mouseOut, function (event) {

        console.log('监听layer,鼠标移出了矢量对象', event)

      })

      // 可在图层上绑定popup,对所有加到这个图层的矢量数据都生效

      graphicLayer.bindPopup('我是layer上绑定的Popup', {

        anchor: [0, -10]

      })

      // 可在图层绑定右键菜单,对所有加到这个图层的矢量数据都生效

      graphicLayer.bindContextMenu([

        {

          text: '删除对象',

          iconCls: 'fa fa-trash-o',

          callback: function (e) {

            const graphic = e.graphic

            if (graphic) {

              graphicLayer.removeGraphic(graphic)

            }

          }

        }

      ])

    },

    addDemoGraphic1: (graphicLayer) => {

      const graphic = new mars3d.graphic.LabelEntity({

        position: new mars3d.LngLatPoint(116.1, 31.0, 1000),

        style: {

          text: '火星科技Mars3D平台',

          font_size: 25,

          font_family: '楷体',

          color: '#003da6',

          outline: true,

          outlineColor: '#bfbfbf',

          outlineWidth: 2,

          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,

          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,

          visibleDepth: false

        },

        attr: { remark: '示例1' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic2: (graphicLayer) => {

      const graphic = new mars3d.graphic.PointEntity({

        position: [116.2, 31.0, 1000],

        style: {

          color: '#ff0000',

          pixelSize: 10,

          outline: true,

          outlineColor: '#ffffff',

          outlineWidth: 2

        },

        attr: { remark: '示例2' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic3: (graphicLayer) => {

      const graphic = new mars3d.graphic.BillboardEntity({

        name: '贴地图标',

        position: [116.3, 31.0, 1000],

        style: {

          image: 'img/marker/mark-blue.png',

          scale: 1,

          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,

          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,

          clampToGround: true

        },

        attr: { remark: '示例3' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic4: (graphicLayer) => {

      const graphic = new mars3d.graphic.PlaneEntity({

        position: new mars3d.LngLatPoint(116.4, 31.0, 1000),

        style: {

          plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z, 0.0),

          dimensions: new Cesium.Cartesian2(4000.0, 4000.0),

          materialType: mars3d.MaterialType.Image2,

          materialOptions: {

            image: 'img/textures/poly-rivers.png',

            transparent: true

          }

        },

        attr: { remark: '示例4' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic5: (graphicLayer) => {

      const graphic = new mars3d.graphic.BoxEntity({

        position: new mars3d.LngLatPoint(116.5, 31.0, 1000),

        style: {

          dimensions: new Cesium.Cartesian3(2000.0, 2000.0, 2000.0),

          fill: true,

          color: '#00ffff',

          opacity: 0.9,

          heading: 45,

          roll: 45,

          pitch: 0

        },

        attr: { remark: '示例5' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic6: (graphicLayer) => {

      const graphic = new mars3d.graphic.CircleEntity({

        position: [116.1, 30.9, 1000],

        style: {

          radius: 1800.0,

          color: '#00ff00',

          opacity: 0.3,

          outline: true,

          outlineWidth: 3,

          outlineColor: '#ffffff',

          clampToGround: true

        },

        popup: '直接传参的popup',

        attr: { remark: '示例6' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic7: (graphicLayer) => {

      const graphic = new mars3d.graphic.CylinderEntity({

        position: [116.2, 30.9, 1000],

        style: {

          length: 3000.0,

          topRadius: 0.0,

          bottomRadius: 1300.0,

          color: '#00FFFF',

          opacity: 0.7

        },

        popup: '直接传参的popup',

        attr: { remark: '示例7' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic8: (graphicLayer) => {

      const graphic = new mars3d.graphic.EllipsoidEntity({

        position: new mars3d.LngLatPoint(116.3, 30.9, 1000),

        style: {

          radii: new Cesium.Cartesian3(1500.0, 1500.0, 1500.0),

          color: 'rgba(255,0,0,0.5)',

          outline: true,

          outlineColor: 'rgba(255,255,255,0.3)'

        },

        attr: { remark: '示例8' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic9: (graphicLayer) => {

      const graphic = new mars3d.graphic.ModelEntity({

        name: '消防员',

        position: [116.4, 30.9, 1000],

        style: {

          url: '//data.mars3d.cn/gltf/mars/firedrill/xiaofangyuan-run.gltf',

          scale: 16,

          minimumPixelSize: 100

        },

        attr: { remark: '示例9' }

      })

      graphicLayer.addGraphic(graphic)

    },

    addDemoGraphic10: (graphicLayer) => {

      const graphic = new mars3d.graphic.PolylineEntity({

        positions: [

          [116.5, 30.9, 1000],

          [116.52, 30.91, 1000],

          [116.53, 30.89, 1000]

        ],

        style: {

          width: 5,

          color: '#3388ff'

        },

        attr: { remark: '示例10' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    },

    addDemoGraphic11: (graphicLayer) => {

      const graphic = new mars3d.graphic.PolylineVolumeEntity({

        positions: [

          [116.1, 30.8, 1000],

          [116.12, 30.81, 1000],

          [116.13, 30.79, 1000]

        ],

        style: {

          shape: 'pipeline',

          radius: 80,

          color: '#3388ff',

          opacity: 0.9

        },

        attr: { remark: '示例11' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    },

    addDemoGraphic12: (graphicLayer) => {

      const graphic = new mars3d.graphic.CorridorEntity({

        positions: [

          [116.2, 30.8, 1000],

          [116.22, 30.81, 1000],

          [116.23, 30.79, 1000],

          [116.247328, 30.806077, 610.41]

        ],

        style: {

          width: 500,

          color: '#3388ff'

        },

        attr: { remark: '示例12' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    },

    addDemoGraphic13: (graphicLayer) => {

      const graphic = new mars3d.graphic.WallEntity({

        positions: [

          [116.3, 30.8, 1000],

          [116.31, 30.81, 1000],

          [116.334639, 30.800735, 721.39],

          [116.32, 30.79, 1000]

        ],

        style: {

          closure: true,

          diffHeight: 500,

          // 动画线材质

          materialType: mars3d.MaterialType.LineFlow,

          materialOptions: {

            image: 'img/textures/fence.png',

            color: '#00ff00',

            speed: 10,

            axisY: true

          }

        },

        attr: { remark: '示例13' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    },

    addDemoGraphic14: (graphicLayer) => {

      const graphic = new mars3d.graphic.RectangleEntity({

        positions: [

          [116.383144, 30.819978, 444.42],

          [116.42216, 30.793431, 1048.07]

        ],

        style: {

          color: '#3388ff',

          opacity: 0.5,

          outline: true,

          outlineWidth: 3,

          outlineColor: '#ffffff'

        },

        attr: { remark: '示例14' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    },

    addDemoGraphic15: (graphicLayer) => {

      const graphic = new mars3d.graphic.PolygonEntity({

        positions: [

          [116.510278, 30.834372, 567.29],

          [116.530085, 30.809331, 448.31],

          [116.507367, 30.788551, 98.21],

          [116.472468, 30.823091, 677.39]

        ],

        style: {

          materialType: mars3d.MaterialType.Water,

          materialOptions: {

            normalMap: 'img/textures/waterNormals.jpg', // 水正常扰动的法线图

            frequency: 8000.0, // 控制波数的数字。

            animationSpeed: 0.02, // 控制水的动画速度的数字。

            amplitude: 5.0, // 控制水波振幅的数字。

            specularIntensity: 0.8, // 控制镜面反射强度的数字。

            baseWaterColor: '#006ab4', // rgba颜色对象基础颜色的水。#00ffff,#00baff,#006ab4

            blendColor: '#006ab4' // 从水中混合到非水域时使用的rgba颜色对象。

          }

        },

        attr: { remark: '示例15' }

      })

      graphicLayer.addGraphic(graphic) // 还可以另外一种写法: graphic.addTo(graphicLayer)

    }

  }

}

</script>

<style>

.mapcontainer {

  position: relative;

  height: 100%;

  overflow: hidden;

}

</style>

其次:

<template>

  <div :id="`mars3d-container${mapKey}`" class="mars3d-container"></div>

</template>

<script>

import Vue from "vue";

// 使用免费开源版本

// import "mars3d-cesium/Build/Cesium/Widgets/widgets.css";

// import "mars3d/dist/mars3d.css";

// import * as mars3d from "mars3d";

// const Cesium = mars3d.Cesium;

// let mars3d = window.mars3d;

// 导入插件(其他插件类似,插件清单访问:http://mars3d.cn/dev/guide/start/architecture.html)

// echarts插件

// import 'mars3d-echarts'

// 为了方便使用,绑定到原型链,在其他vue文件,直接 this.mars3d 来使用

// Vue.prototype.mars3d = mars3d

// Vue.prototype.Cesium = mars3d.Cesium

export default {

  name: "mars3dViewer",

  props: {

    // 地图唯一性标识

    mapKey: {

      type: String,

      default: "",

    },

    // 初始化配置config.json的地址

    url: String,

    // 自定义参数

    options: Object,

  },

  mounted() {

    window.mars3d.Resource.fetchJson({ url: this.url }).then((data) => {

      // 构建地图

      this.initMars3d({

        ...data.map3d,

        ...this.options,

      });

    });

  },

  beforeDestroy() {

    const map = this[`map${this.mapKey}`];

    if (map) {

      map.destroy();

      delete this[`map${this.mapKey}`];

    }

    console.log(">>>>> 地图卸载完成 >>>>");

  },

  methods: {

    initMars3d(mapOptions) {

      console.log(mapOptions);

      // if (this[`map${this.mapKey}`]) {

      //   this[`map${this.mapKey}`].destroy();

      // }

      // 创建三维地球场景

      var map = new window.mars3d.Map(

        `mars3d-container${this.mapKey}`,

        mapOptions

      );

      this[`map${this.mapKey}`] = map;

      console.log(">>>>> 地图创建成功 >>>>", map);

      // 挂载到全局对象下,所有组件通过 this.map 访问

      // Vue.prototype[`map${this.mapKey}`] = map

      // 绑定对alert的处理,右键弹出信息更美观。

      // window.haoutil = window.haoutil || {}

      // window.haoutil.msg = (msg) => {

      //   this.$message.success(msg)

      // }

      // window.haoutil.alert = (msg) => {

      //   this.$message.success(msg)

      // }

      // 抛出事件

      this.$emit("onload", map);

    },

  },

};

</script>

<style>

.mars3d-container {

  height: 100%;

  overflow: hidden;

}

/**cesium 工具按钮栏*/

.cesium-viewer-toolbar {

  top: auto !important;

  bottom: 35px !important;

  left: 12px !important;

  right: auto !important;

}

.cesium-toolbar-button img {

  height: 100%;

}

.cesium-viewer-toolbar > .cesium-toolbar-button,

.cesium-navigationHelpButton-wrapper,

.cesium-viewer-geocoderContainer {

  margin-bottom: 5px;

  float: left;

  clear: both;

  text-align: center;

}

.cesium-button {

  background-color: #3f4854;

  color: #e6e6e6;

  fill: #e6e6e6;

  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);

  line-height: 32px;

}

/**cesium 底图切换面板*/

.cesium-baseLayerPicker-dropDown {

  bottom: 0;

  left: 40px;

  max-height: 700px;

  margin-bottom: 5px;

}

/**cesium 帮助面板*/

.cesium-navigation-help {

  top: auto;

  bottom: 0;

  left: 40px;

  transform-origin: left bottom;

}

/**cesium 二维三维切换*/

.cesium-sceneModePicker-wrapper {

  width: auto;

}

.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon {

  float: right;

  margin: 0 3px;

}

/**cesium POI查询输入框*/

.cesium-viewer-geocoderContainer .search-results {

  left: 0;

  right: 40px;

  width: auto;

  z-index: 9999;

}

.cesium-geocoder-searchButton {

  background-color: #3f4854;

}

.cesium-viewer-geocoderContainer .cesium-geocoder-input {

  background-color: rgba(63, 72, 84, 0.7);

}

.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus {

  background-color: rgba(63, 72, 84, 0.9);

}

.cesium-viewer-geocoderContainer .search-results {

  background-color: #3f4854;

}

/**cesium info信息框*/

.cesium-infoBox {

  top: 50px;

  background: rgba(63, 72, 84, 0.9);

}

.cesium-infoBox-title {

  background-color: #3f4854;

}

/**cesium 任务栏的FPS信息*/

.cesium-performanceDisplay-defaultContainer {

  top: auto;

  bottom: 35px;

  right: 50px;

}

.cesium-performanceDisplay-ms,

.cesium-performanceDisplay-fps {

  color: #fff;

}

/**cesium tileset调试信息面板*/

.cesium-viewer-cesiumInspectorContainer {

  top: 10px;

  left: 10px;

  right: auto;

  background-color: #3f4854;

}

</style>

问题的原因是:

服务有返回东西,使用的就是示例中的配置;数据正常返回了,mock拦截机制的原因,自行处理把mock注释掉就解决了。

 

 

 

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

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

相关文章

如何利用 CRM 做好销售渠道管理?

销售渠道管理是成功销售战略的一个重要方面。它涉及建立、跟踪和组织销售流程的各个阶段&#xff0c;以确保顺利、高效地将潜在客户转化为付费客户。 销售渠道管理为跟踪和优先处理交易提供了一个清晰的框架&#xff0c;采用销售渠道漏斗模板可以进一步简化流程。通过有效管理…

Linux系统下vim常用命令

一、基础命令&#xff1a; v:可视模式 i:插入模式 esc:命令模式下 :q &#xff1a;退出 :wq &#xff1a;保存并退出 ZZ&#xff1a;保存并退出 :q! &#xff1a;不保存并强制退出二、在Esc下&#xff1a; dd : 删除当前行 yy:复制当前行 p:复制已粘贴的文本 u:撤销上一步 U:…

使用Python和systemctl管理Linux系统服务的简便工具

前言 本文介绍了一个实用工具&#xff0c;用于在Linux系统上管理systemctl服务。该工具提供了创建、安装、卸载、启动和停止服务的功能&#xff0c;帮助用户轻松地管理和控制正在运行的服务。 通过使用该代码&#xff0c;你可以轻松地执行以下操作&#xff1a; 创建服务文件&…

解决centos离线安装cmake找不到OpenSSL问题

安装方法&#xff1a;见另外一篇文章 https://blog.csdn.net/zhongxj183/article/details/118488629 按照文章下载了离线gcc 和OpenSSL&#xff0c;以及在cmake官网下载了最新版 cmake-3.27.4.tar.gz 顺利安装gcc 和OpenSSL 但执行编译cmake时&#xff0c;报错找不到OpenSSL…

软考A计划-网络工程师-必考知识点-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

液冷连接器快速接头

液冷连接器快速接头常用介质 水、乙二醇水溶液、纯乙二醇、空调制冷剂和硅油等。 液冷连接器快速接头应用 强振动冷却回路手动连接雷达数据中心电子冷却吊舱 液冷连接器快速接头材质 主体材料不锈钢或经表面处理的铝合金 密封圈选用低温硅橡胶或HNBR 液冷连接器快速接头主…

5G智能网关如何解决城市停车痛点难点

2023年上半年&#xff0c;我国汽车新注册登记1175万辆&#xff0c;同比增长5.8%&#xff0c;88个城市汽车保有量超过100万辆&#xff0c;北京、成都等24个城市超过300万辆。随着车辆保有量持续增加&#xff0c;停车难问题长期困扰城市居民&#xff0c;也导致城市路段违停普遍、…

架构设计:Docker容器化部署

在现代软件开发和部署中&#xff0c;Docker 容器化技术已经成为一种重要的解决方案。它不仅简化了应用程序的构建和部署过程&#xff0c;还提供了跨环境一致性、可移植性和高效性。本文将介绍一个完整的 Docker 容器化部署架构设计&#xff0c;帮助您深入了解如何将应用程序成功…

mysql中的with

概念 WITH 子句是 MySQL 中的一种 SQL 结构&#xff0c;又称为 Common Table Expression (CTE)。它在不影响原有 SQL 语句的情况下&#xff0c;允许开发人员临时创建一个内存中的结果集&#xff0c;然后对其进行操作。 作用 WITH 子句的主要用途是创建一个暂时的结果集&…

NewStarCTF 2022 web方向题解 wp

----------WEEK1---------- BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP] 先看题目&#xff0c;要传参加绕过。 分析一下代码&#xff1a;首先get一个datadata://test/plain,Wel…。然后key1和2用数组可以绕过。num2077a可以绕过弱类型。eval()中的php语句被#注释了&#xff0c…

SpringBoot中间件ElasticSearch

Elasticsearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的 全文搜索引擎 &#xff0c;基于RESTful web 接口。 Elasticsearch 是用 Java 语言开发的&#xff0c;并作为 Apache 许可条款下的开放源码发布&#xff0c;是一种流行的企业级搜索引擎。Elastics…

软考(一)进制的表示(二进制,八进制,十进制,十六进制)

进制的转换 一、进制的表示 二进制&#xff08;B&#xff09;&#xff1a; 0 , 1 , 10 , 11 , 100 , 101 , 110 , 111 , 1000 0,1,10,11,100,101,110,111,1000 0,1,10,11,100,101,110,111,1000 对应的十进制是&#xff1a; 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 0,1,2,3,4,5,6…

视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

长安链并行调度机制(2):DAG构建和从节点执行流程

长安链采用高效的并行调度方式执行交易&#xff0c;了解长安链交易调度、冲突检测和DAG构建流程有助于开发者更好地理解长安链并行调度的运行机制&#xff0c;帮助开发者编写高质量、低冲突的智能合约&#xff0c;更好地构建区块链应用。 上一篇内容我们说明了长安链交易调度、…

STM32驱动SD卡(SPI)方式

外观 代码(免费分享) 接线 5V供电 CS接PA3 剩下如图按照硬件SPI1接线 注意事项 使用杜邦线接线非常不稳定&#xff01;&#xff01;&#xff01; 使用杜邦线接线非常不稳定&#xff01;&#xff01;&#xff01; 使用杜邦线接线非常不稳定&#xff01;&#xff01;&#…

如何将 Animate 动画与 After Effects 中的 Cinema 4D 渲染合并?

如何将手动动画 2D 元素添加到 3D 渲染中&#xff0c;有多种方法可以做到这一点&#xff0c;但您需要确保在动画的两侧都进行设置&#xff0c;以确保在合成时能够充分利用资源。上面的视频确实贯穿了一个非常实用且高效的工作流程&#xff0c;以实现正确的这些效果。 创建参考…

沉浸式VR虚拟实景样板间降低了看房购房的难度

720 全景是一种以全景视角为特点的虚拟现实展示方式&#xff0c;它通过全景图像和虚拟现实技术&#xff0c;将用户带入一个仿佛置身其中的沉浸式体验中。720 全景可以应用于旅游、房地产、展览等多个领域&#xff0c;为用户提供更为直观、真实的体验。 在房地产领域&#xff0c…

乡村振兴战略下传统村落文化旅游设计书辉瑞

乡村振兴战略下传统村落文化旅游设计书辉瑞

vue3+ts+tinynce富文本编辑器+htmlDocx+file-saver 配合实现word下载

vue3 请下载html-docx-js-typescript&#xff0c;否则会报错类型问题 //报告导出word import * as htmlDocx from "html-docx-js-typescript";//ts-ignore import { saveAs } from file-saver// 下载文件&#xff0c; const downloadFile (row)> {try {const co…

24个非常实用的Python小技巧

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 1.唯一性 以下方法可以检查给定列表是否有重复的地方&#xff0c;可用set&#xff08;&#xff09;的属性将其从列表中删除。 x [1,1,2,2,3,2,3,4,5,6] y [1,2,3,4,5] len(x) len(set(x)) # False len(y) len(set(y)) # Tr…