方法一
首选将shp文件转换为cesium可以加载的geojson文件,在线转换工具,使用cesium的GeoJsonDataSource接口类,根据建筑物高度上色加载geojson文件
代码如下
var geojsonOptions = {
clampToGround : true //使数据贴地
};
var entities;
var promise =Cesium.GeoJsonDataSource.load('../data/json/testData.json', geojsonOptions);
promise.then(function (dataSource) {
viewer.dataSources.add(dataSource);
entities =dataSource.entities.values;
viewer.zoomTo(entities);
for (var i = 0; i < entities.length;i++) {
var entity = entities[i];
var lvalue = entity.properties._Height._value;
var color;
if(lvalue<10){
color = "151,232,173";
}
else if(lvalue>=10&&lvalue<20){
color = "244,217,99";
}
else if(lvalue>=20&&lvalue<30){
color = "247,180,45";
}
else if(lvalue>=30&&lvalue<45){
color = "241,147,3";
}
else if(lvalue>=45&&lvalue<60){
color = "239,117,17";
}
else if(lvalue>=60&&lvalue<70){
color = "238,88,31";
}
else if(lvalue>=70&&lvalue<80){
color = "224,63,22";
}
else{
color = "208,36,14";
}
entity.polygon.name = entity.properties._Floor._value;
entity.polygon.fill = true;
entity.polygon.material = Cesium.Color.fromCssColorString("rgb("+color+")");
entity.polygon.extrudedHeight = lvalue;
entity.polygon.outline = false;
entity.polygon.outlineColor = Cesium.Color.YELLOW;
}
});
结果如下
方法二
采用cesiumlab工具将shp文件转换为cesium可以加载的3dtiles格式,建筑数据为白模型。有纹理的模型需要在cesiumlab中自行设置
代码如下
// 加载tileset.json
var tileset = new Cesium.Cesium3DTileset({
url:"../data/Tilesets/testdata-No/tileset.json"
});
viewer.scene.primitives.add(tileset);
tileset.readyPromise.then(function(tileset) {
viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0, -2.0, Math.max(100.0 - tileset.boundingSphere.radius, 0.0)));
}).otherwise(function(error) {
throw(error);
});
结果如下
综合对比两种方法,发现方法二加载速度比方法一更快,加载的数据量更多
————————————————
原文链接:https://blog.csdn.net/u013270065/article/details/102801446