首页 / 浏览问题 / 三维GIS / 问题详情
官方三维SDK无法解析S3M数据
6EXP 2023年03月08日

一、异常情况说明

当前部署的iServer版本为 10i(2020) (10.1.4-linux64) ;

发布原始数据为手工模型3DMax格式。

在浏览器获取得到S3M配置信息如下(将geoBounds和position敏感字段删除了):

{
	"asset": "SuperMap",
	"compressedPackageType": "Zip",
	"crs": "epsg:4326",
	"dataType": "BIM",
	"extensions": {
		"attachFiles": [],
		"hasSpatialIndex": "TRUE",
		"levels": [],
		"pointCloudLayers": [],
		"processType": "Normal",
		"renderMode": "Batch",
		"s3m:AttributeExtentName": "attribute",
		"s3m:FileType": "OSGBCacheFile",
		"s3m:MaterialType": "Normal",
		"s3m:StoreType": "SingleFile",
		"s3m:TextureCompressionType": "DXT",
		"s3m:TextureSharing": "TRUE",
		"s3m:TileSplitType": "GLOBAL",
		"s3m:TransparencyOptimization": "TRUE",
		"s3m:VertexWeightMode": "Height",
		"scales": [
			{
				"caption": "727",
				"tilewidth": "49.26",
				"value": "0.001374935603648082"
			}
		],
		"vol": []
	},
	"heightRange": {
		"max": 66.29599726444077,
		"min": 22.63398851513071
	},
	"idFieldName": "SmID",
	"lodType": "Replace",
	"pyramidSplitType": "QuadTree",
	"tiles": [
		{
			"boundingbox": {
				"max": {
					"x": 77.58744017425971,
					"y": 93.59958120357844,
					"z": 25.1890336899341
				},
				"min": {
					"x": 75.94317683089132,
					"y": 92.13757258058846,
					"z": 23.18248855522772
				}
			},
			"url": "24.s3mblock"
		}
	],
	"version": "2.0",
	"wDescript": {
		"category": "",
		"range": {
			"max": 66.29599726444077,
			"min": 22.63398851513071
		}
	}
}

使用 https://github.com/SuperMap/s3m-spec 的SDK,参考其中的js代码。对应使用原生Cesium.js 1.95版本。前端代码示意如下:

let layer = new S3MTilesLayer({
    context : scene._context,
    url: '/pathxxx/iserver/services/3D-mydataset/rest/realspace/datas/mydataname/config'
});

scene.primitives.add(layer);

错误消息提示:S3MTile.js:247 Uncaught (in promise) incorrect header check

错误堆栈:


unZip (S3ModelParser.js:82)
S3ModelParser.parseBuffer (S3ModelParser.js:1660)
contentReadyFunction (S3MTile.js:294)
(匿名) (S3MTile.js:347)
Promise.then(异步)
S3MTile.requestContent (S3MTile.js:341)
requestTiles (S3MTilesLayer.js:315)
S3MTilesLayer.update (S3MTilesLayer.js:371)
PrimitiveCollection.update (PrimitiveCollection.js:377)
updateAndRenderPrimitives (Scene.js:3648)
executeCommandsInViewport (Scene.js:3403)
Scene4.updateAndExecuteCommands (Scene.js:3124)
render (Scene.js:4176)
tryAndCatchError (Scene.js:4195)
Scene4.render (Scene.js:4285)
CesiumWidget.render (CesiumWidget.js:802)
render2 (CesiumWidget.js:41)
requestAnimationFrame(异步)
render2 (CesiumWidget.js:42)
requestAnimationFrame(异步)
render2 (CesiumWidget.js:42)
requestAnimationFrame(异步)
render2 (CesiumWidget.js:42)
requestAnimationFrame(异步)
startRenderLoop (CesiumWidget.js:68)
set (CesiumWidget.js:581)
CesiumWidget (CesiumWidget.js:371)
Viewer (Viewer.js:510)
(匿名) (AllS3MService.html?_ijt=7sbn5hur5mdsu0fc5mkd3l2mds:28)


其他:

前端代码应该是没有问题的,因为其他数据可以比如管线数据可以接入进来。当前错误消息定义位于 pako_inflate.min.js 文件中。

二、问题和诉求

  1. 为什么config拿到的S3M描述版本号为2.0?
  2. 当前s3mb解析过程中的解压失败是否是因为数据格式为2.0导致的?怎么解决或者这份数据应该怎样接入到原生Cesium环境下?
  3. S3M 2.0标准看起来没有公开,我没有搜索到任何有关的信息,官方是否有公开标准和解析方法的计划?
  4. 官方针对 https://github.com/SuperMap/s3m-spec 仓库是否仍然维护,因为cesium.js新版本去掉when.js依赖,当前仓库状态无法适配最新版本的Cesium.js

2 个回答

您好,因为社区是专门对应产品的技术人员帮助您解答基础平台产品的问题(如iDesktop、iClient、iObject等),

而s3m-spec是超图公司内单独部门的开源代码,因此社区这边没法帮助您解答相关问题。

建议您在该项目的GitHub上提issues,对应团队的人员才能看到您的问题以便沟通解决。

https://github.com/SuperMap/s3m-spec/issues

希望可以帮助到您。

10,588EXP 2023年03月08日
好的,谢谢您。

超图相关团队回复了。链接在 https://github.com/SuperMap/s3m-spec/issues/64#issuecomment-1469602412

复制粘贴一下帮助网络不畅的朋友:

1)为什么config拿到的S3M描述版本号为2.0?
答:版本号为2.0是由于使用SuperMap GIS生成的就是S3M2.0版本的数据。目前,该仓库的解析源码是针对团标T/CAGIS 1—2019的S3M1.0,SuperMap GIS可生产S3M1.0、S3M2.0、S3M3.0三个版本的数据,不建议使用源码去解析S3M2.0和S3M3.0版本的数据。
2)当前s3mb解析过程中的解压失败是否是因为数据格式为2.0导致的?怎么解决或者这份数据应该怎样接入到原生Cesium环境下?
答:目前看来解析失败是由于数据版本为2.0导致的,建议通过SuperMap iClient3D for Cesium来解决该问题,SuperMap iClient3D for Cesium获取链接为http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx
关于产品的使用问题可在超图问答社区提问。
3)S3M 2.0标准看起来没有公开,我没有搜索到任何有关的信息,官方是否有公开标准和解析方法的计划?
答:S3M2.0是SuperMap GIS内部的标准版本,暂时不对外公开。
4)官方针对 https://github.com/SuperMap/s3m-spec 仓库是否仍然维护,因为cesium.js新版本去掉when.js依赖,当前仓库状态无法适配最新版本的Cesium.js
答:官方一直在维护该仓库,相关工具和解析源码正在升级优化中,未来将会陆续上传。

6EXP 2023年03月17日
...