当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JavaScript ArcGIS BuildingSceneLayer用法及代码示例


基本信息

以下是所在类或对象的基本信息。

AMD: require(["esri/layers/BuildingSceneLayer"], (BuildingSceneLayer) => { /* code goes here */ });

ESM: import BuildingSceneLayer from "@arcgis/core/layers/BuildingSceneLayer";

类: esri/layers/BuildingSceneLayer

继承: BuildingSceneLayer > Layer > Accessor

自从:用于 JavaScript 4.10 的 ArcGIS API

用法说明

概述

BuildingSceneLayer 设计用于在 SceneView 中可视化具有详细内部结构的建筑物。这些建筑模型通常是从建筑信息模型 (BIM) 项目中导出的。 BuildingSceneLayer 中的数据可以表示墙壁、照明设备、机械系统、家具等。

building-scene-layer

BuildingSceneLayer 的结构

BuildingSceneLayers 可视化建筑物的复杂数字模型,并允许您与建筑物的所有组件进行交互。由于高度复杂,BuildingSceneLayer 中的数据被组织在 BuildingGroupSublayers 中,其中包含 BuildingComponentSublayers

通常,BuildingSceneLayer 包含一个概览 BuildingComponentSublayer,可以加载该概览以显示建筑物的 shell 。

这有助于在不加载所有内部特征的情况下更快地预览整个建筑:

building-scene-layer-overview

BuildingSceneLayer 还包含一个完整模型BuildingGroupSublayer,其中包含按学科分组的建筑物中的所有函数:建筑、结构、电气和机械。每个学科都是一个BuildingGroupSublayer,其中包含BuildingComponentSublayers,具有屋顶、墙壁、门、空调装置、照明设备、柱子或地基等特征。

您可以在BuildingSceneLayer with Slice widget 示例的LayerList 中看到此层结构:

building-scene-layer-fullmodel

发布BuildingSceneLayer

来自Revit 文件的建筑数据可以使用ArcGIS Pro 2.3 版导入和发布为Scene Service

场景服务由 ArcGIS 服务器 REST 资源的 URL 或 PortalItem 标识:

const buildingLayer = new BuildingSceneLayer({
  url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Esri_Admin_Building/SceneServer",
  title: "Administration Building, Redlands - Building Scene Layer"
});

可视化

能够在其空间环境和景观中可视化详细的建筑信息是一项有用的能力。要从可视化中提取更多信息,可以将属性驱动的渲染器和可视变量分配给 BuildingComponentSublayer.renderer 。例如,Doors 子层可以使用 UniqueValueRenderer 来渲染所有需要替换为红色的室内门:

building-scene-layer-renderer

过滤数据

通常,BuildingSceneLayer 中的特征可能会相互遮挡。基于属性的过滤可用于仅显示满足特定 SQL 表达式的函数。要根据属性过滤要素,请使用过滤器集合。 Filter BuildingScenelayer 示例展示了如何过滤 BuildingSceneLayer 中的楼层。

BuildingSceneLayers 也可以通过应用客户端过滤器进行过滤。使用BuildingComponentSublayerView 上的filter 属性应用基于空间或属性的过滤器。

弹出窗口

BuildingSceneLayer 中的子图层可以使用 BuildingComponentSublayer.popupTemplate 属性自定义弹出内容。还支持popupTemplate 中的街机表达式。

查询

BuildingSceneLayercomponent sublayers和它们的sublayer views可以查询,但是返回的结果不同。 BuildingComponentSublayer 上的查询返回子图层中所有要素的结果,而 BuildingComponentSublayerView 上的查询返回视图中当前加载的要素的结果。

查询 BuildingComponentSublayer 将从关联要素图层中的属性中检索结果。如果图层没有关联的要素图层,则查询将被拒绝并出现错误。组件子层上的查询函数强大,因为它们是针对组件子层中的所有函数进行的。

为了在 BuildingComponentSublayerView 上进行基于属性的查询,需要在 BuildingSceneLayer 的 outFields 属性中指定必填字段,以确保客户端上的属性值可用于查询。您可以使用 availableFields 检查客户端上可用的字段。在BuildingComponentSublayerView 上,可以通过设置查询的geometryspatialRelationship 来进行空间查询。请注意,对于这种类型的图层,空间关系的评估基于Extent,而不是要素的足迹。仅当 spatialRelationship 设置为 intersectscontainsdisjoint 时才支持空间查询。

查询方式 BuildingComponentSubLayer(仅当 BuildingSceneLayer 具有关联要素图层时才有效) BuildingComponentSublayerView(适用于所有 BuildingSceneLayers)
queryExtent 返回二维程度全部子层中满足查询的特征 返回3D程度当前加载子层中满足查询的特征
queryFeatureCount 返回数量全部子层中满足查询的特征 返回数量当前加载子层中满足查询的特征
queryFeatures 返回全部子层中满足查询的特征 返回当前加载子层中满足查询的特征
queryObjectIds 返回 objectIds 的全部子层中满足查询的特征 返回的 objectIds当前加载子层中满足查询的特征

已知限制

  • 空间查询与 projection engine 文档中列出的限制相同。
  • 在计算与 query geometry 的空间关系时,空间查询使用要素的 Extent 而不是足迹。这意味着可能会从查询中返回一个要素,即使它的足迹与几何图形没有空间关系。
  • 目前在空间 queries 上仅支持 intersectscontainsdisjoint spatialRelationships
  • 如果BuildingSceneLayer 具有以下任何一项,则当前不支持空间查询SpatialReference
    • GDM 2000 (4742) - 马来西亚
    • Gsterberg (Ferro) (8042) - 奥地利/捷克共和国
    • ISN2016 (8086) - 冰岛
    • SVY21 (4757) - 新加坡

获取BuildingSceneLayer 中的要素范围

BuildingSceneLayers 不返回原始几何,因为这是二进制格式。要获取空间信息,您可以在 component sublayer 中查询要素的 2D 范围或 3D 范围。可以使用 BuildingComponentSublayer 上的 queryExtent() 方法检索所有要素(甚至是尚未加载的要素)的 2D 范围。仅当 BuildingSceneLayer 具有关联的要素图层时,此方法才会成功。只能使用 BuildingComponentSublayerView 上的 queryExtent() 方法查询已加载的要素的 3D 范围。

相关用法


注:本文由纯净天空筛选整理自arcgis.com大神的英文原创作品 BuildingSceneLayer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。