1、利用cesiumLab将shp转换为3dtiles
2、选择一个输入文件。系统自动会读取输入数据里的信息,例 如字段列表,投影信息等。否则会列出数据的所有字段。如果文件里不包含投影,那么需要选择投影信息。
输入文件:支持 shp,mif,kml 等各种 gdal 支持的格式
中文编码: 默认支持的字段中文编码为 utf8,对于一些国产的 shp 数据,中文可能是 GBK,如果在 cesium 点击查看属性的时候发现乱码,请按 GBK 尝试。
3、建筑高度: 如果文件中包含高度字段,请选
后面的第二个框表示高度比例,和字段值相乘。比如说 shp 没有高度,只有楼层,那么第二个值设置为 3 米可以模拟一下不同高度。 如果文件中不包含高度字段,请选择
字段列表: 选择矢量文件后,会自动列出。
是否储存:勾选后保存到 3dtiles 中。
名称小写:勾选后字段名变小,比如 Height 在 3dtiles 中存为 height
值转数字:比如这里的 Height 字段,类型是 String(字符串),但是实际存 的是高度,那么勾选后,3dtiles 中将保存数值类型,数值类型我们可以在设置 3dtiles 样式的时候使用。
高程文件: 可选的操作,如果对应的 shp 有地形高程文件,那么选择后,可以处理为 3dtiles 的时候自动附加地表高程。 这里注意,国内的 shp 一般都是加偏的,但是 dem 都用 srtm 等都是未加偏 的,用户最好自己保证数据是否匹配。
筛选阈值: 如果矢量 feature 的大小超过筛选阈值 * 块大小,那么该 feature 在当前块中可见。
误差倍率: 调节保存到 tileset.json中的 gemetricError。
4、转换完成后,生成如下格式文件:
5、在服务器上进行发布,到上面的目录。在cesium加载如下代码。
原生cesium采用如下方式加载
var longitude = 113.3061993318322;
var latitude = 22.97302468714043;
var height = -1.1406325468715177e-9;
var heading = 0;
var tileset = new Cesium.Cesium3DTileset({
url: 'http://localhost:9002/api/folder/662fee081d3f4b34b72d629d536b7336/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.flyTo({destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height + 1000)});
});