cesiumjs 中的 PolygonGeometry 是用来绘制多边形几何体的类,它可以用来表示平面上的任意多边形,支持内部空洞和样式。
new Cesium.PolygonGeometry(options)
参数 options 是一个对象,包含以下属性:
polygonHierarchy:必填项,PolygonHierarchy 对象,用于指定多边形的坐标。height:可选项,表示多边形的高度,如果不指定则为 0。extrudedHeight:可选项,表示立体多边形的顶面高度,如果不指定则为 height。vertexFormat:可选项,表示顶点的格式,可以使用 VertexFormat 对象中的常量。stRotation:可选项,表示纹理的旋转角度。polygonHierarchypolygonHierarchy 是一个 PolygonHierarchy 对象,用于指定多边形的坐标。它是一个包含多个 outerRing 和 innerRing 的层次结构。
outerRing 表示一个封闭的外部环,innerRing 表示一个封闭的内部环(即空洞)。outerRing 和 innerRing 是可以任意嵌套的,也可以没有内部环。
PolygonHierarchy 对象可以通过以下代码创建:
var hierarchy = new Cesium.PolygonHierarchy(positions);
其中 positions 是一个数组,包含多边形的顶点坐标。
height 和 extrudedHeightheight 表示多边形的高度,即绘制在地球表面的高度,如果不指定则为 0。如果设置了 extrudedHeight 属性,则表示立体多边形的底面高度。
extrudedHeight 表示立体多边形的顶面高度,如果不指定,则等于 height。
如果 height 和 extrudedHeight 都为 0,则多边形绘制在地球表面。
vertexFormatvertexFormat 表示顶点的格式,可以使用 VertexFormat 对象中的常量。默认值为 VertexFormat.DEFAULT。
stRotationstRotation 表示纹理的旋转角度,如果不指定,则为 0。
以下代码演示如何创建一个有内部空洞的多边形几何体:
var outerRing = Cesium.Cartesian3.fromDegreesArray([
-90.0, 30.0,
-60.0, 30.0,
-60.0, 40.0,
-90.0, 40.0
]);
var innerRing = Cesium.Cartesian3.fromDegreesArray([
-85.0, 32.0,
-83.0, 32.0,
-83.0, 38.0,
-85.0, 38.0
]);
var hierarchy = new Cesium.PolygonHierarchy(outerRing, [innerRing]);
var polygon = new Cesium.PolygonGeometry({
polygonHierarchy: hierarchy,
height: 0
});
var geometryInstance = new Cesium.GeometryInstance({
geometry: polygon,
attributes: {
color: new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
}
});
scene.primitives.add(new Cesium.Primitive({
geometryInstances: [geometryInstance]
}));

PolygonGeometry 只表示几何体的形状,不包含材质和样式信息。如果需要设置颜色、贴图等样式,可以使用 Primitive 把 PolygonGeometry 加入到场景中,并指定材质和其他属性。PolygonGeometry 支持几何体数据的共享,即多个 geometryInstance 可以共享同一个 PolygonGeometry 对象。这可以提高性能和节省内存,但需要保证这些 geometryInstance 的属性相同。PolygonGeometry 不支持自相交的多边形。如果需要绘制自相交的多边形,可以先将其拆分为多个不自相交的多边形,然后分别绘制。PolygonGeometry 不支持标高改变的多边形(例如漫游)。