第一种
viewer.entities.add({
id: `box`,
name : `box`,
position: Cesium.Cartesian3.fromDegrees(经度值, 纬度值, 离地面高度值),
box : {
dimensions : new Cesium.Cartesian3(方体长度值, 方体宽度值, 方体高度值),
material : Cesium.Color.fromCssColorString(“#ffffff”),
outline : false,
outlineColor : Cesium.Color.BLACK
}
});
第二种
let material = Cesium.Material.fromType('Color');
material.uniforms.color = Cesium.Color.fromCssColorString(“#ffffff”);
let center = Cesium.Cartesian3.fromDegrees(经度值, 纬度值, 离地面高度值);
let dimensions = new Cesium.Cartesian3(方体长度值, 方体宽度值, 方体高度值);
let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);
let hprRotation = Cesium.Matrix3.fromHeadingPitchRoll(
new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(90), 0.0, 0.0)
);
let hpr = Cesium.Matrix4.fromRotationTranslation(
hprRotation,
new Cesium.Cartesian3(0.0, 0.0, 0.0)
);
Cesium.Matrix4.multiply(modelMatrix, hpr, modelMatrix);
viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: Cesium.BoxGeometry.fromDimensions({
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,
dimensions: dimensions,
}),
modelMatrix: modelMatrix,
id: "BoxGeometry"
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
aboveGround: false,
material: material
})
})
);
第三种
let data = [
{
lon1: 112, lat1: 24,
lon2: 113, lat2: 24,
lon3: 113, lat3: 25,
lon4: 112, lat4: 25,
},
{
lon1: 114, lat1: 24,
lon2: 115, lat2: 24,
lon3: 115, lat3: 25,
lon4: 114, lat4: 25,
},
{
lon1: 118, lat1: 24,
lon2: 117, lat2: 24,
lon3: 117, lat3: 25,
lon4: 118, lat4: 25,
}
];
let that = this;
let geometryInstances = [];
data.map((item,index) => {
let instance = new Cesium.GeometryInstance({
id: `box_${index}`,
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray([
item.lon1, item.lat1,
item.lon2, item.lat2,
item.lon3, item.lat3,
item.lon4, item.lat4,
])
),
extrudedHeight: that.getDistance(item.lon1, item.lat1, item.lon2, item.lat2),
}),
})
geometryInstances.push(instance);
})
let material = new Cesium.Material.fromType("Color");
material.uniforms.color = Cesium.Color.RED;
let aper = new Cesium.MaterialAppearance({
material: material,
translucent: true,
closed: true,
})
that.viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: geometryInstances,
appearance: aper,
releaseGeometryInstances: false,
compressVertices: false,
})
)
getDistance(lon1, lat1, lon2, lat2){
let radLat1 = lat1*Math.PI / 180.0;
let radLat2 = lat2*Math.PI / 180.0;
let a = radLat1 - radLat2;
let b = lon1*Math.PI / 180.0 - lon2*Math.PI / 180.0;
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * 6378.137 ;
s = Math.round(s * 10000) / 10000 * 1000;
return s;
},