首页 > 其他分享 >Cesium学习笔记5-加载城市建筑物火柴盒模型

Cesium学习笔记5-加载城市建筑物火柴盒模型

时间:2023-07-28 10:44:06浏览次数:49  
标签:entities lvalue styling 火柴盒 var && Cesium 加载

将shp文件转换为cesium可以加载的geojson文件,在线转换工具,使用cesium的GeoJsonDataSource接口类,根据建筑物高度上色加载geojson文件。

注意shp文件包含_Height字段。
代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
    />
    <meta name="description" content="Load GeoJSON or TopoJSON data and apply custom styling.">
    <meta name="cesium-sandcastle-labels" content="Showcases, Tutorials, DataSources">
    <title>Cesium Demo</title>
    <script type="text/javascript" src="../Sandcastle-header.js"></script>
    <script type="module" src="../load-cesium-es6.js"></script>
  </head>
  <body
    class="sandcastle-loading"
    data-sandcastle-bucket="bucket-requirejs.html"
  >
<style>
      @import url(bucket.css);
      html,
      body,
    #cesiumContainer {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    </style>
    <div id="cesiumContainer" class="fullSize"></div>
    <div id="loadingOverlay"><h1>Loading...</h1></div>
    <div id="toolbar"></div>
    <script id="cesium_sandcastle_script">
window.startup = async function (Cesium) {
    'use strict';
//Sandcastle_Begin
const viewer = new Cesium.Viewer("cesiumContainer", {
      timeline:false,
        animation:false,
        infoBox:false,
        imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
            url: "http://t0.tianditu.gov.cn/vec_w/wmts?tk=ec5a2a0e05d6e7be9aabdcfa8a8812a9" ,
            layer: "vec",
            style: "default",
            tileMatrixSetID: "w",
            format: "tiles",
            maximumLevel: 18,
        }),
    });

//Example 1: Load with default styling.
Sandcastle.addDefaultToolbarButton("Default styling", function () {
  viewer.dataSources.add(
    Cesium.GeoJsonDataSource.load(
      "../ZhongXBuildings.json"
    )
  );
});

//Example 2: Load with basic styling options.
Sandcastle.addToolbarButton("Basic styling", function () {
  viewer.dataSources.add(
    Cesium.GeoJsonDataSource.load(
      "../ZhongXBuildings.json",
      {
        stroke: Cesium.Color.HOTPINK,
        fill: Cesium.Color.PINK.withAlpha(0.5),
        strokeWidth: 3,
      }
    )
  );
});

//Example 3: Apply custom graphics after load.
Sandcastle.addToolbarButton("Custom styling", function () {
  //Seed the random number generator for repeatable results.
  Cesium.Math.setRandomNumberSeed(0);
  var geojsonOptions = { 
    clampToGround : true //使数据贴地
          };
        // 加载tileset.json
       var entities;
        var promise =Cesium.GeoJsonDataSource.load('../ZhongXBuildings.json', geojsonOptions);
        promise.then(function (dataSource)  {
            viewer.dataSources.add(dataSource);
            entities =dataSource.entities.values;
            viewer.zoomTo(entities);
            for (var i = 0; i < entities.length;i++) {
                var entity = entities[i];
                const { properties, polygon } = entity
                var lvalue = entity.properties._Height._value;
                var color;
                if(lvalue<10){
                    color = "151,232,173";
                }
                else if(lvalue>=10&&lvalue<20){
                    color = "0,0,255";
                }
                else if(lvalue>=20&&lvalue<30){
                    color = "247,180,45";
                }
                else if(lvalue>=30&&lvalue<45){
                    color = "241,147,3";
                }
                else if(lvalue>=45&&lvalue<60){
                    color = "239,117,17";
                }
                else if(lvalue>=60&&lvalue<70){
                    color = "238,88,31";
                }
                else if(lvalue>=70&&lvalue<80){
                    color = "224,63,22";
                }
                else{
                    color = "208,36,14";
                }
                entity.polygon.material = Cesium.Color.fromCssColorString("rgb("+color+")");;
               //Remove the outlines.
                entity.polygon.outline = true; 
                entity.polygon.extrudedHeight = lvalue;       
            }
            const x = 120.9, y = 32.0348739
            viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(x, y, 3000),
    });
        })
      });
//Reset the scene when switching demos.
Sandcastle.reset = function () {
  viewer.dataSources.removeAll();
}
  Sandcastle.finishedLoading();
};
  if (typeof Cesium !== 'undefined') {
    window.startupCalled = true;
    window.startup(Cesium).catch((error) => {
      "use strict";
      console.error(error);
    });
}
</script>
</body>
</html>

结果:

 

标签:entities,lvalue,styling,火柴盒,var,&&,Cesium,加载
From: https://www.cnblogs.com/yhlx125/p/17586977.html

相关文章

  • WinForm RichTextBox 加载大量文本卡死和UTF-8乱码问题
    在RichTextBox控件的使用中我们会遇到加载TXT文件的问题,通常我们会有两种处理方式。一、加载TXT字符串,设置到RichTextBox//打开并且读取文件数据FileStreamfs=newFileStream(txtPath,FileMode.Open,FileAccess.Read);StreamReadersr=newStreamReader(fs,Encoding.U......
  • Java 加载图片
    Java加载图片概述在Java开发中,我们经常需要在程序中加载和显示图片。本文将介绍如何使用Java实现加载图片的步骤和相应的代码示例。加载图片的步骤加载图片的过程可以分为以下几个步骤:步骤描述1.选择图片文件需要加载的图片文件可以是本地文件或者网络上的资......
  • android studio 手动加载jar
    AndroidStudio手动加载Jar包在Android开发中,我们常常需要依赖第三方库来实现各种功能。而有些第三方库可能只提供了Jar包而没有提供AAR包,这就需要我们手动加载Jar包到AndroidStudio中。本文将介绍如何在AndroidStudio中手动加载Jar包,并给出代码示例。1.创建一个新的Android......
  • VS 还原 NuGet 程序包时出错: 无法加载源 https://dotnet.myget.org/F/aspnetcore-dev
    错误还原NuGet程序包时出错:无法加载源https://dotnet.myget.org/F/aspnetcore-dev/api/v3解决方法在新源中添加地址:https://www.nuget.org/api/v2/......
  • QEMU 加载 uboot kernel 实例
    根文件系统放在SD卡qemu-system-arm-Mmcimx6ul-evk\-m512M\-kernel./zImage\-dtb./imx6ul-14x14-evk.dtb\-nographic\-devicesd-card,drive=mysdcard\-......
  • arcgis for js 4.x 加载 geoserver WMS WMTS
    arcgisforjs4.x加载geoserverwms代码如下<html><head><metacharset="utf-8"/><metaname="viewport"content="initial-scale=1,maximum-scale=1,user-scalable=no"/><ti......
  • ol 加载geoserver wms wmts mvt
    ol加载geoserverwms代码如下<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>geoserver-wms</title><linkhref="https://cdn.bootcdn.net/ajax/libs/openlayers/4.6.5/o......
  • vue : 无法加载文件 C:\Users\jianfei\AppData\Roaming\npm\vue.ps1,因为在此系
    背景在新电脑上配置vue环境PSE:\CODE_PROJ\myvue\vue23\P61_使用脚手架\vue_test>npminstall-g@vue/[email protected]:Seehttps://github.com/lydell/source-map-url#[email protected]:Pleaseseehttps://github......
  • python动态加载py文件
    动态加载py文件的实现对于刚入行的小白来说,实现动态加载py文件可能是一个比较陌生的概念。不过不用担心,我会帮助你逐步了解和掌握这个过程。流程概述动态加载py文件的实现可以分为以下几个步骤:找到要加载的py文件的路径。动态加载py文件。调用加载的py文件中的函数或类。......
  • 反射 p3 类加载
    类加载基本说明反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。静态加载:编译时加载相关的类,如果没有则报错,依赖性太强。动态加载:运行时加载相关的类,如果运行时不用该类,即使不存在该类,也不会报错,降低了依赖性。代码演示:importjava.util.*;importjava......