ArcGIS Pro处理发布并在前端调用bim数据全过程-rvt转slpk

发布时间 2023-03-23 14:35:18作者: 孤草之魂

记录ArcGIS处理三维bim模型全纪录,从原始的rvt格式开始,到最后web前端js api调用的整个过程,并记录部分中间操作过程中出现的问题和解决办法。

本文示例使用:

软件:ArcGIS Pro3.0.1(破解版),

        GeoScene Portal2.1

       ArcGIS Maps SDK for JavaScript 4.23(原ArcGIS JS API)

bim数据格式:rvt

注:ArcGIS Pro/Portal和GeoScene Pro/Portal实际上是相同的东西,他们之间的操作是互通的;
  ArcGIS Maps SDK for JavaScript在示例中用的是4.23版本,建议尽量使用越新的版本。

本文操作流程:

1、将bim数据加载到ArcGIS Pro,进行地理配准,并调整bim数据的位置和旋转等。

2、使用BIM File To Geodatabase(BIM 文件至地理数据库)将rvt格式先转到地理数据库

3、使用Make Building Layer(创建建筑图层),将bim数据加载到地图

4、使用Create Building Scene Layer Content(创建建筑场景图层包)选择第2步在图层树上生成的bim数据转换成slpk格式

5、使用Share Package(共享包),将slpk发布成rest服务

6、使用ArcGIS Maps SDK for JavaScript的BuildingSceneLayer加载数据并在浏览器端展示

 详细操作步骤:

1、将bim数据加载到ArcGIS Pro,进行地理配准,并调整bim数据的位置和旋转等

ArcGIS Pro可以直接打开rvt格式添加到场景中查看bim数据(需要先新建局部场景,然后通过Catalog中添加或者通过Map下Add Data的Data添加rvt数据)

 添加后会显示两个图层分组,一个与文件同名,一个在文件名后添加后缀_Floorplan:

通常rvt格式数据加载到arcgis pro中并没有坐标系,在加载的过程中会提示:

此时就需要进行地理配准,移动到指定位置。

先使用 Map菜单下的GO TO XY,确定bim数据要移动到的位置:

输入经纬度,点击手型图标Pan To Location,将视图移动到指定位置

然后选择一个图层(要选到具体图层,可以随便选择一个,不能选择图层组),然后在BIM Data菜单下,选择Georeference(地理配准):

如果bim数据没有坐标系(没有配准过),则会弹出一个提示,点击确定,会将当前地图的坐标作为bim数据的坐标系:

此时会生成一个bim数据同名的.prj格式数据:

 同时会打开一个Georeference(地理配准)菜单,选择菜单下的Move to display(移至显示),会将指定图层移动到指定位置,另外可通过Move、Scale、Rotate进行微调

 调整完后点击Save(保存)按钮,这是会生成另外一个与bim数据同名的.wld3格式数据

注:CAD 和 BIM 文件需要具有有效的 Esri 坐标系 (.prj),并且可能需要可选的坐标变换信息文件 (.wld),
以确定应在地球表面上定位 CAD 或 BIM 数据中的坐标的方式。
参考:https://pro.arcgis.com/zh-cn/pro-app/latest/help/data/revit/geospatial-position-of-cad-and-bim-data.htm

选择Close Georeference(关闭地理配准),会发现rvt 所有图层都到新位置了:

只需调整一个图层,其他图层都会跟着变化,此时若还需要对模型位置进行微调,还可以再打开地理配准进行操作,同样只要选中其中一个图层即可。

特别说明:ArcGIS可以直接使用Create Building Scene Layer Content将rvt格式数据转换成slpk(可省去2、3步骤)。

通过下拉选择同名的数据集,设置输出slpk文件的路径和名称,以及坐标系(只有将数据添加到图层上输入数据集才可以使用下拉选择到对应数据):

因所使用的测试数据在使用该方法转换的时候会导致ArcGIS Pro奔溃(以前有直接转过是成功的,不知道是不是此次数据的问题还是软件的问题导致),故本次处理过程是先将rvt数据转到地理数据库再进行转换发布(测试成功)。

实际上如果rvt可以直接转成slpk的话,可以省去2、3步骤。

2、使用BIM File To Geodatabase将rvt格式先转到地理数据库中

 输入的bim文件使用rvt格式,选择坐标系后运行,将bim数据存储到地理数据库中:

3、使用Make Building Layer,将bim数据加载到地图上

效果:

如果直接从gdb中拖到地图里,效果比较差,图层比较多,渲染的颜色与原始数据不一致,所以要想在图层树上展示,先通过工具Make Building Layer,将地理数据库中的bim模型放到图层书上 :

4、根据第二步加载到图层树上的bim模型,使用Create Building Scene Layer Content转换成slpk数据:

输入数据集使用下拉选择左侧图层树上的数据,输出为slpk格式,根据实际情况设置坐标系,运行成功后即可生成slpk数据。

5、使用Share Package,对slpk数据进行发布

发布前需要在右上角登录用于发布数据的portal:

然后使用Share Package工具

选择需要发布的slpk数据,注意Publish web layer需要勾上,否则只上传数据包,并没有发布数据,发布成功后,在Portal上有两条记录:

如果在发布的时候没有勾选共享给所有人,则需要在ArcGIS Portal选择Scene Layer,将服务设置成共享,然后可以通过Server访问rest服务(如果没有共享,在Hosted目录下找不到发布好的服务):

  

  注:

在实际测试过程中,因刚开始ArcGIS Pro连的是10.5的Portal,数据在生成slpk后,在向Portal10.5上发布的时候不成功,报 Invalid scene package错误。后面拷贝数据到GeoScene Pro2.1中去发布测试成功。

 

6、使用ArcGIS Maps SDK for JavaScript(原ArcGIS JS API)的BuildingSceneLayer加载bim服务在前端浏览器展示:

参考示例:https://developers.arcgis.com/javascript/latest/sample-code/building-scene-layer-slice

const buildingLayer = new BuildingSceneLayer({
    url: "http://10.0.4.4/tcloud/rest/services/szbuilding2019/SceneServer"
});
map.add(buildingLayer);

buildingLayer.loadAll()
.then(function() {
    buildingLayer.allSublayers.forEach((layer) => {
        switch (layer.modelName) {
            case "FullModel":
                layer.visible = true;
            break;
            case "Overview":
                layer.visible = false;
            break;
        }
    });
})
.catch(function(error) {
    console.log("Error: one or more sublayer failed to load");
});

 通常在将BuildingSceneLayer添加到WebScene或Map时,只有概览层可见。在示例中,我们希望从头开始查看完整模型。所以我们隐藏概览层并显示完整模型层:

“FullModel”和“Overview”是BuildingSceneLayer的直接子层。如果您想在BuildingSceneLayer的子组中搜索,可以使用BuildingSceneLayer.allSublayers,它是子图层的平面数组。要识别子图层,最好使用BuildingSceneLayer.modelName,因为这是基于I3S 规范的标准名称,无法更改。

注:ArcGIS发布的bim数据分为概览层(OverView)和完整模型(Full Model),
  默认情况下使用BuildingSceneLayer加载图层是只加载概览层,要想将全部模型都能展示出来,需要将完整模型更改为可视。

通过ArcGIS Pro中拖入slpk数据,可以查看ArcGIS bim模型数据的组织结构:

 

参考资料:

https://pro.arcgis.com/en/pro-app/latest/help/data/revit/adding-revit-data-to-arcgis-pro.htm

https://www.cnblogs.com/yansc/p/14960126.html

https://blog.csdn.net/gislaozhang/article/details/104613247