首页 > 其他分享 >火星地图引入

火星地图引入

时间:2024-10-11 09:34:09浏览次数:7  
标签:map const 火星 地图 height cesium 引入 path mars3d


<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'
import 'mars3d-space'
import { mapUtil } from '@/tool/mapTool'

// 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() {
        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) {
            // 创建三维地球场景
            var map = new mars3d.Map(`mars3d-container${this.mapKey}`, mapOptions)
            this[`map${this.mapKey}`] = map
            mapUtil.initMap(map, this)
            console.log('>>>>> 地图创建成功 >>>>', map)

            // 监听鼠标移动事件
            map.on(mars3d.EventType.mouseMove, this.showMouseCoordinates)

            // 挂载到全局对象下,所有组件通过 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)
        },

        showMouseCoordinates(event) {
            // 获取鼠标在屏幕上的位置
            const windowPosition = event.endPosition
            // 转换为笛卡尔空间直角坐标
            const cartesian3 = mars3d.PointUtil.getCurrentMousePosition(this.map.scene, windowPosition)
            if (cartesian3) {
                // 将笛卡尔坐标转换为地理坐标(经纬度)
                const position = this.Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3)

                // 将坐标格式化为字符串
                let lng = this.Cesium.Math.toDegrees(position.longitude).toFixed(6)
                let lat = this.Cesium.Math.toDegrees(position.latitude).toFixed(6)
                let height = position.height.toFixed(2)

                let mars3dLngLat = {
                  lng: lng,
                  lat: lat,
                  height: height
                }
                this.$parent.$refs.HomeFooter1.mars3dLngLat = mars3dLngLat
                console.log(`经度:${lng}° 纬度:${lat}° 高程:${height}米`)

                // 更新鼠标位置显示元素的内容
            }
        }
    }
}
</script>

<style lang='less'>
.mars3d-container {
    height: 100%;
    overflow: hidden;
}

/**cesium 工具按钮栏*/
.cesium-viewer-toolbar {
    top: 110px !important;
    right: 18px !important;
}

.cesium-toolbar-button img {
    height: 100%;
}

.cesium-viewer-toolbar>.cesium-toolbar-button,
.cesium-navigationHelpButton-wrapper,
.cesium-viewer-geocoderContainer {
    margin-bottom: 5px;
    float: right;
    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;
    float: right;
}

/**cesium 底图切换面板*/
.cesium-baseLayerPicker-dropDown {
    bottom: -200px;
    right: 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;
}

.cesium-widget {
    canvas {
        width: 100%;
        height: 105%;
        touch-action: none;
    }
}
</style>




vue。confg。vue的配置文件

const path = require('path')
const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')


module.exports = {
  publicPath: '/',
  assetsDir: 'static',
  outputDir: 'dist',
  lintOnSave: false, // 是否开启eslint
  productionSourceMap: false, // 不需要生产环境的 source map
  filenameHashing: true, // 文件名哈希
  // 它支持webPack-dev-server的所有选项
  // devServer: {
  //   host: '0.0.0.0', // 也可以直接写IP地址这样方便真机测试
  //   port: 3001, // 端口号
  //   open: true // 配置自动启动浏览器
  // },

  devServer: {
    // host: '0.0.0.0', // 也可以直接写IP地址这样方便真机测试
    port: 3001, // 端口号
    // open: true, // 配置自动启动浏览器
    proxy: {
      '/navy': {
        // target: 'http://10.18.5.29:9520', // 后台网关地址
        target: 'http://10.18.101.36:9520', // 后台网关地址
        // ws: false,
        changeOrigin: true,
        pathRewrite: {
          '^/navy': ''
        }
      },

      '/server': {
        // target: 'http://10.18.5.29:9520', // 后台网关地址
        target: 'http://10.18.101.36:9520', // 后台网关地址
        // target: 'http://3.128.124.83:9520', // 后台网关地址
        // ws: false,
        changeOrigin: true,
        pathRewrite: {
          '^/server': ''
        }
      },

    }
  },


  configureWebpack: (config) => {
    if (process.env.VUE_APP_MARS3D_SOURCE === 'module') {
      const cesiumSourcePath = 'node_modules/mars3d-cesium/Build/Cesium/' // cesium库安装目录
      const cesiumRunPath = './mars3d-cesium/' // cesium运行时路径

      let plugins = [
        // 标识cesium资源所在的主目录,cesium内部资源加载、多线程等处理时需要用到
        new webpack.DefinePlugin({
          CESIUM_BASE_URL: JSON.stringify(path.join(config.output.publicPath, cesiumRunPath))
        }),
        // Cesium相关资源目录需要拷贝到系统目录下面(部分CopyWebpackPlugin版本的语法可能没有patterns)
        new CopyWebpackPlugin({
          patterns: [
            { from: path.join(cesiumSourcePath, 'Workers'), to: path.join(config.output.path, cesiumRunPath, 'Workers') },
            { from: path.join(cesiumSourcePath, 'Assets'), to: path.join(config.output.path, cesiumRunPath, 'Assets') },
            { from: path.join(cesiumSourcePath, 'ThirdParty'), to: path.join(config.output.path, cesiumRunPath, 'ThirdParty') },
            { from: path.join(cesiumSourcePath, 'Widgets'), to: path.join(config.output.path, cesiumRunPath, 'Widgets') }
          ]
        }),
        new NodePolyfillPlugin()
      ]
      return {
        module: { unknownContextCritical: false }, // 配置加载的模块类型,cesium时必须配置
        plugins: plugins
      }
    } else {
      return {
        externals: { 'mars3d-cesium': 'Cesium' } //排除使用 mars3d-cesium
      }
    }
  },
  css: {
    // 启用 CSS modules
    // requireModuleExtension: false,
    // 是否使用css分离插件
    extract: true,
    // 开启 CSS source maps,一般不建议开启
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {
      sass: {
        prependData: '@import "mars3d-cesium/Build/Cesium/Widgets/widgets.css";',
      },
    },
  },
}


标签:map,const,火星,地图,height,cesium,引入,path,mars3d
From: https://www.cnblogs.com/baozhengrui/p/18457717

相关文章

  • web端使用高德地图逆地理编码
    1、首先去地理/逆地理编码-基础API文档-开发指南-Web服务API|高德地图API注册一下2、点击产品介绍-------地理/逆地理编码  3、创建应用拿到key 创建web服务、看底下有逆地理编码服务4、上一步就能拿到key了最后一步复制底下代码即可<!DOCTYPEhtml><htmlla......
  • Qt/C++加载不同的地图控件/地图类型/缩放标尺/缩略图/比例尺/实时路况/全景视图等
    一、前言说明在展示地图的时候,有些常规的操作,比如调整地图的缩放级别,切换到卫星图等,希望能够在地图上直接操作实现,于是就有了一堆地图控件,可以根据自己的需求动态的添加和删除,这样就更直接更快捷,而不是通过函数去设置。几乎每个地图厂家都提供了类似的控件,尽管命名可能有些差别,常......
  • uniapp引入阿里矢量图
    1.阿里矢量图加入项目,选择iconfont下载 2.选择iconfont.css,iconfont.ttf放入static目录  3.修改iconfont,url注意添加 ~@  不然找不到 4.app.vue全局引入 5.页面中使用 <viewclass='examexam-video'></view>......
  • YOLO11改进|注意力机制篇|引入MSCA注意力机制
    目录一、【MSCA】注意力机制1.1【MSCA】注意力介绍1.2【MSCA】核心代码二、添加【MSCA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【MSCA】注意力机制1.1【MSCA】注意力介绍下图是【MSCA】的结构图,让我......
  • QT5中引入GMSSL库
    近来项目中需要使用加密算法,对上/下位机之间的消息进行加密。客户要求使用国密算法库,不能使用国际上通用的AES、RSA等算法。国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。其中SM1没有开源,其他的均开源。源码编译开源的国密算法全网......
  • YOLOv8改进 - 注意力篇 - 引入SimAM注意力机制
    一、本文介绍作为入门性篇章,这里介绍了SimAM注意力在YOLOv8中的使用。包含SimAM原理分析,SimAM的代码、SimAM的使用方法、以及添加以后的yaml文件及运行记录。二、SimAM原理分析SimAM官方论文地址:SimAM文章SimAM官方代码地址:SimAM源代码​SimAM注意力机制:是一种轻量级的自......
  • YOLOv8改进 - 注意力篇 - 引入EMA注意力机制
    一、本文介绍作为入门性篇章,这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析,EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。二、EMA原理分析EMA官方论文地址:EMA文章EMA代码:EMA代码EMA注意力机制(高效的多尺度注意力):通过重塑部分通道到批次维度,并将......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新Mamba注意力机制MLLAttention
    1. MLLAttention介绍1.1 摘要:Mamba是一种有效的状态空间模型,具有线性计算复杂度。最近,它在处理各种视觉任务的高分辨率输入方面表现出了令人印象深刻的效率。在本文中,我们揭示了强大的Mamba模型与线性注意力Transformer具有惊人的相似之处,而线性注意力Transforme......
  • YOLO11改进|卷积篇|引入轻量级自适应提取卷积LAE
    目录一、【LAE】卷积1.1【LAE】卷积介绍1.2【LAE】核心代码二、添加【LAE】卷积机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【LAE】卷积1.1【LAE】卷积介绍下图是【LAE】卷积的结构图,让我们简单分析一下运行过程......
  • 地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium,不同场景下应如何选择
    目录地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium一、总览二、定制地图美学的先行者——Mapbox1、主要功能特点2、开源情况3、市场与应用人群4、安装与基础使用代码三、开源GIS地图库的全能王——OpenLayers1、主要功能特点2、开源情况3、市场与应......