iObjectsJava实现gltf模型导入和加载

作者: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文件,否则还是不会保存下来。

Guess you like

Origin blog.csdn.net/supermapsupport/article/details/121348192