cesium采用primitive方式加载geojson数据
- 自带接口GeoJsonDataSource(entity方式) 主要代码
var geojsonOptions = {
clampToGround : true //使数据贴地
};
var entities;
var promise =Cesium.GeoJsonDataSource.load(../data/json/world.json, geojsonOptions);
promise.then(function (dataSource) {
viewer.dataSources.add(dataSource);
entities =dataSource.entities.values;
for (var i = 0; i < entities.length;i++) {
var entity = entities[i];
// 赋随机颜色
var color=Cesium.Color.fromRandom({
alpha: 0.7});
entity.polygon.fill = true;
entity.polygon.material = color;
entity.polygon.outline = true;
entity.polygon.outlineColor = Cesium.Color.YELLOW;
}
});
效果
- 原生的primitive方式 主要代码
var urlpath = "../data/json/world.json"
$.get(urlpath, function (data) {
const josnN = JSON.parse(data);
const features = josnN.features;
addDataToGlobe(features);
})
function addDataToGlobe(features){
const instances = [];
for(let i=0; i<features.length; i++){
for(let j=0; j<features[i].geometry.coordinates.length; j++){
const polygonArr = features[i].geometry.coordinates[j].toString().split(,);
const polygon = new Cesium.PolygonGeometry({
polygonHierarchy : new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(polygonArr)
),
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
});
const geometry = Cesium.PolygonGeometry.createGeometry(polygon);
instances.push(new Cesium.GeometryInstance({
geometry : geometry,
attributes : {
color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromRandom({
alpha : 0.7})),
},
}));
}
}
const primitive = new Cesium.Primitive({
geometryInstances : instances,
appearance : new Cesium.PerInstanceColorAppearance({
// 为每个instance着色
translucent : true,
closed : false
}),
asynchronous : false, // 确定基元是异步创建还是阻塞直到准备就绪
});
scene.primitives.add(primitive);
}
效果 对比两种加载方式发现: 1、第二种加载速度比第一种快很多 2、第一种方式加载后,移动缩放地球有延迟现象,比较卡。第二种方式无。 3、第二种方式加载后的效果视觉上比第一种好 以上结论仅作参考,不同数据得到的结果可能不同
上一篇:
IDEA上Java项目控制台中文乱码
