作者姜尔


一、技术思路

本文提供使用SuperMap iObject Java 提取倾斜摄影三维模型单体建筑模型方法代码以及效果展示

主要使用方法

ModelBuilder3D#extractBuildings(String scpFileName,DatasetVector datasetVectorSrc,Datasource targetDatasource,String strDatasetName, BuildingExtractParameters extractParameter)倾斜单体化提取建筑

该工具可基于建筑物轮廓面数据集和倾斜摄影三维模型数据(S3M),提取生成带顶部和侧面真实纹理的LOD 2.1级建筑精细模型。

参数说明

参数名

参数释义

参数类型

SCP路径:

选择待操作的S3M瓦片对应的配置文件。

S3M瓦片数据需要生成空间索引。

String

矢量面数据:

选择待操作的建筑物轮廓面数据集。

DatasetVector

矢量面与倾斜模型中建筑准确贴合

(可选)

设置输入的轮廓面是否准确贴合倾斜摄影三维模型数据中的建筑。

如果不勾选,表示轮廓面不准确,程序会对输入的矢量面数据进行放大偏移,使倾斜摄影三维模型数据中的建筑能完全处于轮廓面范围内。反之,则不进行操作。

Boolean

目标数据源

设置存储结果数据的数据源。

Datasource

结果数据集名

设置结果数据集的名称。

String

输出结果

参数名

参数释义

参数类型

结果数据集

结果数据集

DatasetVector

具体参数说明详见帮助文档(https://support.supermap.com/DataWarehouse/WebDocHelp/iObjectsJava/index.html):

二、主要代码

  boolean falg= ModelBuilder3D.extractBuildings(scpFileName, datasetVectorSrc,  targetDatasource, strDatasetName,  extractParameter) ;//倾斜单体化提取建筑,是否处理成功,类型值为boolean,true表示提取成功,反之则失败。

三、完整示例代码

package gettingstarted;

import com.supermap.data.*;
import com.supermap.realspace.threeddesigner.BuildingExtractParameters;
import com.supermap.realspace.threeddesigner.ModelBuilder3D;

public class qingxieextractBuildings {
    public static void main(String[] args) {
        
        Workspace workspace = new Workspace();// 定义工作空间
        WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
        workspaceConnectionInfo.setType(WorkspaceType.SMWU);
        workspaceConnectionInfo.setServer("dantihua\\WorkSpace.smwu");
        workspace.open(workspaceConnectionInfo);

        Datasource targetDatasource=workspace.getDatasources().get(0);//存储结果数据的数据源

        String scpFileName="dantihua\\Config\\Config.scp";//倾斜SCP路径

        DatasetVector datasetVectorSrc=(DatasetVector) targetDatasource.getDatasets().get("NewRegion3D");//对应建筑的矢量面数据集

        String strDatasetName="倾斜单体化";//输出的模型数据集名称

        BuildingExtractParameters extractParameter=new BuildingExtractParameters();//提取参数
        extractParameter.setAccurateBuildingFootprint(false);//设置输入的矢量面是否准确贴合建筑。设置true,表示会对建筑矢量面进行放大偏移,以便使矢量面更贴合建筑;设置false,表示不进行放大处理,采用原矢量面。
        System.out.println("开始提取倾斜单体建筑");
        boolean falg= ModelBuilder3D.extractBuildings(scpFileName, datasetVectorSrc,  targetDatasource, strDatasetName,  extractParameter) ;//倾斜单体化提取建筑,是否处理成功,类型值为boolean,true表示提取成功,反之则失败。
        System.out.println("提取状态:"+falg);

        datasetVectorSrc.close();
        workspaceConnectionInfo.dispose();
        workspace.dispose();


    }
}

四、运行结果展示

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐