作者:zhangL
组件可以完成定制化、流程化、批量化的业务需求,下面给大家分享一个用iObjects Java实现gltf模型导入和gltf加载到kml图层的方法。
一、导入gltf模型数据
熟悉组件samplecode的同学都知道,数据导入通常用的都是DataImport类来实现的,比如shp、tif或者cad等第三方数据。但是gltf模型没有对应的DataImportSetting,所以需要用其他的方法进行导入。下面给大家分享下如何通过ModelConvertor模型转换类来导入gltf模型。
/*
* 数据源导入gltf文件
*/
public static void importGltf() {
Workspace ws = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer("D:\\mydata\\test.smwu");
info.setType(WorkspaceType.SMWU);
ws.open(info);
Datasource datasource = ws.getDatasources().get(0);
//创建模型数据集,用于存放导入的模型
if (datasource.getDatasets().contains("New_Model")) {
datasource.getDatasets().delete("New_Model");
DatasetVectorInfo datasetvectorinfo = new DatasetVectorInfo();
datasetvectorinfo.setType(DatasetType.MODEL);
datasetvectorinfo.setName("New_Model");
DatasetVector datasetTem = datasource.getDatasets().create(datasetvectorinfo);
datasetTem.setPrjCoordSys(new PrjCoordSys(4326));
}
//模型文件设置参数
ModelFileSetting setting = new ModelFileSetting();
setting.setFilePath("D:\\mydata\\jiuDian\\hotel_-1176.gltf");
DatasetVector dataset = (DatasetVector) datasource.getDatasets().get("New_Model");
Model model = new Model();
//模型转换
ModelConvertor.fromFile(model, setting);
Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
recordset.edit();
GeoModel3D geomodel3d = new GeoModel3D(model);
geomodel3d.setPosition(new Point3D(120, 30, 0));
recordset.addNew(geomodel3d);
recordset.update();
ws.save();
}
二、通过kml图层将gltf加载到场景
这部分分享下如何将本地的gltf模型加载到场景的kml图层中进行保存。
/*
* gltf模型添加到场景kml图层
*/
public static void addGltfToKML() {
Workspace ws = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer("D:\\mydata\\test.smwu");
info.setType(WorkspaceType.SMWU);
ws.open(info);
Scene scene = new Scene(ws);
scene.open("test");
//获取kml图层
Layer3DKML layer3d = (Layer3DKML) scene.getLayers().get("testgltf");
layer3d.setEditable(true);
System.out.println("添加前:" + layer3d.getFeatures().getCount() + "个要素");
//模型文件设置参数
ModelFileSetting setting = new ModelFileSetting();
setting.setFilePath("D:\\mydata\\jiuDian\\hotel_-1176.gltf");
Model model = new Model();
//模型转换
ModelConvertor.fromFile(model, setting);
//将模型加载到kml图层上
GeoModel3D geomodel3d = new GeoModel3D(model);
geomodel3d.setPosition(new Point3D(120, 30, 0));
GeoPlacemark geoPlaceMark = new GeoPlacemark();
geoPlaceMark.setGeometry(geomodel3d);
Feature3D feture3d = layer3d.getFeatures().add(geoPlaceMark);
scene.ensureVisible(geomodel3d.getBounds());
scene.refresh();
System.out.println("添加后:" + layer3d.getFeatures().getCount() + "个要素");
//保存kml图层
feture3d.toKMLFile("D:\\imydata\\testgltf.kml");
ws.getScenes().setSceneXML("test", scene.toXML());
ws.save();
}
ps:需要注意的是,将模型加载到场景保存后,还需要保存kml文件,否则还是不会保存下来。