基于Cesium的实景三维模型动态更新-以3Dtiles为例(番外篇)
Posted lwx2233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Cesium的实景三维模型动态更新-以3Dtiles为例(番外篇)相关的知识,希望对你有一定的参考价值。
在进行实景三维模型动态更新的时候,经常会出现一些误差问题,这里将我遇到的问题以及解决方法统一写出来:
1.模型高度问题
在无人机采集数据倾斜建模后,可能会出现新旧模型高度不一致的情况,如下图:
可以通过clampToHeigthMostDetailed的办法去获取他的高度(如果你可以的话记得告诉我!),这里也给出代码
function getHeightByType(cartesians)
return new Promise(async (resolve) =>
try
let promise = viewer.scene.clampToHeightMostDetailed(cartesians);
promise.then((updatedCartesians) => resolve(updatedCartesians));
catch (e)
resolve(false);
);
或者有比较吊诡的办法,直接获取某个点新旧模型的高度值,得到高度差,再用上模型的平移方法去纠正,代码如下:
1.1点选模型获取高度
//鼠标点选获取模型上的点,可以准确的获取到某经纬度下模型的高度
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (evt)
var cartesian = viewer.scene.pickPosition(evt.position);
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var height = cartographic.height; // 模型高度
var mapPosition =
x: lng,
y: lat,
z: height,
;
console.log(mapPosition);
, Cesium.ScreenSpaceEventType.LEFT_CLICK);
这里的mapPosition就是你点选的那个点,只需要获得z(高度)就够了。
1.2调整模型高度
//根据tileset的边界球体中心点的笛卡尔坐标得到经纬度坐标,经纬度
var cartographic = Cesium.Cartographic.fromCartesian(tilesset.boundingSphere.center);
//根据经纬度和高度0,得到地面笛卡尔坐标
var surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height,
);
console.log(cartographic.height)
var height = cartographic.height + 5.40533759063451
//根据经纬度和需要的高度,得到偏移后的笛卡尔坐标
// var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 60);
var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height);
//计算坐标变换,得到新的笛卡尔坐标
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
//调整3dtiles位置
tilesset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
height后面那一段5.40533就是我们手动获取的新旧模型的高度差,之后通过位置移动就可以实现调整模型的高度一致了。
以上是关于基于Cesium的实景三维模型动态更新-以3Dtiles为例(番外篇)的主要内容,如果未能解决你的问题,请参考以下文章
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例