百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

CityGML三维应用开发「Cesium」

bigegpt 2025-01-17 11:02 11 浏览

在本文中,我将展示一种使用Node.jsCesium.js 在基于 Web 的应用程序上可视化CityGML 3D 城市模型的简单方法,并以纽约市曼哈顿地区的示例为例。在这个简短的教程结束时,你将能够构建一个看起来像这样的 Web 应用程序:

纽约曼哈顿的 3D 城市模型 Cesium 应用程序

1、CityGML 简介

在开始之前,让我们先了解CityGML 3D 城市模型。CityGML是一种开放的标准化数据模型和交换格式,用于存储由 OGC(开放地理空间联盟)引入的城市和景观的数字 3D 模型。CityGML的特别之处在于它是一个包含属性和几何数据的语义城市模型。

德国慕尼黑的带有属性数据的语义 3D 城市模型

CityGML 模型的几何和属性允许模拟各种建筑能源需求、光伏潜力等等。

使用 CityGML 对路德维希堡建筑能源需求建模的示例

好消息是,许多城市提供了他们的 CityGML 作为开源数据集。

下面让我们开始,从 CityGML 构建基于 Web 的 3D 应用程序。

1、准备 3D 数据集

NYC DoITT以CityGML 格式发布了纽约市 (NYC) 的语义 3D 城市模型,包括纽约市的每座建筑,可以在这里下载。这个数据集中,我们将只关注曼哈顿地区(
DA12_3D_Buildings_Merged.gml
~48,000 个建筑物)并使用它来创建 3D Web 应用程序。

虽然 CityGML 适合交换和存储 3D 建筑模型,但它不能直接在 Web 上可视化。由于我们将 Cesium 用于开发 Web 应用程序,因此我们需要将 CityGML 转换为 3D Tiles 格式。FME Workbench是我所知道的最适合这项工作的工具,它对学生和开源研究项目也是免费的。

或者,可以跳过此步骤并从下面的我的 GitHub 项目下载已转换的 3D Tiles。

2、设置 Web 服务器

对于 Web 服务器,创建一个项目文件夹和具有以下依赖项的 Node.js 项目:

$ npm init #initiate node project
$ npm install express #install express framework
$ npm install compression #install compression 

然后,使用 Express 为 Node.js创建一个简单的server.js文件:

var express = require('express');
var compression = require('compression');
var app = express();
app.use(compression());
app.use(express.static('public'));
var server = app.listen('3000', '0.0.0.0', function () {
    console.log('Application Running: http://localhost:%d', server.address().port);
});

可以通过命令$ node server.js测试运行你的服务器。

3、使用 CesiumJS 开发 3D 应用程序

我们将使用 CesiumJS 来渲染我们的 3D 建筑模型。它是一个开源的 JavaScript 库,用于 Web 浏览器中的 3D 地球和 2D 地图。

现在,让我们在public文件夹中创建一个index.html文件并写入以下代码:

<html lang="en">
<head>
    <meta charset="utf-8">
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.68/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.68/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesiumContainer" style="width: 100%; height:100%"></div>
    <script>
        var viewer = new Cesium.Viewer('cesiumContainer');
        var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
            url: "<link to your 3D Tile dataset (tileset.json)>",
        }))
        Cesium.when(tileset.readyPromise).then(function (tileset) {viewer.flyTo(tileset)}) // fly to 3D tiles after loading!
    </script>
</body>
</html>

这个 HTML 基本上从 cesium.com 加载 Cesium 依赖项并创建一个 Cesium 容器。变量tileset通常指的是 3D Tiles 数据集。只需在url处将本地部分的值替换为已转换的 3D Tiles。完毕!

运行$ node server.js 后,前往http://localhost:3000 ,你会看到曼哈顿的 3D 模型。如果想要一些建筑模型的颜色/样式,可以通过tileset样式添加。下面的示例脚本显示了如何根据建筑高度设置建筑模型的样式。

tileset.style = new Cesium.Cesium3DTileStyle({
        color: {
            conditions: [
                ['${Height} >= 300', 'color("#FF442E")'],
                ['${Height} >= 200', 'color("#FF8000")'],
                ['${Height} >= 100', 'color("#E7A700")'],
                ['${Height} >= 50', 'color("#CFC600")'],
                ['${Height} >= 25', 'color("#A4B600")'],
                ['${Height} >= 10', 'color("#6A9E00")'],
                ['true', 'rgb(127, 59, 8)']
            ]
        }
    });

就是这样!我已经为查询功能添加了一些代码,如果你有兴趣,可以随时从我的 GitHub 中查看全部代码。

4、额外的资源

如果你想继续开发该应用程序,可以使用 Cesium 和 3D 城市模型做更多很酷的事情。请在此处查看一些资源:

  • CesiumJS API 文档:链接/一些不错的展示:链接
  • Cesium Style Expression文档:链接
  • CityGML 数据
    - 美国纽约市所有建筑物的 CityGML [LoD2] (链接)
    - 美国所有建筑物的 CityGML !!![LoD1] ( link )
    - 德国北莱茵-威斯特法伦州所有建筑物的 CityGML [LoD1,2] ( link )
    - TU-Delft 在几个城市的开放 CityGML 数据列表 ( link )
    - 没有 CityGML,不用担心。查看 FME 的 OpenStreetMap 到 CityGML 教程(链接)
  • 3DCityDB:用于存储、表示和管理虚拟 3D 城市模型的开源地理数据库:(链接)
  • OGC 提供的有关CityGML的更多信息(链接)
  • 实际应用:请查看提供使用 Cesium + CityGML 的 Smart Cites 解决方案的 VCS 公司(链接)

5、结束语

本教程涵盖了使用 Cesium.js 和 3D 城市模型创建基于 Web 的 3D 应用程序的基础。我希望你喜欢这篇文章,并发现它对你的日常工作或项目很有用。


原文链接:
http://www.bimant.com/blog/citygml-3d-viz/

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...