【Cesium学习(四)】Cesium初始化map的简单封装

Cesium 之加载在线底图(天地图、高德、百度、腾讯、谷歌等并实现偏移纠正) 在线底图常用坐标系包括: 1、WGS84 地心坐标系,是为GPS全球定位系统使用而建立的坐标系,Cesium地理坐标系默认采用该坐标系。 2、CGCS 2000 国家2000大地坐标系,天地图所采用的坐标系 3、GCJ-02 国测局坐标系,也叫火星坐标系, 1)国测局02年发布的坐标体系,它是一种对经纬度数据的加密算法,即加入随机的偏差。 2)互联网地图在国内必须至少使用GCJ-02进行首次加密,不允许直接使用WGS-84坐标下的地理数据,同时任何坐标系均不可转换为WGS-84坐标。 3) 阅读详情

封装初始化map的好处

1、在项目中多个页面调用地图的初始化方法就不需要每次都写一大堆参数,同时支持不同页面的地图设置不同的初始化参数

2、防止传入非cesium api文档的参数字段导致可能产生异常

在项目中创建一个js文件

我是在utils文件夹中创建一个initCesium.js
在这里插入图片描述

const CESIUMTOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3YmZkZTViZS1kMT。。。';
const cesiumDefaultOptions = {
    animation: false, //是否显示动画控件
    baseLayerPicker: false, //是否显示图层选择控件
    fullscreenButton: false, //是否显示全屏按钮
    vrButton: false, // vr部件
    geocoder: false, // 位置搜索部件
    homeButton: false, //是否显示Home按钮
    infoBox: false, //是否显示点击要素之后显示的信息
    sceneModePicker: false, // 二三维切换部件
    timeline: false, //是否显示时间线控件
    navigationHelpButton: false, //是否显示帮助信息控件
    navigationInstructionsInitiallyVisible: false, // 导航说明显示
    scene3DOnly: true, //每个几何实例将只能以3D渲染以节省GPU内存

    shouldAnimate: true,
    // selectedImageryProviderViewModel: undefined, //当前图像图层的显示模型,仅baseLayerPicker设为true有意义
    // imageryProviderViewModels: Cesium.createDefaultImageryProviderViewModels(), //可供BaseLayerPicker选择的图像图层ProviderViewModel数组
    // selectedTerrainProviderViewModel: undefined, //当前地形图层的显示模型,仅baseLayerPicker设为true有意义
    // terrainProviderViewModels: Cesium.createDefaultTerrainProviderViewModels(), //可供BaseLayerPicker选择的地形图层ProviderViewModel数组
    // skyBox: false,  // 配置天空盒子或不显示天空盒子
    // skyAtmosphere: false, // 配置大气或不显示大气

    useDefaultRenderLoop: true, // 控制是否继续渲染
    // targetFrameRate: 30, // 控制渲染帧数
    maximumScreenSpaceError: 64, //屏幕空间最大误差
    showRenderLoopErrors: false, // 报错是否弹出错误
    useBrowserRecommendedResolution: false, // 设置为false使用window.devicePixelRatio属性
    automaticallyTrackDataSourceClocks: false, // 设置成true,使用公共clock对象,设置false,所有功能使用独立clock对象
    contextOptions: {
        webgl: {
            preserveDrawingBuffer: !0,
        },
        // requestWebgl2: true,
    }, // 创建场景时,配置webgl
    sceneMode: 3, //初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneMode
    // orderIndependentTranslucency: true, // 如果为true且配置支持,则使用顺序无关的透明性。
    // creditContainer: document.getElementById("units"), // 部件容器
    // creditViewport: '', // 提示显示容器
    // dataSources: new Cesium.DataSourceCollection(), // 小部件数据源设置
    // terrainExaggeration: 1.0, // 夸大地形
    shadows: false, // 是否打开阴影
    terrainShadows: Cesium.ShadowMode.DISABLED, // 是否打开地形阴影
    resolutionScale: 1, //清晰度 0-1
    // mapMode2D: Cesium.MapMode2D.INFINITE_SCROLL, // 设置2D地图水平旋转
    // projectionPicker: false, // 设置为true,  ProjectionPicker部件会被创建,    ProjectionPicker:设置地球最佳视角
    // 如果为真,渲染帧只会在需要时发生,这是由场景中的变化决定的。启用可以减少你的应用程序的CPU/GPU使用,并且在移动设备上使用更少的电池,但是需要使用Scene#requestRender在这种模式下显式地渲染一个新帧。在许多情况下,在API的其他部分更改场景后,这是必要的。请参阅使用显式呈现提高性能。
    // 不是特别明白,应该是提高渲染性能的
    requestRenderMode: true, //启用请求渲染模式
    // 如果requestRenderMode为true,这个值定义了在请求渲染之前允许的模拟时间的最大变化。请参阅使用显式呈现提高性能。
    maximumRenderTimeChange: Infinity,

    fullscreenElement: document.body, //全屏时渲染的HTML元素 暂时没发现用处

    imageryProvider: false,
};
const cesiumOptionsKeys = [
    'animation',
    'baseLayerPicker',
    'fullscreenButton',
    'vrButton',
    'geocoder',
    'homeButton',
    'infoBox',
    'sceneModePicker',
    'selectionIndicator',
    'timeline',
    'navigationHelpButton',
    'navigationInstructionsInitiallyVisible',
    'scene3DOnly',
    'shouldAnimate',
    'clockViewModel',
    'selectedImageryProviderViewModel',
    'imageryProviderViewModels',
    'selectedTerrainProviderViewModel',
    'terrainProviderViewModels',
    'imageryProvider',
    'terrainProvider',
    'skyBox',
    'skyAtmosphere',
    'fullscreenElement',
    'useDefaultRenderLoop',
    'targetFrameRate',
    'showRenderLoopErrors',
    'useBrowserRecommendedResolution',
    'automaticallyTrackDataSourceClocks',
    'contextOptions',
    'sceneMode',
    'mapProjection',
    'globe',
    'orderIndependentTranslucency',
    'creditContainer',
    'creditViewport',
    'dataSources',
    'shadows',
    'terrainShadows',
    'mapMode2D',
    'projectionPicker',
    'blurActiveElementOnCanvasFocus',
    'requestRenderMode',
    'maximumRenderTimeChange',
    'depthPlaneEllipsoidOffset',
    'msaaSamples',
];

/**
 *
 * @params opts.mapId  {string}  地图容器ID
 * @params opts.XXX    {none}    其他参数按照官方文档里的传即可
 * @returns
 */
export function initCesium(opts) {
    let constructorOptions = {};
    let options = { ...cesiumDefaultOptions, ...opts };

    for (let k in options) {
        if (cesiumOptionsKeys.indexOf(k) > -1) {
            constructorOptions[k] = options[k];
        }
    }

    Cesium.Ion.defaultAccessToken = CESIUMTOKEN;

    let viewer = new Cesium.Viewer(options.mapId, {
        ...constructorOptions,
    });

    return viewer;
}

使用

在组件中引入js,然后再页面初始化是调用方法

<script>
import * as Cesium from 'cesium';
import { initCesium } from '../../utils/js/initCesium';
import 'cesium/Build/Cesium/Widgets/widgets.css';
let url = 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}';
export default {
    data() {
        return {
            map: {},
        };
    },
    components: {},
    created() {},
    beforeMount() {},
    mounted() {
        this.initMap();
    },
    computed: {},
    methods: {
        initMap() {
            let viewer = initCesium({
                mapId: 'cesiumContainer',
                infoBox: false,
                //> 设置地图
                imageryProvider: new Cesium.UrlTemplateImageryProvider({ url }),
            });
        },
    },
};
Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图) 详细介绍了Cesium加载影像图层的类、方法和步骤,举例说明加载ArcGIS地图、Bing地图、Mapbox地图、高德地图、腾讯地图、天地图等各类影像图的加载方法 阅读详情

相关推荐

vue中map对象共享方式(mapbox-gl、Cesium)

在vue中集成mapbox-gl或者Cesium的开发中,未将mapbox-gl和Cesium封装vue组件,简便期间,直接将mapbox-gl中的实例化map对象进行整个工程共享,将Cesium中初始化的viewer进行共享,达到每个vue组件可以直接访问,从而实现操控地图。 使用这种方式时,工程中就一个地图,不同的功能进行数据切换、对象加载,特别是在Cesium中,地图每次加载还是需要一定时间的,对于不需要显示地图的场景,将地图盖住就可以。当然,对于一些开发中的代码解耦,这样的操作可能不太合适了。 以C

地理信息技术杂谈 博客,欢迎技术交流 1384

Cesium-Map 项目使用教程

Cesium-Map 项目的目录结构如下: ``` cesium-map/ ├── docs/ ├── examples/ ├── src/ │ ├── assets/ │ ├── components/ │ ├── config/ │ ├── utils/ │ └── main.js ├── .gitignore ├── package.json └── README.md...

gitblog_00787的博客 501

私藏篇:【Cesium 学习地图】一份超全资源清单,请收好!

本专栏旨在手把手带你从零开始,基于开源三维地球引擎 Cesium 封装一套功能完善、可复用的 WebGIS 增强型 SDK。内容涵盖核心封装思路、关键代码实现、常用 GIS 功能抽象,以及基于该 SDK 构建的 UI 组件库开发。

总得学点什么的博客 1317

cesium-map

访问的是 cesium===》My Assets 列表里面的地图数据。

boringmembership的博客 922

Vite+Vue3+Cesium工程搭建及初始化

cesium 中的一些资源文件是本地静态的,比如地球背后的宇宙贴图以及界面小组件的图标。这些文件必须放在项目中的静态文件夹之下,这些文件存在与 cesium 依赖包中的Build文件夹底下的Cesium文件夹之下,我们必须把整个 cesium 文件夹搬迁至项目中的 public 文件夹之下。现如今的前端更新太快了,我记得我一年前还在写 vue2+cesium 的工程构建方式。注意我们 public 文件夹是不需要写文件路径的,系统会自动帮我们锁定为根目录,也就是说直接写 Cesium/就好。

lz5211314121的博客 1183

基于Cesium的三维沙盘

现今的可视化系统中,沙盘常用于大屏效果的展现,它可以突出重点需要表现区域,结合特效,可以表现的更加立体,更具科技感。以往制作沙盘效果,更多的需要美工对沙盘的区域进行设计,然后贴到地图中,工作量大,而且贴图的空间位置常常有偏差。我们需要一种更加通用,节省工作量的方法。在以下实现中,不同地区的沙盘效果,我们只需要更换沙盘的边界文件(GeoJson文件)就可以。当然我们可以根据项目需要更换掉沙盘背景,以及调整边界的粗细,颜色,来更加的贴合实际的项目。

星云数海的博客,一个专注GIS十多年的GISer人。 1156

Cesium学习笔记——随机生成大面积云及封装

在之前的笔记中,我们了解了如何用Cesium内置的CumulusCloud制作积云,但是,在实际项目中一般都是大面积生成云朵,而不是手动生成。这一次,我们来学习一下如何大面积生成积云。随机生成大面积云一共分3步,首先,绘制一个面,然后,在面内随机生成点的坐标,最后在这些地方生成云朵就好了。

mingyu_mingyu的博客 1666

03-Cesium轨迹线封装类

Cesium轨迹线封装类

fxshy的博客 365

Cesium:初始化地图

本文介绍了如何在Vue项目中集成Cesium地图库的详细步骤。首先通过npm安装Cesium,然后将Cesium资源文件复制到public目录并引入HTML。在Vue组件中初始化地图时,配置了高德地图作为默认底图(无需Token),并隐藏了所有控制UI元素。文章提供了完整的代码示例,包括地图容器设置、初始化方法实现和样式配置,最终实现了基础3D地图展示功能,适合本地开发环境使用。

Miss_Y0的博客 435

基于Cesium的流动效果

流动效果最经常应用的点就是水流方向或行进方向的表示,而在水流表示中,还可以结合颜色,粗细来表现河宽、水深等。本文中提供了一个基于图片的流动效果,实际应用中可以设计相关的图片进行不同流动效果的表现。

星云数海的博客,一个专注GIS十多年的GISer人。 1129

Vue3 + Cesium 从入门到实战:初始化、组件封装与性能优化

在三维GIS与前端可视化开发中,Vue3与Cesium的集成是高频需求,但常因模块化资源加载和响应式代理问题而陷入困境。从基础原理看,Cesium作为大型三维地球引擎,其ESM入口与静态资源路径需要与Vite构建策略对齐;而Vue3的深度响应式代理对Cesium实例的干扰,则需要用shallowRef规避。正确处理后,即可通过组件化封装实现地图的初始化、销毁与数据联动,并进一步扩展动态光照、自定义箭头线、雷达扫描、热力图、MVT加载等复杂效果。同时,针对3D Tiles的LOD策略、GPU优先模式等性能调优

weixin_29008691的博客 64

Cesium 地图覆盖物事件注册封装

mouseover和mouseout事件注册同一个InputAction MOUSE_MOVE,在回调中获取鼠标指针上的覆盖物,触发mouseover事件,此时标记当前移入的覆盖物,如果下次MOUSE_MOVE事件未获取到该鼠标指针上的覆盖物,则触发mouseout事件。Cesium中的事件监听支持的类型与前端主流的事件有差别(没有mouseover,mouseout等事件),封装一个较为通用的事件管理器。一个的map,用于保存注册事件的覆盖物。基于Cesium版本1.95。

qq_44381427的博客 724

Vue3+Cesium 三维地图开发实战:初始化、动态效果与性能优化

三维GIS可视化是当前前端工程化中的重要方向,它结合三维地球引擎与前端框架解决复杂空间数据展示问题。Cesium作为主流的三维地球引擎,基于WebGL实现了全球影像、地形、矢量及3D Tiles的高效渲染;Vue3则提供了组合式API与响应式系统,使场景生命周期管理和数据驱动视图更为顺畅。在实际项目中,开发者常面临相机飞行时周边加载低精度资源的性能取舍,也会遇到雷达光波、模型节点控制、MVT数据接入等高频需求。通过将Cesium封装为Vue3可组合函数,利用markRaw避免响应式代理损耗,并在相机移动结束

weixin_32943857的博客 202

【Cesium学习(八)】Cesium设置材质

今天我们将学习Cesium对entity实体设置材质,在Cesium中为实体及几何行状设置材质有多个方法。我们可以在创建实体的时候直接构件Cesium.Material对象,再通过设置Material的属性来进行各种材质的控制,具有实例和API我们可以看官网的描述。颜色材质是我们最常用到的材质,他可以将实体设置成不同的颜色,以到达实体醒目的作用及其他作用,通常和鼠标移动或者点击事件来联动展示。

HAI_GUI的博客 4291

嘉立创EDA vs Altium Designer:新手如何选择?从界面到实战全对比

本文全面对比了嘉立创EDA与Altium Designer(AD)两大PCB设计工具,从设计哲学、界面交互、封装库管理、设计规则引擎、协作功能到成本生态六大维度进行深入分析。嘉立创EDA以极简设计和云端协作为特色,适合学生和创客快速上手;而AD则凭借专业级精准控制,成为高端电子设计的行业标准。通过实战案例和详细对比表格,帮助新手根据项目需求选择合适的EDA工具。

weixin_30296405的博客 720

iOS开发者必备:从越狱设备里提取IPA的三种方法(含Filza、iTools实战)

本文详细介绍了iOS开发者从越狱设备提取IPA文件的三种实用方法,包括使用Filza文件管理器、AFC2配合桌面工具以及命令行高级技术。内容涵盖环境准备、操作步骤和技术原理,帮助开发者高效获取应用包文件,适用于逆向工程、测试分析等场景。

weixin_28717969的博客 812

Cesium模型封装-模型移动

【代码】Cesium模型封装-模型自动移动。

StupidlyGrass的博客 646

【报错】sqli-labs靶场搭建出现“Unable to connect to the database: security”

搭建sqli-labs靶场时,“Unable to connect to the database: security”报错解决

九芒星的博客 2991

从零搭建Cesium+vue3+vite

在现代前端开发中,Cesium 是一个功能强大的 WebGL 库,广泛应用于3D地球可视化、空间数据展示等领域。结合 Vue 3 的组件化开发模式,我们可以创建一个高效且可维护的 3D 地图应用。本文将带你一步步搭建一个简单的 Cesium + Vue 3 项目,并且对各个功能模块进行细致划分,帮助你快速上手。通过本篇教程,我们完成了从零搭建 Cesium + Vue 3 项目的基础步骤,并展示了如何使用 Cesium 渲染 3D 地图和进行简单的自定义操作。

Zhyonyu的博客 7462

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

Cesium三维地图入门教程

Cesium是一个用于显示三维地球的开源库,旨在释放3D数据的力量。Cesium基于WebGL技术,能够在Web平台搭建虚拟地球及场景展示应用。

知心宝贝的博客 4113

PyWxDump实战:解密微信PC端本地数据库,实现聊天记录备份与分析

数据加密是保护敏感信息(如聊天记录)的核心技术,它通过特定算法将明文转换为密文,确保数据在存储和传输过程中的机密性。SQLCipher作为SQLite的加密扩展,采用AES-256算法对数据库文件进行页级加密,广泛应用于移动端和桌面端应用的数据保护。其技术价值在于,在保障用户隐私的前提下,为合规的数据备份、归档与分析提供了底层支持。在数据恢复、司法取证或合规审计等场景中,获取并解析此类加密数据是关键步骤。PyWxDump正是针对微信PC端本地SQLCipher加密数据库设计的工具,它通过逆向工程分析内存结构

450

vue+js+cesium绘制多边形及常用函数封装

vue+js+cesium绘制多边形及常用函数封装

weixin_46653941的博客 2761

海康威视门禁考勤设备数据对接实战:从被动推送到主动拉取

本文深入探讨了海康威视门禁考勤设备数据对接的两种核心方案:HTTP推送与SDK主动拉取。文章对比了两种方式的适用场景、技术实现与优缺点,为开发者提供了从设备配置、代码编写到工程化部署的完整实战指南,帮助读者根据项目规模、网络环境及数据稳定性要求,做出最合适的技术选型。

weixin_29284657的博客 670

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)

量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。

学习,输出==》再学习再输出 1213
上一篇: 【Cesium学习(二)】Cesium在Vue项目中搭建开发
下一篇: 【Cesium学习(三)】Viewer界面基础介绍及组件显影
龟中的程序员
博客等级 码龄7年 328粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值