cesium实战(1)、cesium 加载本地json、GeoJson数据

news2024/11/26 9:50:19

1、cesium加载本地图层json图层数据 并设置样式

 添加图层

// 加载路网数据 wms数据服务
    let addRoadLayer = () => {
        Cesium.GeoJsonDataSource.load('/cesium/layers/road_84.json', {
            stroke: Cesium.Color.YELLOW,//多边形或线的颜色 
            strokeWidth: 3,//多边形或线 宽度
            clampToGround:true//多边形或线 固定在地面上true/false 
        }).then((dataSource) => {
            roadLayer = dataSource
            window.earthviewer.dataSources.add(roadLayer).then(data => {
                console.log("加载路网返回的数据", data)
            })
            // window.earthviewer.flyTo(dataSource.entities.values)
        })
    }

移除图层,主要是为了实现图层的显隐也可以使用show控制 看后面方法

    // 移除路网图层
    let removeRoadLayer = () => {
        console.log("oooooo", roadLayer)
        //移除单个
        window.earthviewer.dataSources.remove(roadLayer)

         //移除地图上所有的dataSources
        // window.earthviewer.dataSources.removeAll()
    }

注意:GeoJsonDataSource.load 是一个promise 异步的 如果数据dataSource还没有加载成功,移除会失败的

//错误案例 

let roadLayer = Cesium.GeoJsonDataSource.load('/cesium/layers/road_84.json', {
            stroke: Cesium.Color.YELLOW,//多边形或线的颜色 
            strokeWidth: 3,//多边形或线 宽度
            clampToGround:true//多边形或线 固定在地面上true/false 
        })

 window.earthviewer.dataSources.add(roadLayer).then(data => {
                console.log("加载路网返回的数据", data)
            })


直接使用移除

 window.earthviewer.dataSources.remove(roadLayer)

会移除不成功的

2、GeoJsonDataSource加载本地图层,如何设置图层的层级(相关文档DataSourceCollection相关文档)

lower :将数据源在集合中的位置降低一个位置,移动图层降低一个位置

raise : 将数据源在集合中的位置降低一个位置

lowerToBottom 将数据源降低到集合的底部。

raiseToTop : 将数据源提升到集合的顶部

使用方法:

在 Cesium 中,我们可以使用 CesiumViewer 对象来添加多个地图图层,并通过设置每个图层的顺序来控制它们的显示层级。下面是一个示例代码:

var viewer = new Cesium.Viewer('cesiumContainer');

var imageryLayers = viewer.imageryLayers;

// 添加第一个图层
var layer1 = imageryLayers.addImageryProvider(new Cesium.OpenStreetMapImageryProvider());
layer1.alpha = 0.5;
layer1.name = 'OpenStreetMap';

// 添加第二个图层
var layer2 = imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({assetId: 3845}));
layer2.name = 'Cesium World Imagery';

// 将第二个图层设置为顶层图层
imageryLayers.raise(layer2);

// 将第一个图层设置为底层图层
imageryLayers.lower(layer1);

在这个例子中,我们首先创建了一个新的 CesiumViewer 对象,并获取它的 imageryLayers 属性。然后,我们添加了两个不同的地图图层,分别是 OpenStreetMap 和 Cesium World Imagery。接着,我们通过设置 raiselower 方法来将第二个图层设置为顶层图层,将第一个图层设置为底层图层。

注意,每个图层都有自己的名称和透明度属性,我们可以根据需要为它们设置不同的值。此外,我们还可以使用 remove 方法来删除一个图层

demo示例代码:

let { proxy: { Cesium } } = getCurrentInstance()
    // 图层实例数据
    var roadLayer,
        communityLayer;

    // S 加载路网数据 json图层数据
    let addRoadLayer = () => {
        Cesium.GeoJsonDataSource.load('/cesium/layers/road_84.json', {
            stroke: Cesium.Color.GREEN,//多边形或线的颜色 
            strokeWidth: 3,//多边形或线 宽度
            clampToGround: true//多边形或线 固定在地面上true/false 
        }).then((dataSource) => {
            console.log("ppppppppppp1", dataSource)
            roadLayer = dataSource
            roadLayer.layerName = "road"
            window.earthviewer.dataSources.add(roadLayer).then(data => {
                console.log("加载----------", data, roadLayer)
            })
            // window.earthviewer.flyTo(dataSource.entities.values)
        })
    }
    // 移除路网图层
    let removeRoadLayer = () => {
        console.log("oooooo", window.earthviewer.dataSources)
        window.earthviewer.dataSources.remove(roadLayer)
        // window.earthviewer.dataSources.removeAll()
    }
    // E 路网


    // S 加载社区数据 json图层数据
    let addCommunityLayer = () => {
        Cesium.GeoJsonDataSource.load('/cesium/layers/community_84.json', {
            fill: Cesium.Color.RED.withAlpha(0.6),//多边形或线的颜色 
            // strokeWidth: 3,//多边形或线 宽度
            clampToGround: true//多边形或线 固定在地面上true/false 
        }).then((dataSource) => {
            communityLayer = dataSource
            window.earthviewer.dataSources.add(communityLayer).then(() => {
                console.log("ppppppp", window.earthviewer.dataSources.lowerToBottom)
                 //将社图层设置为底层,路网图层显示在社区图层上方
                window.earthviewer.dataSources.lowerToBottom(communityLayer);
            })

            // window.earthviewer.flyTo(dataSource.entities.values)
        })

    }
    // 移除社区数据
    let removeCommunityLayer = () => {
        window.earthviewer.dataSources.remove(communityLayer)
    }
    // E 社区

3、加载本地json,geojson数据

将json图层文件放到public文件夹下:public/cesium

  // S 加载三维实景数据 3DTile
    add3DTile() {
      xzz3Dtileset = window.earthviewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
          url: `/cesium/3dtile/3dtileset.json`,
          //控制切片视角显示的数量,可调整性能
          maximumScreenSpaceError: 2,//最大的屏幕空间误差  数字越低 视觉效果越好
          maximumNumberOfLoadedTiles: 100000,//最大加载瓦片个数 用于限制 防止数据量过大 占用内存过高
        })
      );
    },
    //移除图层
    remove3DTile() {
      window.earthviewer.scene.primitives.remove(xzz3Dtileset)
    },

4、将图层json、geojson资源文件放到线上服务器中,项目如何加载

将本地文件,例如:3dtileset.json  上传到服务器上,通过绝对地址可以访问到,地址例如:https://www.mapdata.com/map-data/3dtileset.json,在vue中访问注意有可能存在跨域,可以使用代理

  // S 加载三维实景数据 3DTile
    add3DTile() {
      xzz3Dtileset = window.earthviewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
          url: `https://www.mapdata.com/map-data/3dtileset.json`,
          //控制切片视角显示的数量,可调整性能
          maximumScreenSpaceError: 2,//最大的屏幕空间误差  数字越低 视觉效果越好
          maximumNumberOfLoadedTiles: 100000,//最大加载瓦片个数 用于限制 防止数据量过大 占用内存过高
        })
      );
    },
    //移除图层
    remove3DTile() {
      window.earthviewer.scene.primitives.remove(xzz3Dtileset)
    },

vue中如果加载线上图层跨域的话需要配置代理:

vue.config.js或v3 vite.config.js

  devServer: {
    host: "0.0.0.0",
    port: 8080,
    open: true,
    proxy: {
      "/file": {
        // 代理地址
        target: "https://www.mapdata.com/", // 目标代理接口地址,实际跨域要访问的接口,这个地址会替换掉 axios.defaults.baseURL
        // secure: false,
        // changeOrigin: true, // 开启代理,在本地创建一个虚拟服务端
        // ws: true, // 是否启用  websockets;
        pathRewrite: {
          // 去掉 路径中的  /api  的这一截
          "^/file": ""
        }
      }
    }
  }



---------------------------------------------------------------------------------


  // S 加载三维实景数据 3DTile
    add3DTile() {
      xzz3Dtileset = window.earthviewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
          url: `/file/map-data/3dtileset.json`,
          //控制切片视角显示的数量,可调整性能
          maximumScreenSpaceError: 2,//最大的屏幕空间误差  数字越低 视觉效果越好
          maximumNumberOfLoadedTiles: 100000,//最大加载瓦片个数 用于限制 防止数据量过大 占用内存过高
        })
      );
    },
    //移除图层
    remove3DTile() {
      window.earthviewer.scene.primitives.remove(xzz3Dtileset)
    },
分享一段项目中代码:vue2的项目 封装一个mixin,vue3的话也封装了 因为实际老项目是vue2
// load-layers.js

let fileUrl = https://xxxxx.com/file

let xzz3Dtileset,
  roadLayer,
  houseLayer,
  streetLayer,
  communityLayer,
  riverLayer;

let httpUrl = window.location.host;
let ofile = fileUrl
if (httpUrl.includes("localhost")) {
  ofile = '/file'
}
const LoadLayers = {
  data() {
    return {

    };
  },
  beforeDestroy() {
  },
  mounted() {
    console.log("load-layer");
  },
  methods: {
    // S 加载三维实景数据 3DTile
    add3DTile() {
      // 方法一
      xzz3Dtileset = window.earthviewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
          url: `${ofile}/cesium-map/3dtile/3dtileset.json`,
          //控制切片视角显示的数量,可调整性能
          maximumScreenSpaceError: 2,//最大的屏幕空间误差  数字越低 视觉效果越好
          maximumNumberOfLoadedTiles: 100000,//最大加载瓦片个数 用于限制 防止数据量过大 占用内存过高
        })
      );
    },
    remove3DTile() {
      // 方法一
      window.earthviewer.scene.primitives.remove(xzz3Dtileset)
      // 方法二
      // xzz3Dtileset.show = false
    },
    // E 加载三维实景数据 3DTile
    // S 加载街道数据 json图层数据
    addStreetLayer() {
      Cesium.GeoJsonDataSource.load(`${ofile}/cesium-map/layers/street_84.json`, {
        // stroke: Cesium.Color.YELLOW,//多边形或线的颜色 
        // strokeWidth: 3,//多边形或线 宽度
        clampToGround: true//多边形或线 固定在地面上true/false 
      }).then((dataSource) => {
        streetLayer = dataSource
        window.earthviewer.dataSources.add(streetLayer).then(data => {
          window.earthviewer.dataSources.lowerToBottom(streetLayer);
        })
        // window.earthviewer.flyTo(dataSource.entities.values)
      })

    },
    // 移除街道数据
    removeStreetLayer() {
      window.earthviewer.dataSources.remove(streetLayer)
    },
    // E 街道

    // S 加载社区数据 json图层数据
    addCommunityLayer() {
      Cesium.GeoJsonDataSource.load(`${ofile}/cesium-map/layers/community_84.json`, {
        fill: Cesium.Color.RED.withAlpha(0.6),//多边形或线的颜色 
        // strokeWidth: 3,//多边形或线 宽度
        clampToGround: true//多边形或线 固定在地面上true/false 
      }).then((dataSource) => {
        communityLayer = dataSource
        window.earthviewer.dataSources.add(communityLayer).then(() => {
          console.log("ppppppp", window.earthviewer.dataSources.lowerToBottom)
          window.earthviewer.dataSources.lowerToBottom(communityLayer);
        })
        // window.earthviewer.flyTo(dataSource.entities.values)
      })

    },
    // 移除社区数据
    removeCommunityLayer() {
      window.earthviewer.dataSources.remove(communityLayer)
    },
    // E 社区

    // S 加载房屋数据 json图层数据
    addHouseLayer() {
      Cesium.GeoJsonDataSource.load(`${ofile}/cesium-map/layers/house_84.json`, {
        fill: Cesium.Color.BLUE.withAlpha(0.6),
        clampToGround: true,
      }).then((dataSource) => {
        houseLayer = dataSource
        window.earthviewer.dataSources.add(houseLayer)
        // window.earthviewer.flyTo(dataSource.entities.values)
      })

    },
    // 移除房屋数据
    removeHouseLayer() {
      window.earthviewer.dataSources.remove(houseLayer)
    },
    // E 房屋 

    // S 加载河流数据 json图层数据
    addRiverLayer() {
      Cesium.GeoJsonDataSource.load(`${ofile}/cesium-map/layers/river_84.json`, {
        stroke: Cesium.Color.WHITE,//多边形或线的颜色 
        strokeWidth: 5,//多边形或线 宽度
        clampToGround: true//多边形或线 固定在地面上true/false 
      }).then((dataSource) => {
        riverLayer = dataSource
        window.earthviewer.dataSources.add(riverLayer)
        // window.earthviewer.flyTo(dataSource.entities.values)
      })

    },
    // 移除河流数据
    removeRiverLayer() {
      window.earthviewer.dataSources.remove(riverLayer)
    },
    // E 社区

    // S 加载路网数据 json图层数据
    addRoadLayer() {
      Cesium.GeoJsonDataSource.load(`${ofile}/cesium-map/layers/road_84.json`, {
        stroke: Cesium.Color.GREEN,//多边形或线的颜色 
        strokeWidth: 3,//多边形或线 宽度
        clampToGround: true//多边形或线 固定在地面上true/false 
      }).then((dataSource) => {
        roadLayer = dataSource
        window.earthviewer.dataSources.add(roadLayer).then(data => {
          console.log("加载----------", data, roadLayer)
        })
        // window.earthviewer.flyTo(dataSource.entities.values)
      })
    },
    // 移除路网图层
    removeRoadLayer() {
      console.log("oooooo", window.earthviewer.dataSources)
      window.earthviewer.dataSources.remove(roadLayer)
      // window.earthviewer.dataSources.removeAll()
    }
    // E 路网

  }
};

export default LoadLayers;

在组件中使用

import LoadLayers from './cesiumMixin/load-layers.js'


mixins: [CeiumInit, LoadLayers, DrawMarks],


//直接使用

this.add3DTile()

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

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

相关文章

win10/win11 无线显示器 启用输入 的问题分析与解决

win10、win11系统自带了“无线显示器”应用,可以作为接收端接受其他PC或者手机等设备的投屏显示。 但是使用手机等设备投屏,尤其是三星、华为等手机的类PC模式时总会提示“要启用输入,请转到你的电脑,选择“操作中心”>“连接…

连接另一台电脑的虚拟机

在一个局域网中,ping通另一台电脑是件很容易的事。但是经常会遇到,需要ping到另一台电脑里面的虚拟机,因为我们需要连接它的数据库,或者其他服务。 假设PC A要连接PC B上的虚拟机C。 我们需要做的是: 将C与B的网络连…

C语言数据结构(链表概念讲解和插入操作)

文章目录 前言一、什么是链表二、链表的优点和缺点三、链表节点的定义四、初始化链表五、链表的插入1.头部插入2.尾部插入3.中间插入 六、遍历链表七、释放链表总结 前言 本篇文章带大家正式的来学习数据结构,数据结构是学习操作系统,和深入C语言必不可…

影响伦敦金走势的两大因素是什么?

在伦敦金市场中经历过一段时间,很多人发现,其实要精准预测伦敦金的走势,尤其是短线的走势,是非常难的。但是,判断其大势,却是有一定规律的。在投资世界中,伦敦金投资之外的一些品种的涨跌号称是…

Ubuntu22.04安装显卡驱动(高速、避错版)

关于显卡驱动安装踩坑不少坑,前前后后重装了6、7次,总结了一下目前网上的各种安装方式,整理了本文。 目录导航 1 准备工作1.1 关闭安全模式1.2 切换独显模式1.3 更新软件列表和安装必要软件、依赖1.4 禁用nouveau (nouveau是通用的驱动程序)1…

SpringCloud学习路线(5)—— Nacos配置管理

一、统一配置管理 需求: 微服务配置能实现统一的管理,比如希望改动多个配置,但不希望逐个配置,而是在一个位置中改动,并且服务不用重启即用(热更新)。 (一)使用配置管理…

【大模型】与 ChatGPT 齐平、可商用、更强的 LLaMA2 来了

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介论文GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日:Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合,其规模从70亿到…

【极简 亲测】已拦截跨源请求:同源策略禁止读取位于....的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

CORS是Cross-Origin Resource Sharing。 解决 首先这个是浏览器层面的拦截。下面的方法都是解除浏览器拦截的方式。 解除了之后还是有可能其他方面有问题的,但是那个会提示其他错误。 比如CORs Failed之类的,这个是没收到response,大概率是…

施耐德plc编程软件转以太网模块

捷米特JM-ETH-SC 是一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于施耐德Quantumn/Premiun/TSXMicro/Twdio/M200/M218/M221/M241/M238/M25 等系列 PLC 的以太网数据采集…

分布式光伏电站运维平台在石化行业的应用光伏发电数据实时监控

摘要:为实现绿色发展和“净零排放”的目标,近些年来国内外不少能源化工企业进入光伏发电领域。如何做好光伏电站的运行维护,成为石化企业不得不思考的重要课题。本文从分布式光伏电站消防安全、作业安全、环保管理等方面进行思考,…

浮点类型详解及 IEEE754 规定

【C语言趣味教程】(3) 浮点类型:单精度浮点数 | 双精度浮点型 | IEEE754 标准 🔗 《C语言趣味教程》👈 猛戳订阅!!! ​—— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是…

亿发软件:数字化大中型制造企业生产管理应用,实现智慧工厂信息化

随着信息技术与制造业的深度协调,作为企业发展的趋势,大中型制造企业需要拥抱信息化建设。通过运用信息技术和数字化运营,大中型制造企业的生产、设计、经营、管理、后续服务等都实现自动化、智能化。大中型制造企业信息化建设解决方案&#…

Spark(31):Spark性能调优之算子调优

目录 0. 相关文章链接 1. mapPartitions 2. foreachPartition优化数据库操作 3. filter与coalesce的配合使用 4. repartition解决SparkSQL低并行度问题 5. reduceByKey预聚合 0. 相关文章链接 Spark文章汇总 1. mapPartitions 普通的 map 算子对 RDD 中的每一个元素进行…

肖sir___讲解环境__001

1.jdk是什么? jdk是java代码的编译器,可以理解为“翻译”。 (1)windows中jdk是在dos中查询:java -version (2)linux中jdk是在linux服务器查询:java -version ** ** 2、搭建环境服务…

C++初阶 - 3.类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 1.类…

guava-31.1-android.jar时出错; zip file is empty

配置nacos-client时&#xff0c;启动报错guava-31.1-android.jar时出错; zip file is empty 翻看了一下依赖的nacos-api的maven包中&#xff0c;果然有这个版本的guava 在nacos-api中屏蔽掉 <dependency><groupId>com.alibaba.nacos</groupId><artifactI…

【技能实训】DMS数据挖掘项目-Day14

文章目录 任务16【任务16.1】数据的请求和响应【任务16.2】创建JTable的数据适配器类MatchedTableModel&#xff0c;直接从数据库获取数据。 任务16 【任务16.1】数据的请求和响应 数据的请求和响应方法 程序设计 package com.qst.dms.service;import com.qst.dms.net.Requ…

安装 PyCharm

网址&#xff1a;Download PyCharm: Python IDE for Professional Developers by JetBrains 安装文件&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 正在安装&#xff1a; 安装完成&#xff1a;

ubuntu中下载、构建、使用raylib

目录 先决条件 [1]下载raylib方式一方式二 构建 [1]使用终端中使用Clion中使用 先决条件 [1] ubuntu系统上需要先安装GCC, make(或者cmake)和git (下载raylib) 执行下面的命令可以安装GCC,make,cmake,git sudo apt install build-essential git #build-essential是一套工具集…

2020年美国大学生数学建模竞赛A题向北移动解题全过程文档及程序

2020年美国大学生数学建模竞赛 A题 向北移动 原题再现&#xff1a; 全球海洋温度影响某些海洋生物的栖息地质量。当温度变化太大而无法持续生长时&#xff0c;这些物种便开始寻找其他更适合其现在和将来的生活和生殖的栖息地。在美国缅因州的龙虾种群中就可以看到一个例子&am…