fanvanzh / 3dtiles

The fastest tools for 3dtiles convert in the world!
Apache License 2.0
1.98k stars 594 forks source link

坐标转换的问题 #9

Closed helen00 closed 6 years ago

helen00 commented 6 years ago

请问可以支持不同坐标系下osgb文件转3dtiles吗?

fanvanzh commented 6 years ago

目前 metadata.xml 的坐标默认按照经纬度处理的。 你的 metadata.xml 是什么坐标系的,可否发个案例参考下。

helen00 commented 6 years ago

您能给我个联系方式或者qq吗?测试上传不上去

fanvanzh commented 6 years ago

可以把 metadata. xml 的内容复制粘贴到这里。

helen00 commented 6 years ago
EPSG:4547 450952,2483262,0
fanvanzh commented 6 years ago

这是 xml 的全部内容吗? 另外 你也可以在转换时候指定 wgs84 坐标系的 xy 坐标值。

helen00 commented 6 years ago

不需要吧 3dtiles不是都是笛卡尔吗

fanvanzh commented 6 years ago

不是。 3dtiles 里面的经纬度都是 wgs84 的标准椭球体。

helen00 commented 6 years ago

"sphere":[6358584.5614919337,-499318.28315921169,-156.76461564152245,30.126176834106445]

我看到3dtiels里面的数据都是这样的,不是笛卡尔坐标下的数据吗?

fanvanzh commented 6 years ago

我的意思你加载 3dtiles 时候指定的经纬度坐标, cesium 会帮你转到 笛卡尔三维坐标里

helen00 commented 6 years ago

哦,为什么我转的模型也不能贴球面?

fanvanzh commented 6 years ago

你可以在命令行里指定参数: x,y 的经纬度,offset = 0(模型的最低面贴地)

helen00 commented 6 years ago

不管加不加xy 转换之后还是加载不上

var longitude = 119.47888999999994; var latitude = 32.39719999999999; var height = 9.313225746154785e-10; var heading = 0; var tileset = new Cesium.Cesium3DTileset({ url: '3dtiles/Tileset.json' }); viewer.scene.primitives.add(tileset); tileset.readyPromise.then(function(argument) { //var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height); //var mat = Cesium.Transforms.eastNorthUpToFixedFrame(position); //var rotationX = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(heading))); //Cesium.Matrix4.multiply(mat, rotationX, mat); //tileset._root.transform = mat; viewer.camera.flyToBoundingSphere(tileset.boundingSphere); });

不知道我这样写是否问题

fanvanzh commented 6 years ago

不知道,我不会 js, 没写过 Cesium 前端。

helen00 commented 6 years ago

那您怎么测试的呢?

helen00 commented 6 years ago

请问能否提供下前端的加载代码,您的转换数据和默认的3dtiles结构好像不太一样

fanvanzh commented 6 years ago
var tileset;
tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url: '../b3dmData/',
    // debugShowBoundingVolume: true,
    maximumMemoryUsage: 2048,
    skipLevelOfDetail: true,
    baseScreenSpaceError: 10,
    skipScreenSpaceErrorFactor: 16,
    skipLevels: 1,
    immediatelyLoadDesiredLevelOfDetail: false,
    loadSiblings: false,
    cullWithChildrenBounds: true,
    timeline: false,
    animation: false,
    debugShowBoundingVolume: true
}));
tileset.readyPromise.then(function() {
    var boundingSphere = tileset.boundingSphere;
    viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius));
    viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
}).otherwise(function(error) {
    throw (error);
});
helen00 commented 6 years ago

模型转换后,cesium加载没显示,上传部分数据,您可以测试下 data.zip

fanvanzh commented 6 years ago

拉最新版代码试试,增加了坐标转换功能。