当前位置: 首页 > news >正文

【WebGIS平台】传统聚落建筑科普数字化建模平台

        基于上述概括出建筑单体的特征部件,本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器(B/S)的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现,允许用户轻松在线构建从简约到精细的三维建筑模型,更通过其直观的操作界面和丰富的交互功能,极大地提升了用户体验。用户可以在此平台上浏览各类传统聚落建筑的三维模型,无论是欣赏其独特的建筑风格,还是深入了解其构造细节,都能获得身临其境般的感受。同时,平台还支持用户与模型进行互动操作,如旋转、光照渲染、建筑部件炸开等,进一步增强了学习的趣味性和互动性,为传统聚落建筑文化的传播与普及开辟了一条数字化路径。

9d42a18ba2eb4a7c9922b339f8f24a2c.png

                                   (a)平台首页                       (b)模型故事页面

ff70d91d933c4d25b83ea1a7c0325c65.png

(c)模型浏览交互页面

图6 传统聚落建筑科普数字化建模平台部分页面

 

2.2.2模型构建、浏览与交互

传统聚落建筑科普数字化平台支持简约(初级)和精细(高级)模型的在线构建。初级模型的在线构建平台是基于上述建筑单体特征,用户仅需要选择屋顶、屋身(包括屋脸、墙面、门、窗、外柱和内柱等部件)和台基(包括地基、护栏和台阶等部件)各个特征部件的样式,平台将自动生成指定样式的传统聚落建筑三维模型。生成过后的模型平台还支持用户与模型进行互动操作,如建筑部件拆分、旋转和光照渲染等。

d240775f716a423fb7f3e8127181343c.png  

              (a)屋顶部件样式选择页面                                          (b)屋身部件样式选择页面

118c8b5fcaf64b46bbaef677e6943f4f.png

(c)台基部件样式选择页面

图7 传统聚落建筑模型的构建

  7e559c7f608e4a5eba85cf8ff2963cd1.png

                        (a)自动生成的传统建筑模型            (b)部件拆分后传统模型

图7  传统聚落建筑模型的模型浏览与交互

实现核心技术:

Node.js

Node.js学习(一)-CSDN博客

Node.js学习路线-CSDN博客

Node.js的语法主要基于JavaScript,但它在服务器端环境中运行,提供了许多额外的模块和功能,如文件系统操作、网络请求处理等。以下是对Node.js语法的详细概述:

1. 变量与数据类型

  • 变量定义:Node.js支持三种变量定义方式:constvarlet
    • const:用于定义常量,定义时必须初始化,之后值不可改变。
    • var:定义的变量可以修改,如果不初始化会输出undefined,且存在变量提升现象。
    • let:块级作用域变量,定义后只能在块级作用域内访问,且不存在变量提升。
  • 数据类型:Node.js支持JavaScript的所有基本数据类型,包括NumberStringBooleanNullUndefined,以及ES6新增的SymbolBigInt。此外,Node.js还提供了对象(Object)和特殊对象如ArrayDate等。

2. 控制流语句

Node.js支持JavaScript的所有控制流语句,包括条件语句(if...elseswitch)、循环语句(forwhiledo...while)、try...catch异常处理等。

3. 函数

  • 匿名函数:可以定义没有名称的函数。
  • 箭头函数:ES6引入的简洁函数写法,不绑定自己的thisargumentssuper,或new.target
  • 高阶函数:可以接受函数作为参数或返回函数的函数。

4. 模块系统

Node.js使用CommonJS模块规范,通过require()函数来引入模块,通过module.exportsexports对象来导出模块。

5. 核心模块

Node.js提供了许多核心模块,这些模块提供了丰富的功能,如文件操作、网络请求、路径处理等。

  • fs模块:用于文件系统的操作,如读取文件、写入文件、创建目录等。
  • path模块:用于处理文件和目录的路径。
  • http/https模块:用于创建HTTP/HTTPS服务器和客户端。
  • url模块:用于解析URL和将URL对象转换回字符串。
  • querystring模块:用于解析和字符串化查询字符串。

6. 异步编程

Node.js是异步的,支持多种异步编程模型,如回调函数、Promise、async/await等。

  • 回调函数:传统的异步编程方式,通过函数作为参数传递给另一个函数,并在操作完成时调用。
  • Promise:ES6引入的异步编程解决方案,提供了一种更优雅的方式来处理异步操作。
  • async/await:基于Promise的语法糖,使得异步代码看起来像同步代码一样。

7. 事件循环与回调函数

Node.js使用事件循环和回调函数来处理非阻塞I/O操作。当Node.js执行输入/输出操作时(如读取文件、网络请求等),它不会等待操作完成,而是将回调函数放入事件队列,并在适当的时候调用它们。

8. 第三方模块

Node.js有一个庞大的生态系统,包含成千上万的第三方模块,这些模块可以通过npm(Node Package Manager)进行安装和管理。使用第三方模块可以极大地提高开发效率,减少重复造轮子。

9. 严格模式

Node.js支持JavaScript的严格模式,通过在脚本或函数顶部添加"use strict";语句来启用。严格模式有助于捕获一些常见的编码错误,并强制更严格的语义。

10. ES6+新特性

Node.js自6.0版本开始全面支持ES6,并随着版本的更新不断支持更多的ES6+新特性,如模板字符串、解构赋值、类、模块等。

综上所述,Node.js的语法以JavaScript为基础,但扩展了服务器端特有的功能,并引入了模块系统、异步编程等概念。随着JavaScript和Node.js的不断发展,新的语法特性和最佳实践不断涌现,开发者需要不断学习和掌握这些新内容以提高开发效率和代码质量。

Bootstrap

Bootstrap是一个基于HTML、CSS和JavaScript的开源前端框架,由Twitter的设计师Mark Otto和Jacob Thornton合作开发。它以其简洁、灵活和响应式的特点,成为了最受欢迎的Web开发框架之一。以下是对Bootstrap的详细解析:

一、Bootstrap的基本特点

  1. 移动设备优先:从Bootstrap 3开始,框架就融入了移动设备优先的理念,这意味着所有的样式和组件都是为移动设备首先设计的,然后扩展到平板和桌面设备。这种设计方式使得Bootstrap能够轻松应对各种屏幕尺寸和分辨率。

  2. 响应式设计:Bootstrap的响应式CSS能够自适应于台式机、平板电脑和手机,为开发人员创建接口提供了一个简洁统一的解决方案。它包含了功能强大的内置组件,这些组件可以根据设备的屏幕尺寸和分辨率自动调整布局和样式。

  3. 易于上手:只要具备HTML和CSS的基础知识,就可以开始学习Bootstrap。它提供了一套预定义的样式和组件,开发人员只需要编写HTML结构,并添加Bootstrap的固定class样式,就可以轻松实现各种效果。

  4. 跨浏览器兼容性:Bootstrap支持所有主流浏览器,包括IE7及以上版本、Chrome、Firefox、Safari等。

二、Bootstrap的核心组件

  1. 栅格系统:Bootstrap提供了一套响应式的栅格系统,该系统将页面布局划分为最多12列,并允许通过不同的类名来控制元素的列宽和偏移。这使得开发人员可以轻松地创建复杂的页面布局,并确保这些布局在不同设备上都能保持良好的显示效果。

  2. 内置组件:Bootstrap提供了丰富的内置组件,包括按钮、导航条、轮播图、表单控件等。这些组件都经过精心设计,并提供了多种样式和变体,以满足不同的开发需求。

  3. JavaScript插件:Bootstrap还包含了一系列的JavaScript插件,这些插件提供了丰富的交互功能,如模态框、下拉菜单、折叠面板等。这些插件都基于jQuery编写,并具有良好的扩展性和可定制性。

三、Bootstrap的使用方式

  1. 下载与引入:首先,需要从Bootstrap的官方网站或CDN服务上下载Bootstrap的压缩包或链接。然后,在HTML文件中通过<link>标签引入Bootstrap的CSS文件,以及通过<script>标签引入Bootstrap的JavaScript文件和jQuery库(因为Bootstrap的JavaScript插件依赖于jQuery)。

  2. 编写HTML结构:在HTML文件中,按照Bootstrap的规范编写页面结构。这包括使用Bootstrap的栅格系统来布局页面元素,以及使用Bootstrap的内置组件和类名来添加样式和交互功能。

  3. 自定义样式:虽然Bootstrap提供了一套预定义的样式和组件,但开发人员仍然可以通过自定义CSS来覆盖或扩展这些样式。此外,Bootstrap还提供了基于LESS或Sass的定制工具,允许开发人员更灵活地定制框架的样式和组件。

四、Bootstrap的最新版本

Bootstrap目前已经发展到了多个版本,每个版本都引入了新的特性和改进。最新版本的Bootstrap(截至当前时间,即2024年7月)在保持原有优点的基础上,进一步优化了性能、增加了新的组件和样式,并提高了与现代Web技术的兼容性。

总之,Bootstrap是一个功能强大、易于上手且广泛应用的前端框架。它以其简洁的语法、丰富的组件和灵活的响应式设计能力,为Web开发人员提供了极大的便利和高效的开发体验。

三维建模(CityEngine Python库)

CityEngine的Python接口提供了丰富的库与方法,使得用户能够通过编写Python脚本来自动化和控制CityEngine中的许多任务。以下是一些常见的CityEngine Python库与方法概述:

一、常见的库

虽然CityEngine本身并不直接提供传统意义上的“库”(如Python中的库文件),但它通过其Python API暴露了一系列函数和对象,这些可以视为在CityEngine环境中使用的“库”。这些函数和对象允许用户执行各种操作,如选择对象、修改属性、创建几何体等。

二、常见的方法

  1. 选择与获取对象

    • ce.getObjectsFrom(ce.scene): 获取场景中的所有对象。
    • ce.getObjectsFrom(ce.scene, ce.withName("name")): 根据名称获取场景中的对象。
    • ce.setSelection(...): 设置当前选中的对象。
  2. 修改对象属性

    • ce.setAttribute(object, attributeName, value): 设置对象的属性值。
    • ce.getAttribute(object, attributeName): 获取对象的属性值。
  3. 创建与修改几何体

    • ce.addGraphLayer(...): 添加图层。
    • ce.createGraphSegments(...): 在图层中创建线段。
    • ce.fitStreetWidths(...): 调整街道宽度。
  4. 导入与导出

    • ce.importFile(...): 导入文件,如Shapefile。
    • 导出功能通常通过CityEngine的GUI或CGA规则来实现,但Python API也支持通过修改对象属性来间接影响导出结果。
  5. 场景操作

    • ce.delete(...): 删除对象。
    • ce.setName(...): 修改对象的名称。
  6. CGA规则

    • ce.setRuleFile(objects, cgaPath): 为对象设置CGA规则文件。
    • ce.setStartRule(object, ruleName): 设置对象的起始规则。
    • ce.generateModels(objects): 根据CGA规则生成模型。
  7. 其他工具函数

    • ce.toFSPath(...): 将CityEngine内部的路径转换为文件系统路径。
    • ce.print(...): 在CityEngine的控制台中打印信息。
# 假设我们要选择所有名称中包含"Broadway"的场景元素  
ce.setSelection(ce.getObjectsFrom(ce.scene, ce.withName("*Broadway*")))  # 遍历选中的元素,并修改它们的某个属性  
for obj in ce.selection():  # 假设我们要修改的属性名为"/ce/street/streetWidth"  currentWidth = ce.getAttribute(obj, "/ce/street/streetWidth")  newWidth = currentWidth + 5  # 假设我们想要将宽度增加5  ce.setAttribute(obj, "/ce/street/streetWidth", newWidth)

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL之基本查询(上)-表的增删查改
  • 如何使用 Puppeteer 避免机器人检测?
  • oracle索引字段存储数据过长,导致索引失效
  • 突破传统,实时语音技术的革命。Livekit 开源代理框架来袭
  • for循环中list触发fast-fail或不触发的原理和方法
  • windows@windows设备之间远程命令行控制方案@windows设备间使用OpenSSH
  • C语言力扣刷题12——合并区间[排序]
  • 继承关系中的访问控制
  • 实战 | YOLOv8使用TensorRT加速推理教程(步骤 + 代码)
  • Python股票计算小程序(字符串格式化练习)
  • UE5 04-重新加载当前场景
  • c++内存管理(上)
  • 论文辅助笔记:ST-LLM
  • UE5 修改项目名称 类的名称
  • 了解Adam和RMSprop优化算法
  • 分享的文章《人生如棋》
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • AHK 中 = 和 == 等比较运算符的用法
  • Date型的使用
  • exports和module.exports
  • iOS小技巧之UIImagePickerController实现头像选择
  • js作用域和this的理解
  • php的插入排序,通过双层for循环
  • React Transition Group -- Transition 组件
  • Redis 懒删除(lazy free)简史
  • scrapy学习之路4(itemloder的使用)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • WePY 在小程序性能调优上做出的探究
  • 闭包--闭包之tab栏切换(四)
  • 初识 beanstalkd
  • 前端
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​人工智能书单(数学基础篇)
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • "无招胜有招"nbsp;史上最全的互…
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)Nginx简介和安装教程
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++哈希表01)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (黑马C++)L06 重载与继承
  • (算法)N皇后问题
  • (转)程序员疫苗:代码注入
  • (转载)Linux网络编程入门
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET C# 配置 Options
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 验证控件和javaScript的冲突问题