CityGML三维场景查看

news2025/1/4 16:04:23

今天我将展示如何读取 CityGML 文件并以 3D 方式查看其信息,以及如何通过挤出将shapefile转化为3D模型。

我还没有找到 3D 渲染器中可用设置的非常详细的描述,因此我花了一些时间测试它们。 我试图弄清楚它们的作用以及何时使用它们。 我将在本文末尾解释我的发现。

但就像我之前提到的,我无法检查我的结论是否正确。 如果我有什么问题,请告诉我!

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、显示 CityGML 数据集

目前,不难找到免费使用的 3D 城市模型。 大多数城市都有开放、免费的 3D 数据可供下载。 你可以在政府机构运营的地理信息门户上找到它们。

如果你不想查找数据,请访问 CityGML 官方网站。 可以在那里找到此类门户网站的完整列表以及一些示例数据集。

更好的是,现在你可以使用新的 Google 数据集搜索。 只需在搜索框中输入 CityGML 并找到您要的数据。

为了本指南的目的,我使用了CityGML 网站上找到的代尔夫特的示例数据集,你可以从这里下载。

下载并解压 CityGML 文件后,创建一个新的 QGIS 项目。

首先,将 Delft_3dfier.gml 文件拖到 QGIS 窗口中打开。 如果程序询问你要导入哪些图层,请标记“构建”并按“确定”。 最有可能的是,图层会丢失 CRS 信息,因此请在图层属性中手动设置。

在这里插入图片描述

我将其设置为 EPSG: 7415,这是我的数据的 CRS。

不要忘记设置项目的坐标系。 请务必选择投影 CRS,否则,3D 地图视图将无法打开。 我用的和以前一样(EPSG:7415)。
在这里插入图片描述

接下来的步骤很简单。 打开图层样式面板,启用 3D 渲染器并打开 3D 地图视图以查看效果。
在这里插入图片描述

2、挤压shapefile

你是否知道,即使是普通的shapefile(例如直线和多边形)也可以以 3D 形式可视化?

在第二个示例中,我将根据 OpenStreetMap 信息创建一个建筑物占地面积并对其进行拉伸。 为了表示地形,我将其放置在 DEM 图层上。

首先,找到建筑物所在区域的 DEM。
在这里插入图片描述

添加一些带有建筑物的底图。 例如开放街道地图。

在左侧的浏览器面板中,右键单击 XYZ Tiles。 选择“新建连接”,输入图层的名称。

在 URL 字段中粘贴此链接:

http://tile.openstreetmap.org/{z}/{x}/{y}.png

并单击“确定”进行确认。 新图层出现在 XYZ 瓷砖下方。 将其拖至图层面板。

创建一个新的多边形图层并勾勒出所选建筑物的轮廓。

准备好后,打开“图层样式”面板并导航到“3D 视图”选项卡。 启用 3D 渲染器。

将 DEM 文件添加到项目中并检查建筑物下的一些高程值。 输入这些数字的平均值作为高度。

它将确保建筑物的底面保持在地形的顶部。 在拉伸值下,输入建筑物的高度。 将高度限制设置为绝对。

打开 3D 地图视图并检查结果。

在这里插入图片描述

3、3D 渲染器设置

本文包含了QGIS的 3D 渲染器可用设置的简短描述。 我通过在线研究找到了一些解释,通过尝试和测试方法找到了其他解释。

3.1 高度限位

高度限位(Height Clamp)负责确定物体在表面上的位置。 共有三个选项:绝对、相对和地形。 根据你选择的设置,高度值的解释方式有所不同。 如果高度值是绝对值并且从 0 开始测量(如 CityGML 示例),则“绝对”设置是最佳选择。 另外两个值“相对”和“地形”将给定的高度值添加到地形高程中。

3.2 高度绑定

将高度绑定(Height Binding)设置为顶点,要素的每个顶点都将被固定到曲面上。

另一方面,如果你选择质心,则仅附加要素的质心。

3.3 剔除模式

剔除(culling)一词用于 3D 渲染。 这意味着排除不会添加到最终图像的几何图形。 使用剔除可以提高渲染速度。

如果将剔除模式设置为“返回”,则面向建筑物内部的多边形将不会被渲染。 这意味着如果在 3D 模型内部移动视角,你将能够看到外部。 此设置有助于性能优化。

设置正面剔除将导致多边形正面消失。

3.4 添加背面

有时 3D 多边形无法正确构建。 当这种情况发生时,你可以在启用反向剔除时注意到它 - 一些墙丢失了。 如果你想改进此类数据的渲染,请启用“添加背面”选项。 但要小心,此操作需要更多的图形内存。

3.5 漫反射、环境光、镜面反射和光泽

在漫反射下,你可以设置对象的颜色。

设置环境颜色意味着选择对象处于阴影中时的颜色。

镜面反射设置闪亮物体的反射颜色

更改光泽值可控制对象的反射率。


原文链接:CityGML三维查看 — BimAnt

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

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

相关文章

英码积极参与行业交流活动,“快、易、省”赋能更多企业具备AI能力

2023年,ChatGPT的火爆引发了算力需求的大爆发,有人说,边缘计算因兼具时延低与安全等优势,或将成为解决AI算力紧张的良方;在人工智能产业发展的推动下,边缘计算成为了众人瞩目的焦点。随着应用场景的多元化和…

关于 华为云:服务器上传文件夹后显示403

问题原因: 华为云:当前使用的操作系统默认的umask 值是0027 上传文件后出现权限403 的问题: 解决1:修改 /etc/profile 文件 027 022 查看是否修改: 指令:umask 0022 需要删除之前的 文件重新上传&am…

【C语言】指针还不会?这一篇就够了

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

HNU-计算机系统CS-学习感悟

本学期学的两门核心课,一个CS,一个OS。对我来说都有一定难度。 CS总评91/100。主要是期末考试没太发挥好, 主要原因是存储部分有个没有考虑写的情况,送了8分。 总领 CS的学习采用最经典的书——CSAPP,也被称为计算机…

vue3 ts vite electron开发桌面程序

1、搭建vuetsvite项目 # 创建Vue项目 npm init vue # 安装依赖 npm install # 一定要安装成开发依赖 npm install electron electron-builder -D 根目录创建plugins文件夹,文件夹中创建ts文件,vite.electron.build.ts是打包文件代码,v…

LeetCode面试题02.07.链表相交

面试题02.07.链表相交 两种解题思路 面试题02.07.链表相交一、双指针二、哈希集合 一、双指针 这道题简单来说,就是求两个链表交点节点的指针 这里注意:交点不是数值相等,而是指针相等 为了方便举例,假设节点元素数值相等&…

MySQL 坐标批量计算及优化

文章目录 1、坐标计算2、优化 现在有一个需求,就是找出距离某用户最近的一些点,一种实现方法就是调用地图的api来计算筛选,另外一种就是在数据库中计算,考虑到地图api有并发量限制,所以选用数据库计算的方式。 1、坐标…

Python实现HBA混合蝙蝠智能算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法…

成功升级scikit-image的版本,从老版本0.13.0到0.17.2

成功升级scikit-image的版本,从老版本0.13.0到0.17.2 之前参考其他博客升级scikit-image的版本没有成功,这次参考scikit-image的github官网,顺利实现了升级。 scikit-image的github官网中关于安装的介绍页 https://github.com/scikit-imag…

Dubbo入门实战最全攻略(基于 Spring Boot 实现)

Dubbo应用 RPC通信 Apache Dubbo 3构建在 HTTP/2 协议之上,具有更好的穿透性与通用性 , 支持基于 IDL 的服务定义 集成了业界主流的大部分协议,使得用户可以在 Dubbo 框架范围内使用这些通信协议 , 这些协议包括 rest、hessian…

【动态规划】三步问题

🧁题目描述: 示例: 🧀(1)题目解析: 小孩每一次可以走1,2,3步,那么形成不同的排列组合,会有很多种上楼梯方式。 🧀(2)算法原理: 🥑[1]状态表示 根据题目要…

【C++杂货铺】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 📖默认成员函数 用户没有显式实现,编译器会自动生成的成员函数,称为默认成员函数。 构造函数:完成对象的初始化工作。析构函数&#xff…

容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档

一、Docker docker是一种开源的应用容器引擎,可以将应用程序和依赖打包成一个可移植的镜像,然后发布到任何支持docker的平台上,也可以实现虚拟化。docker的核心概念有三个:镜像(image)、容器(co…

QT中QTimer的循环时间与槽函数执行时间以及在事件循环中触发,不同时间的结果分析

目录 当循环时间小于槽函数时间时: 当循环间隔时间大于槽函数时间时: 当存在两个定时器器,其中一个还是间隔100ms,另一个间隔1000ms: 当两个定时器的循环周期大于槽函数执行时间时 当在主程序中添加一个for循环…

怎么把视频转为gif动态图,3个方法轻松转换!

如何将视频转换为GIF动态图呢?相信许多人在日常聊天中喜欢使用各种有趣的表情包。每当互联网上出现一些有趣的热门视频时,我们也往往会看到许多相关的GIF表情包。那么我们应该如何将自己的视频或者一些有趣的视频制作成GIF动态图呢?下面我就为…

从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)

目录 1. AVL树的概念 2. AVL树结点和树的定义 3. AVL树的插入(未包含旋转) 4. AVL树的旋转 4.1 右右_左单旋 4.2 左左_右单旋 4.3 左右双旋 4.4 右左双旋 5. AVL树的验证 6. AVL树的删除(了解)和性能 7. AVL树插入验证完整代码 8. AVL树笔试…

下载pdm遇到的坑:Could not find a version that satisfies the requirement pdm

pip install pdm遇到的问题: Could not find a version that satisfies the requirement pdm (from versions: ) No matching distribution found for pdm检查了版本后发现,python版本在3.6,pdm不支持该版本 换成python3.7版本,则…

【力扣算法14】之 15. 三数之和 python

文章目录 问题描述示例1示例2示例 3提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] num…

python编程语言之数据类型进阶操作

数值常用操作 python常用关于数值,数学常用的模块:math(数学),random(随机),numpy(科学计算),pandas(数据读写,数据分析&…

Yalmip入门教程(3)-约束条件的定义

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译:https://yalmip.github.io/tutorials/ 之前的博客简单介绍了约束条件的定义方法,接下来将对其进行详细介绍。 首先简单复习一下: 1.定义约束条件可以使用矩阵拼接…