本篇抛砖引玉,以创建Polygon
为例展示基础使用时,使用Entity
和primitive
的区别。
上图展示的创建polygon
的两种方式对应的思维导图,基于此我们分析下分别通过Entity
和Primitive
创建一个Polygon
的过程
polygon
属性
hierarchy
material
outline
GeometryInstance
对象,并配置geometryInstances
属性
PolygonGeometry
对象,并配置geometry
属性
PolygonHierarchy
对象,并配置polygonHierarchy
属性Apperance
对象,并配置apperance
属性
Material
对象,并配置material
属性下面我们分别使用Entity
和Primitive
创建一个Polygon
,并添加
const entity = viewer.entities.add({
name : 'Polygon with outline',
// 配置polygon属性
polygon: {
// 配置组成polygon的point信息
hierarchy: Cesium.Cartesian3.fromDegreesArray([
110.0,
37.0,
120.0,
37.0,
120.0,
33.0,
110.0,
33.0,
]),
height: 0.0, // height is required for outline to display
// 配置填充面材质
material: Cesium.Color.RED.withAlpha(0.5),
// 配置边框线
outline: true,
outlineColor: Cesium.Color.BLUE,
},
});
viewer.zoomTo(entity);
// 初始化数据
const polygonCoordinate = [
110.0,
37.0,
120.0,
37.0,
120.0,
33.0,
110.0,
33.0,
]
Polygon
并添加// 初始化polygonPrimitive
const polygonPrimitive = new Cesium.Primitive({
// 创建GeometryInstance对象
geometryInstances : new Cesium.GeometryInstance({
// 创建PolygonGeometry对象
geometry: new Cesium.PolygonGeometry({
// 创建polygonHierarchy对象
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(polygonCoordinate),
),
height: 0
})
}),
// 创建EllipsoidSurfaceAppearance对象
appearance: new Cesium.EllipsoidSurfaceAppearance({
// 创建material对象
material : Cesium.Material.fromType('Color', {
color : Cesium.Color.BLUE.withAlpha(0.5) // 封装颜色信息
})
})
})
// 添加polygonPrimitive
viewer.scene.primitives.add(polygonPrimitive);
PolygonOutline
并添加// 初始化polygonOutlinePrimitive
const olygonOutlinePrimitive = new Cesium.Primitive({
// 创建GeometryInstance对象
geometryInstances : new Cesium.GeometryInstance({
// 创建PolygonOutlineGeometry对象
geometry: new Cesium.PolygonOutlineGeometry({
// 创建polygonHierarchy对象
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(polygonCoordinate),
),
height: 0
}),
attributes : {
color : Cesium.ColorGeometryInstanceAttribute.fromColor(
new Cesium.Color(0.0, 0.0, 0.0, 1.0)
)
},
}),
appearance: new Cesium.PerInstanceColorAppearance({
flat : true,
translucent : false
})
})
viewer.scene.primitives.add(olygonOutlinePrimitive);
简单对比下可以发现,
其一:
Entity
在创建过程中更加方便,且可以直接指定:
Primitive
的创建过程中
GeometryInstance
对象和Apperance
对象,并指定几何信息和材质信息其二:
通过上表的简单对比可以发现:
Entity
的几何属性可以直接使用坐标数组,相较于创建PolygonHierarchy
对象方便很多Entity
的材质属性可以直接使用Color
对象,相较Apperance
对象简答很多
Color
对象被封装在Material
对象中Material
对象则被封装在Apperance
对象中