首页 / 浏览问题 / 组件GIS / 问题详情
linux iobject java .obj模型无法导入数据集
1EXP 2023年03月10日

使用产品:iobject java linux64 11.0.1.21420.98023

操作系统:CentOS Linux 7 (Core) 内核:3.10.0-1127.el7.x86_64

使用的obj模型,在iDesktopX win64 11.0.1 21525 98691 中导入没有问题

1.使用ImportSettingModelOSG导入

DataImport dataImport = new DataImport();
ImportSettingModelOSG setting = new ImportSettingModelOSG();
setting.setObjRotate(com.supermap.data.conversion.ObjRotateOption.RotateYZ);
setting.setPosition(position);
setting.setTargetDatasource(ds);
setting.setTargetDatasetName(datasetName);
setting.setSourceFilePath(path);
setting.setTargetPrjCoordSys(PrjCoordSys.fromEPSG(EPSG));
setting.setEnableMultiThread(true);
setting.setTargetEncodeType(EncodeType.NONE);
setting.setSourceFileCharset(Charset.UTF8);
setting.setImportMode(ImportMode.OVERWRITE);
dataImport.getImportSettings().add(setting);

结果没有报错,但没有新数据集出现在数据源中

2.使用ModelConvertor.fromFile导入

GeoModel3D geoModel3D = new GeoModel3D();
Model modelContainer = new Model();
ModelFileSetting impSetting = new ModelFileSetting();
DatasetVectorInfo modelDatasetInfo = new DatasetVectorInfo();
impSetting.setFilePath(path);
ModelConvertor.fromFile(modelContainer, impSetting);
geoModel3D.setModel(modelContainer);
geoModel3D.setPosition(position);
geoModel3D.setRotationZ(-1);
datasetName = ds.getDatasets().getAvailableDatasetName(datasetName, DatasetType.MODEL);
modelDatasetInfo.setName(datasetName);
modelDatasetInfo.setType(DatasetType.MODEL);
DatasetVector modelDataset = ds.getDatasets().create(modelDatasetInfo, PrjCoordSys.fromEPSG(EPSG));
Recordset recordset = modelDataset.getRecordset(true, CursorType.DYNAMIC);
recordset.edit();
recordset.addNew(geoModel3D);
recordset.update();
recordset.close();
recordset.dispose();
modelDataset.close();
modelContainer.dispose();
modelDatasetInfo.dispose();

结果报错,程序终止,错误日志:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f7fbf3b0374, pid=30449, tid=0x00007f806c4fc700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libSuFileParser.so+0x57374]  UGC::UGFileParseModel::SetParseModelNode(unsigned char)+0x4
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

1个回答

您好,首先导入模型建议您是用ModelConvertor。

最后结果失败和错误日志这个来定位问题太笼统了,我建议您是断点或者控制代码,

定位到导入环节中具体是走到哪一行代码崩溃,打印上下相关参数,确定导入失败的问题是什么。

而且看您方法二的代码,要是模型数据集都没有创建出来的话,其实问题还不在导入模型的问题上。

而且大致来看您错误日志的话,可能是环境配置问题哦,代码都没运行起来。

希望可以帮助到你。
9,793EXP 2023年03月10日
上面日志已经有代码崩溃的具体方法了,就是执行ModelConvertor.fromFile这个方法的时候崩溃的,我还有详细一点的日志:

Stack: [0x00007f806c3fd000,0x00007f806c4fd000],  sp=0x00007f806c4fb290,  free space=1016k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libSuFileParser.so+0x57374]  UGC::UGFileParseModel::SetParseModelNode(unsigned char)+0x4

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.supermap.realspace.threeddesigner.ModelConvertorNative.jni_FromFile(JLjava/lang/String;ZZZDDDDDI)Z+0
j  com.supermap.realspace.threeddesigner.ModelConvertor.fromFile(Lcom/supermap/data/Model;Lcom/supermap/realspace/threeddesigner/ModelFileSetting;)Z+167
j  IObjectApp.convertObjToDatasource(Ljava/lang/String;Ljava/lang/String;Lcom/supermap/data/Point3D;Lcom/supermap/data/Datasource;I)Ljava/lang/String;+46
j  IObjectApp.impObj(Ljava/lang/String;[DLjava/lang/String;)Lcom/supermap/data/Workspace;+362
j  IObjectApp.main([Ljava/lang/String;)V+67

另外,这套代码方法1,使用相同的数据,在windows iobjectsjava-11.0.1-x86_64 的环境下运行是没有问题的

还有,在导入模型之前,我有创建文件型工作空间以及数据源的操作,是没有问题的,这样能证明iobject运行和许可环境是没有问题的吧?

这个是linux环境下IObject环境检测的结果:

提示像是缺少libWrapj.so这个文件,但是我下载了11i和10i几乎所有的linux64的iobject产品包,无论是Bin版还是绿色版,里面都没有这个文件,产品包里面都没有的文件我没法判断这个是不是必须的,或者导入问题是受这个影响

你试一下我的这三个数据你导入正常吗。

fbx、obj、gltf

链接:https://pan.baidu.com/s/16Qnr3wULYuCyg_NCgzbKRw?pwd=fylx
提取码:fylx
--来自百度网盘超级会员V5的分享
那个...我看不到你发的数据,还是说你让我试试别的格式?
我又发了一次给你,你看看能看到里面数据吗

链接:https://pan.baidu.com/s/1MLHWE-II7UeNqogzoGmWag?pwd=0wrd
提取码:0wrd
--来自百度网盘超级会员V5的分享
看到了,测试结果:

ModelConvertor.fromFile:

1.gltf 导入成功

2.obj、fbx导入失败,报错代码位置一样

ImportSettingModel:

obj和fbx导入都没报错,但是结果数据源中没有数据集存在
您社区私信给我留个您的联系方式。
您好,请问这个问题有了解决方案了吗,我在使用ModelConvertor.fromFile的时候也遇到了这个问题
...