cesiumjs
中的 PolygonGeometry
是用来绘制多边形几何体的类,它可以用来表示平面上的任意多边形,支持内部空洞和样式。
new Cesium.PolygonGeometry(options)
参数 options
是一个对象,包含以下属性:
polygonHierarchy
:必填项,PolygonHierarchy
对象,用于指定多边形的坐标。height
:可选项,表示多边形的高度,如果不指定则为 0。extrudedHeight
:可选项,表示立体多边形的顶面高度,如果不指定则为 height
。vertexFormat
:可选项,表示顶点的格式,可以使用 VertexFormat
对象中的常量。stRotation
:可选项,表示纹理的旋转角度。polygonHierarchy
polygonHierarchy
是一个 PolygonHierarchy
对象,用于指定多边形的坐标。它是一个包含多个 outerRing
和 innerRing
的层次结构。
outerRing
表示一个封闭的外部环,innerRing
表示一个封闭的内部环(即空洞)。outerRing
和 innerRing
是可以任意嵌套的,也可以没有内部环。
PolygonHierarchy
对象可以通过以下代码创建:
var hierarchy = new Cesium.PolygonHierarchy(positions);
其中 positions
是一个数组,包含多边形的顶点坐标。
height
和 extrudedHeight
height
表示多边形的高度,即绘制在地球表面的高度,如果不指定则为 0。如果设置了 extrudedHeight
属性,则表示立体多边形的底面高度。
extrudedHeight
表示立体多边形的顶面高度,如果不指定,则等于 height
。
如果 height
和 extrudedHeight
都为 0,则多边形绘制在地球表面。
vertexFormat
vertexFormat
表示顶点的格式,可以使用 VertexFormat
对象中的常量。默认值为 VertexFormat.DEFAULT
。
stRotation
stRotation
表示纹理的旋转角度,如果不指定,则为 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
不支持标高改变的多边形(例如漫游)。