前言
要理解一个概念,贴地是针对 terrain 或者 3D Tiles
entity
实现方式:classificationType: Cesium.ClassificationType.BOTH
clampToGround: true
var polygon = viewer.entities.add({
polygon: {
hierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromRadiansArray([
-1.3194369277314022,
0.6988062530900625,
-1.3193955980204217,
0.6988091578771254,
-1.3193931220959367,
0.698743632490865,
-1.3194358224045408,
0.6987471965556998,
])
),
material: Cesium.Color.RED.withAlpha(0.5),
classificationType: Cesium.ClassificationType.BOTH,
},
});
var polyline = viewer.entities.add({
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray([
-75.60217330403601,
40.04102882709425,
-75.59968252414251,
40.04093615560871,
-75.598020153828,
40.04079437042357,
]),
width: 8,
material: new Cesium.PolylineOutlineMaterialProperty({
color: Cesium.Color.YELLOW,
outlineWidth: 2,
outlineColor: Cesium.Color.BLACK,
}),
clampToGround: true,
},
});
primitive
本身没有贴地属性
两个扩展对象有贴地属性
GroundPrimitive:CircleGeometry
, CorridorGeometry
, EllipseGeometry
, PolygonGeometry
, and RectangleGeometry
GroundPolylinePrimitive: GroundPolylineGeometry
classificationType: Cesium.ClassificationType.BOTH
功能见:测量距离和面积的方法
注意:贴线和其他集合体为不同对象
const geomety = new Cesium.GroundPolylineGeometry({
positions: this.positions,
height: this.height,
width: this.width < 1 ? 1 : this.width,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
ellipsoid: this.ellipsoid,
});
this._primitive = new Cesium.GroundPolylinePrimitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: geometry,
id: this.id,
pickPrimitive: this,
}),
appearance: this.appearance,
asynchronous: this.asynchronous,
classificationType: Cesium.ClassificationType.BOTH
});
通过获取高程来实现贴地
// 官方示例
// Query the terrain height of two Cartographic positions
var terrainProvider = Cesium.createWorldTerrain();
var positions = [
Cesium.Cartographic.fromDegrees(86.925145, 27.988257),
Cesium.Cartographic.fromDegrees(87.0, 28.0)
];
var promise = Cesium.sampleTerrain(terrainProvider, 11, positions);
Cesium.when(promise, function(updatedPositions) {
// positions[0].height and positions[1].height have been updated.
// updatedPositions is just a reference to positions.
});
// 应用示例
Cesium.sampleTerrain(
AppCesium.cesiumViewer.terrainProvider,
CesiumConfig.terrain.pointHeightLevel,
Cesium.Cartographic.fromDegrees([108.03864032, 25.2482])
).then(function (updatedCartographics) {
console.log(updatedCartographics);
for (var i = 0; i < updatedCartographics.length; i++) {
var cartographic = updatedCartographics[i];
(entityArr[i].position = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height
)),
viewer.entities.add(entityArr[i]);
}
viewer.zoomTo(viewer.entities);
});