1、PolygonGeometry
多边形几何体
以下是 PolygonGeometry
类的构造函数属性,以表格形式展示:
0.0 | |||
VertexFormat.DEFAULT | |||
0.0 | |||
Ellipsoid.default | |||
CesiumMath.RADIANS_PER_DEGREE | |||
false | |||
true | |||
true | |||
ArcType.GEODESIC | ArcType.GEODESIC 和 ArcType.RHUMB 。 | ||
Cartesian2 点的 PolygonHierarchy 的纹理坐标。对于地面原语无效。 |
以下是 PolygonGeometry
类的静态方法和属性:
以下是 computeRectangleFromPositions
方法的参数和返回值:
Ellipsoid.default | |||
ArcType.GEODESIC | |||
返回值:结果矩形。
以下是 createGeometry
方法的参数和返回值:
以下是 fromPositions
方法的参数和返回值:
以下是 pack
方法的参数和返回值:
0 |
返回值:被打包的数组。
以下是 unpack
方法的参数和返回值:
0 | |||
返回值:修改后的结果参数或如果没有提供新实例,则为一个新的 PolygonGeometry 实例。
案例:
添加两个多边形几何体。下面是该函数的详细解释:
创建第一个多边形(polygon1):
使用 Cesium.PolygonGeometry
构造函数创建一个多边形几何体。polygonHierarchy
参数定义了多边形的形状和嵌套结构。这里,它首先定义了一个外层多边形(一个矩形),然后通过嵌套的Cesium.PolygonHierarchy
数组定义了一个或多个孔(内部多边形)。外层多边形的顶点通过 Cesium.Cartesian3.fromDegreesArray
方法从经纬度数组转换而来,形成一个矩形。第一个内部多边形(孔)同样通过经纬度数组定义,并嵌套在外层多边形内。此内部多边形也包含一个更小的内部多边形作为孔。 调用 Cesium.PolygonGeometry.createGeometry(polygon1)
将PolygonGeometry
转换为实际的几何体数据,以便渲染。
使用 Cesium.GeometryInstance
构造函数创建一个几何体实例。这个实例将用于将几何体添加到场景中,并可以附加额外的属性(如颜色)。geometry
属性设置为上面创建的geometry1
。attributes
属性用于定义每个实例的颜色,这里设置为蓝色。id
属性为实例设置了一个唯一标识符。
使用 Cesium.PolygonGeometry.fromPositions
方法直接从一组点创建多边形几何体。这种方法比使用polygonHierarchy
更简单,适合没有嵌套孔的情况。positions
参数是一个经纬度数组,定义了多边形的顶点。extrudedHeight
参数设置了多边形的拉伸高度,使其具有立体感。同样,调用 Cesium.PolygonGeometry.createGeometry(polygon2)
将几何体描述转换为可渲染的几何体数据。
类似于第一个多边形实例的创建,但这次使用第二个多边形的几何体和红色作为颜色。
使用 Cesium.Primitive
构造函数创建一个新的 Primitive 实例。Primitive 是 Cesium 中用于渲染几何体的基础对象。geometryInstances
属性包含要渲染的几何体实例数组(这里有两个实例)。asynchronous
属性设置为false
,但在这种情况下,它实际上并不影响 Primitive 的渲染,因为 Primitive 的渲染通常是同步的。appearance
属性设置为Cesium.PerInstanceColorAppearance
,它允许每个几何体实例根据其属性中定义的颜色进行渲染。这里还设置了translucent
(半透明)为false
和flat
(平面阴影)为true
,意味着几何体将使用平面着色,不考虑光照效果。最后,使用 viewer.scene.primitives.add(primitive)
将 Primitive 添加到 Cesium 场景中,以便在地图上渲染。
addPolygonGeometry(viewer) {
// 定义一个函数,用于向Cesium Viewer中添加多边形几何体
// 1. 创建一个嵌套多边形几何体 (polygon1)
// 这是一个具有多级嵌套的多边形,每个内部多边形定义了一个孔
let polygon1 = new Cesium.PolygonGeometry({
polygonHierarchy : new Cesium.PolygonHierarchy(
// 外层多边形的顶点坐标(经纬度),形成一个矩形
Cesium.Cartesian3.fromDegreesArray([
-109.0, 30.0,
-95.0, 30.0,
-95.0, 40.0,
-109.0, 40.0
]),
// 内部嵌套的多边形列表
[new Cesium.PolygonHierarchy(
// 第一个内部多边形的顶点坐标(经纬度),形成一个小矩形孔
Cesium.Cartesian3.fromDegreesArray([
-107.0, 31.0,
-107.0, 39.0,
-97.0, 39.0,
-97.0, 31.0
]),
// 第一个内部多边形内部的嵌套多边形列表
[new Cesium.PolygonHierarchy(
// 第二个内部多边形的顶点坐标(经纬度),形成更小的矩形孔
Cesium.Cartesian3.fromDegreesArray([
-105.0, 33.0,
-99.0, 33.0,
-99.0, 37.0,
-105.0, 37.0
]),
// 第二个内部多边形没有进一步的嵌套
[new Cesium.PolygonHierarchy(
// 这里实际上是不必要的嵌套,因为内部没有更多的多边形
Cesium.Cartesian3.fromDegreesArray([
-103.0, 34.0,
-101.0, 34.0,
-101.0, 36.0,
-103.0, 36.0
])
)] // 注意:这里的嵌套并没有实际效果,因为内部没有更多的多边形
)]
)]
)
});
let geometry1 = Cesium.PolygonGeometry.createGeometry(polygon1); // 转换为可渲染的几何体
// 2. 创建多边形几何体实例 (polygonInstance1)
let polygonInstance1 = new Cesium.GeometryInstance({
geometry: geometry1,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE) // 设置颜色为蓝色
},
id: 'polygonInstance1' // 设置实例ID
});
// 3. 从一组点创建一个多边形几何体 (polygon2)
// 这是一个简单的多边形,没有嵌套孔
let polygon2 = Cesium.PolygonGeometry.fromPositions({
positions : Cesium.Cartesian3.fromDegreesArray([
-72.0, 40.0,
-70.0, 35.0,
-75.0, 30.0,
-70.0, 30.0,
-68.0, 40.0
]),
extrudedHeight: 300000 // 设置拉伸高度
});
let geometry2 = Cesium.PolygonGeometry.createGeometry(polygon2); // 转换为可渲染的几何体
// 4. 创建多边形几何体实例 (polygonInstance2)
let polygonInstance2 = new Cesium.GeometryInstance({
geometry: geometry2,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED) // 设置颜色为红色
},
id: 'polygonInstance2' // 设置实例ID
});
// 5. 创建一个Primitive,用于将多边形实例添加到Cesium Viewer的场景中
let primitive = new Cesium.Primitive({
geometryInstances: [polygonInstance1, polygonInstance2], // 包含两个多边形实例
asynchronous: false, // 渲染是否异步进行(但这里通常对Primitive的渲染没有影响)
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false, // 是否半透明
flat: true // 是否使用平面阴影(不考虑光照)
})
});
// 6. 将Primitive添加到Cesium Viewer的场景中
viewer.scene.primitives.add(primitive);
2、RectangleOutlineGeometry
以下是 RectangleOutlineGeometry
类的构造函数属性,以表格形式展示:
Ellipsoid.default | |||
CesiumMath.RADIANS_PER_DEGREE | |||
0.0 | |||
0.0 | |||
以下是 RectangleOutlineGeometry
类构造函数可能抛出的错误:
DeveloperError
:options.rectangle.north
必须在区间[-PI/2, PI/2]
内。DeveloperError
:options.rectangle.south
必须在区间[-PI/2, PI/2]
内。DeveloperError
:options.rectangle.east
必须在区间[-PI, PI]
内。DeveloperError
:options.rectangle.west
必须在区间[-PI, PI]
内。DeveloperError
:options.rectangle.north
必须大于rectangle.south
。
以下是 RectangleOutlineGeometry
类的静态方法和属性:
以下是 createGeometry
方法的参数和返回值:
以下是 pack
方法的参数和返回值:
0 |
返回值:被打包的数组。
以下是 unpack
方法的参数和返回值:
0 | |||
返回值:修改后的结果参数或如果没有提供新实例,则为一个新的 RectangleOutlineGeometry 实例。
案例:
addRectangleOutlineGeometry(viewer) {
// 1. 创建一个矩形的轮廓线几何体
let rectangle1 = new Cesium.RectangleOutlineGeometry({
ellipsoid: Cesium.Ellipsoid.WGS84, // 使用WGS84椭球体
rectangle: Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), // 矩形的经纬度范围
height: 10000.0 // 轮廓线的高度(但请注意,这通常对轮廓线没有直接影响,因为它只是线)
});
let geometry1 = Cesium.RectangleOutlineGeometry.createGeometry(rectangle1); // 将几何体转换为渲染引擎可以理解的格式
// 创建一个矩形轮廓线的实例,但请注意,这里的颜色属性可能不会被正确应用
let rectangleInstance1 = new Cesium.GeometryInstance({
geometry: geometry1,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE) // 尝试设置颜色,但可能无效
},
id: 'rectangleInstance1' // 更正ID以反映其实际内容
});
// 2. 创建一个拉伸的矩形轮廓线(无顶部),但请注意拉伸对轮廓线没有直接影响
let rectangle2 = new Cesium.RectangleOutlineGeometry({
ellipsoid: Cesium.Ellipsoid.WGS84,
rectangle: Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),
height: 200000.0, // 底部高度(对轮廓线无直接影响)
extrudedHeight: 300000 // 拉伸高度(对轮廓线无直接影响)
});
let geometry2 = Cesium.RectangleOutlineGeometry.createGeometry(rectangle2);
// 创建一个拉伸矩形轮廓线的实例,同样注意颜色属性可能无效
let rectangleInstance2 = new Cesium.GeometryInstance({
geometry: geometry2,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED) // 尝试设置颜色,但可能无效
},
id: 'rectangleInstance2' // 更正ID以反映其实际内容
});
// 创建一个Primitive对象,但请注意PerInstanceColorAppearance可能不适用于轮廓线
let primitive = new Cesium.Primitive({
geometryInstances: [rectangleInstance1, rectangleInstance2],
asynchronous: false, // Cesium的Primitive通常不使用此属性来控制异步性
appearance: new Cesium.PerInstanceColorAppearance({ // 这可能不适用于轮廓线
translucent: false, // 半透明设置,但可能无效
flat: true // 使用平面阴影,不考虑光照,但同样可能无效
})
});
// 将Primitive对象添加到Cesium Viewer的场景中
viewer.scene.primitives.add(primitive);
// 注意:由于PerInstanceColorAppearance可能不适用于轮廓线,
// 因此上述代码中的颜色和外观设置可能不会产生预期的效果。
// 对于轮廓线,您可能需要使用PolylineCollection或其他适合线条的Cesium对象。
}