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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【优选算法题练习】day6

文章目录 一、76. 最小覆盖子串1.题目简介2.解题思路3.代码4.运行结果 二、704. 二分查找1.题目简介2.解题思路3.代码4.运行结果 三、34. 在排序数组中查找元素的第一个和最后一个位置1.题目简介2.解题思路3.代码4.运行结果 总结 一、76. 最小覆盖子串 1.题目简介 76. 最小覆…

Selenium(3 + 4 超级详细笔记)

文章目录 selenium(web自动化测试)1. selenium初始化(2种)2. chrome 启动参数(3种)3. 八大定位方式3.1 css 定位3.2 xpath 定位3.3 link_text 定位3.4 partial_link_text 定位3.5 relative 相对定位 4. 添加…

OpenCv之图像轮廓

目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 一、图像轮廓定义 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析物体的识别与检测 注意点: 为了检测的准确性,需要先对图像…

采集传感器的物联网网关怎么采集数据?

随着工业4.0和智能制造的快速发展,物联网(IoT)技术的应用越来越广泛,传感器在整个物联网系统中使用非常普遍,如温度传感器、湿度传感器、光照传感器等,对于大部分物联网应用来说,采集传感器都非…

JVM系统优化实践(20):GC生产环境案例(三)

您好,这里是「码农镖局」CSDN博客,欢迎您来,欢迎您再来~ 某新手开发工程师接到了一个保存Elasticsearch日志的任务,以供后续分析之用。但写代码的时候,误将保存日志的代码段弄成了无限循环,程序…

C#盯盘小工具,“监”

也是一个小工具,用来看大A股票和主要指数行情的。 如果你是一个上班族,同时你也是一颗小韭菜,a股在开市交易盘中时刻惦记着股票是涨了还是跌了,却不能时刻盯着手机看行情,也不能在电脑上开着同花顺来回切窗口&#xff…

数据可视化自助式分析工具:jvs-bi数据扩展及函数配置说明

jvs-bi数据拓展节点 数据拓展是数据可视化加工过程中的重要工具,它核心的作用是对原有数据表进行加工扩展,实现功能如下图所示 函数配置操作过程 操作说明 1、拖动数据拓展字段,并将字段拓展与之前的历史节点连接起来,点击数据拓…

全面深入理解MySQL自增锁

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

在 3ds Max 中对链模型进行摆放姿势处理

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 建模和“摆姿势”3D链可能看起来是一项繁琐的工作,但实际上可以通过使用阵列工具并将链中的链接视为骨骼来轻松完成。在本教程中,我将向您展示如何对链条进行建模,并通过…

16. 存储过程和存储函数

文章目录 1.存储过程和存储函数2.创建和使用存储过程2.1 语法:2.2 第一个存储过程,打印hello world2.3 调用语法2.4 带参数的存储过程2.5 调试存储过程 3.创建和使用存储函数3.1 存储函数定义3.2 存储函数语法:3.3 存储函数案例: …

C++初探

目录 经典开头 — C的历史 作用域运算符 using的用法 命名空间 - namespace 命名空间的基本使用 特殊的命名空间 - 无名命名空间 全部展开和部分展开 std — C所有的标准库都在std命名空间内 省缺值 - 默认参数 占位参数 内联函数 - inline 函数重载 函数重载的用…

如何撤销git上一次的commit(或已push)

如何撤销git上一次的commit(或已push) 当多人开发时,我们本地commit后,刚要push,发现忘记pull最新代码,此时会有冲突push失败, 我们想要撤销最近的一次commit 我们先简单介绍一下git git有三大…

Python爬虫——urllib_ajax的get请求爬取豆瓣电影前十页

ajax: 就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: 一定会有 url,请求方法(get, post),可能有数据一般使用 j…

DBeaver数据库管理工具安装连接PostgreSQL和DM

文章目录 1. 安装2. 连接PostgreSQL3. 连接DM83.1 下载驱动3.2 添加驱动3.3 连接3.4 创建表空间和用户3.5 执行sql 4. 连接Mysql 1. 安装 下载地址 https://dbeaver.io/download/ 2. 连接PostgreSQL 配置显示所有数据库 第二个勾选会显示模板数据库 点击测试连接&#xff0…

linux之Ubuntu系列(三)远程管理指令☞Scp

cp scp cp 复制文件 是限制在本地操作 scp: 远程拷贝文件 cp [options] 源文件or 目录 目标文件or 目录 如果复制目录,要加 -r 选项 ,同时如果目标目录不存在,会会创建 scp scp就是 secure copy,是一个在linux下用来…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发,今天开始配置环境,首先是下载android studio,然后下载android sdk,这里需要注意的是linux系统不能使用windows系统下的Android sdk,亲测会出现各种问题。 常规思路,下载sdk&am…

视频问答新增或修改视频问答

通过问答id新增或修改视频问答题目 新增或修改视频问答 图3:视频问答功能(观看效果) 图4:视频问答功能(观看效果) 图5:视频问答功能(观看效果) 单元测试 Testpublic voi…

基于单片机的智能窗帘智能晾衣架系统的设计与实现

功能介绍 以STM32单片机单片机作为主控系统;OLED液晶显示当前环境温湿度,光照强度,时间,开关状态等信息;雨滴传感器检测当前环境是否下雨,天气下雨检测,天气潮湿时自动收衣服;可以通…

Spring(一):Spring 的创建和使用

目录 Spring 是什么? 什么是容器? 什么是 IoC? 什么是 IoC? IoC的优点是啥呢? 理解 IoC DI 概念说明 Spring 的创建 创建 Spring 项目 1. 创建⼀个普通 Maven 项⽬。 2. 添加 Spring 框架⽀持(s…

TMS Aurelius v5.15 Source Crack

TMS Aurelius v5.15 Source Crack 面向Delphi的ORM框架,完全支持数据操作、复杂和高级查询、继承、多态等。。。 功能详细信息 支持多个数据库服务器(MS SQL Server、Firebird、MySQL、DB2、Interbase、Oracle等) 支持多个数据库访问组件(dbExpress、AnyDac、SQLDir…