记录一个待解决的问题
- 轮廓线宽度设置后无效果
一、Billboard 广告牌(图片形式)
用于绘制位置图标,方便根据图标来查看地区的特征,如国旗的显示,以及城市标志性建筑物的显示。官方链接:点击访问
var entity = viewer.entities.add({
// id: "", // 此对象的唯一标识符。如果未提供,则将生成GUID。
name: "billboard", // 获取或设置对象的名称
// description: "", // 获取或者设置HTML描述
// orientation: "", // 获取或者设置方向
position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), // 获取或者设置位置
billboard: {
show: true, // default 是否显示该实体
image: "/static/images/pythondjango.png", // 指定广告牌的URL,Django中可以是静态文件也可以是媒体文件
scale: 1.0, // default: 1.0 ,一个数字属性,指定要应用于图像尺寸的比例
//像素偏移 type: Cartesian2 default:Cartesian2.ZERO
pixelOffset: new Cesium.Cartesian2(0, 0), // 二维笛卡尔坐标系
//眼睛偏移 type: Cartesian3 default:Cartesian3.ZERO
eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // 三维笛卡尔坐标点
// 水平对齐方式 type: HorizontalOrigin default:HorizontalOrigin.CENTER
// CENTER 原点在对象的水平中心;LEFT 原点在对象的左侧;RIGHT 原点在对象的右侧
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
// 垂直对齐方式 type: VerticalOrigin default:VerticalOrigin.CENTER
// CENTER 原点位于 BASELINE 和 TOP 之间的垂直中心;BOTTOM 原点在对象的底部;
// BASELINE 如果对象包含文本,则原点位于文本的基线,否则原点位于对象的底部;TOP 原点在对象的顶部
verticalOrigin: Cesium.VerticalOrigin.CENTER, // default: CENTER 垂直对齐位置 参考Cesium.VerticalOrigin
// 获取或设置此广告牌的高度参考 type: HeightReference default:HeightReference.NONE
// NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度
heightReference: Cesium.HeightReference.NONE,
// 颜色 type: Color default:Color.WHITE
color: Cesium.Color.LIME,
// 获取或设置以弧度为单位的旋转角度 type: number default:0
rotation: 0,
// 获取或设置世界空间中的对齐轴 type:Cartesian3 default:Cartesian3.ZERO
alignedAxis: Cesium.Cartesian3.ZERO,
width: 50, // 用于指定广告牌的宽度(以像素为单位),并覆盖原始尺寸。
height: 50, // 用于指定广告牌的高度(以像素为单位),并覆盖原始尺寸。
// 根据广告牌与相机的距离获取或设置广告牌的近和远缩放属性 type:NearFarScalar
// new Cesium.NearFarScalar (
// near: 摄像机范围的下限 default=0,
// nearValue:摄像机范围下限的值 default=0,
// far 摄像机范围的上限 default=1,
// farValue 摄像机范围的上限的值 default=0)
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 2.0, 2.0e3, 1.0),
// 根据广告牌到相机的距离,获取或设置广告牌的近和远半透明属性 type:NearFarScalar
translucencyByDistance: new Cesium.NearFarScalar(
1.0e3,
1.0,
1.5e6,
0.5
),
// 根据广告牌与摄像头的距离,获取或设置广告牌的近像素偏移量和远像素偏移量缩放属性 type:NearFarScalar
pixelOffsetScaleByDistance: new Cesium.NearFarScalar(
1.0e3,
1.0,
1.5e6,
0.0
),
//定义了要用于广告牌的图像的子区域,而不是整个图像,而是从左下角开始以像素为单位。
//imageSubRegion: Cesium.BoundingRectangle ( x , y , width , height )
// 它指定将在距摄像机的距离上显示此广告牌
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 5000.0),
// 获取或设置与相机的距离,在深度处禁用深度测试,例如,以防止剪切地形。
// 设置为零时,将始终应用深度测试。设置为Number.POSITIVE_INFINITY时,永远不会应用深度测试。
disableDepthTestDistance: Number.POSITIVE_INFINITY,
},
});
// 异步设置摄像机以查看提供的一个或多个实体或数据源。如果数据源仍在加载过程中,或者可视化仍在加载中,此方法在执行缩放之前等待数据准备就绪。
viewer.zoomTo(entity);
// 更改广告牌的相关属性,首先实例化,然后类似于python字典的更改值
var billboard = entity.billboard;
billboard.scale = 1.0;
billboard.color = Cesium.Color.WHITE.withAlpha(1);
二、Box 盒子(长方体)
var entity = viewer.entities.add({
name: "box", // 设置新增的名称
position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 3000.0), // 设置盒子中心的位置
box: {
show: true, // 设置是否显示
dimensions: new Cesium.Cartesian3(4000.0, 3000.0, 1000.0), // Cartesian3类型,用于指定框的长度,宽度和高度
// 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
// NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
heightReference: Cesium.HeightReference.NONE,
fill: true, // 指定是否用提供的材料填充该框。
// MaterialProperty|Color default:Color.WHITE // 用于指定用于填充框的材料
material: Cesium.Color.RED.withAlpha(0.5),
outline: true, // 是否显示轮廓线
// type:Property|Color default:Color.BLACK 轮廓线颜色
outlineColor: Cesium.Color.YELLOW,
outlineWidth: 20, // 轮廓宽度
// type:ShadowMode default:ShadowMode.DISABLED
// DISABLED 对象不投射或接收阴影;ENABLED 对象投射并接收阴影;
// CAST_ONLY 对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
shadows: Cesium.ShadowMode.DISABLED,
// type:DistanceDisplayCondition 指定要在距摄像机的距离处显示此框。(a,b)表示在a和b之间才显示
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1.0e3,2.0e3 ),
},
});
viewer.zoomTo(entity);
三、Corridor 走廊
var entity = viewer.entities.add({
name: "corridor",
corridor: {
// show: true,
// 指定定义走廊中心线的 Cartesian3 位置的数组 type: Cartesian3
positions: Cesium.Cartesian3.fromDegreesArray([
-80.0,
40.0,
-85.0,
40.0,
-85.0,
35.0,
]),
width: 200000.0, // 指定道路边缘之间的距离。
height: 200000.0, // 指定走廊相对于椭球表面的高度。
// 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
// NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
heightReference: Cesium.HeightReference.NONE,
extrudedHeight: 100000.0, // 指定走廊的凸出面相对于椭球面的高度。
// 指定走廊凸出面的高度是相对于什么的高度。
extrudedHeightReference: Cesium.HeightReference.NONE,
// 拐角的样式 type:CornerType default:CornerType.ROUNDED
// ROUNDED 角有光滑的边缘;MITERED 拐角点是相邻边的交点;BEVELED 角被修剪
cornerType: Cesium.CornerType.MITERED,
granularity: Cesium.Math.RADIANS_PER_DEGREE, // 每个纬度和经度之间的距离
fill: true, // 指定是否提供填充材料
// 材质 type:MaterialProperty|Color default:Color.WHITE
material: Cesium.Color.RED.withAlpha(0.5),
outline: true, // height or extrudedHeight must be set for outlines to display
outlineColor: Cesium.Color.BLACK,
outlineWidth: 1.0,
// type:ShadowMode default:ShadowMode.DISABLED
// DISABLED 对象不投射或接收阴影;ENABLED 对象投射并接收阴影;CAST_ONLY 对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
shadows: Cesium.ShadowMode.CAST_ONLY,
// 在距地面多少高度之间显示
// distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
// 1.0e3,
// 2.0e3
// ),
// 走廊在地面上时将对地形,3D tiles还是对两者进行分类 type:ClassificationType default:ClassificationType.BOTH
// TERRAIN 将仅对地形进行分类;CESIUM_3D_TILE 将仅对3D Tiles进行分类;BOTH 将同时对Terrain和3D Tiles进行分类。
classificationType: Cesium.ClassificationType.BOTH,
},
// zindex:1,// 一个属性,指定道路的zIndex,仅当未定义height和extrudedHeight且道路为静态时才有效。
});
viewer.zoomTo(entity);
四、Cylinder 棱柱(锥)
为什么我要称之为棱柱,是因为
slices
属性小时其实就是棱柱,只有该值为无穷大时才是圆。
var entity = viewer.entities.add({
name: "cylinder", // 绘制圆柱
position: Cesium.Cartesian3.fromDegrees(-105.0, 40.0, 200000.0),
cylinder: {
// show: true,
length: 400000.0, // 圆柱体长度
topRadius: 200000.0, // 圆柱体顶部半径
bottomRadius: 200000.0, // 圆柱体底部半径
// 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
// NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
heightReference: Cesium.HeightReference.NONE, //
fill: true,
material: Cesium.Color.GREEN.withAlpha(0.5),
outline: true,
outlineColor: Cesium.Color.DARK_GREEN,
outlineWidth: 1.0,
numberOfVerticalLines: 6, // 用于指定沿轮廓的周长绘制的垂直线的数量。
// type:ShadowMode default:ShadowMode.DISABLED
// DISABLED 对象不投射或接收阴影;ENABLED 对象投射并接收阴影;CAST_ONLY 对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
shadows: Cesium.ShadowMode.DISABLED,
slices: 8, // 圆柱周围的边缘数量,数值大则圆
// 设置位于哪个高度之间能够显示
// distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
// 1.0e3,
// 2.0e3
// ),
},
});
viewer.zoomTo(entity);
- 当
slices
大于numberOfVerticalLines
时,numberOfVerticalLines
才会生效
- 通多调整 圆柱底部半径为
0
五、Ellipse 椭圆
Tip:
长短轴距离相等就是绘制圆了
var entity = viewer.entities.add({
name: "Circles and Ellipses",
// 指定椭圆的中心
position: Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 100000.0),
ellipse: {
show: true,
semiMajorAxis: 300000.0, // 长半轴距离
semiMinorAxis: 150000.0, // 短半轴距离
height: 0.0, // 指定椭圆相对于椭球表面的高度
// 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
// NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
heightReference: Cesium.HeightReference.NONE,
extrudedHeight: 0.0, // 用于指定椭圆的挤压面相对于椭球面的高度
extrudedHeightReference: Cesium.HeightReference.NONE, // 用于指定extrudedHeight相对于什么
// rotation: Cesium.Math.toRadians(45), // 指定椭圆从北方逆时针旋转
stRotation: 0.0, // 用于指定椭圆纹理从北方逆时针旋转
granularity: Cesium.Math.RADIANS_PER_DEGREE, // 椭圆上各点之间的角距离
fill: true, // 是否填充
material: Cesium.Color.BLUE.withAlpha(0.5),
outline: true, // 是否显示填充线
outlineColor: Cesium.Color.DARK_GREEN,
outlineWidth: 1.0,
numberOfVerticalLines: 16, // 沿轮廓的周长绘制的垂直线的数量
shadows: Cesium.ShadowMode.DISABLED,
// distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
// 1.0e3,
// 2.0e3
// ),
// 在地面上时将对地形,3D tiles还是对两者进行分类 type:ClassificationType default:ClassificationType.BOTH
// TERRAIN 将仅对地形进行分类;CESIUM_3D_TILE 将仅对3D瓷砖进行分类;BOTH 将同时对Terrain和3D Tile进行分类。
classificationType: Cesium.ClassificationType.BOTH,
},
});
viewer.zoomTo(viewer.entities);
六、Ellipsoid 椭球体
var entity = viewer.entities.add({
name: "Spheres and Ellipsoids",
position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 300000.0), // 从以度为单位的经度和纬度值返回Cartesian3位置。
ellipsoid: {
show: true,
radii: new Cesium.Cartesian3(200000.0, 200000.0, 200000.0), // 椭球外半径
// innerRadii: new Cesium.Cartesian3(1000.0, 1000.0, 1000.0), // 椭球内半径
minimumClock: 0.0, // 最小时钟角度
maximumClock: 2 * Math.PI, // 最大时钟角度
minimumCone: 0.0, // 最小圆锥角
maximumCone: Math.PI, // 最大圆锥角
heightReference: Cesium.HeightReference.NONE,
fill: true,
material: Cesium.Color.BLUE.withAlpha(0.5),
outline: true,
outlineColor: Cesium.Color.YELLOW,
outlineWidth: 1.0,
stackPartitions: 12, // 延纬度线切割的次数 格网
slicePartitions: 12, // 延经度线切割的次数 格网
subdivisions: 120, // 每个轮廓环的样本数,确定曲率的粒度,越大越光滑
shadows: Cesium.ShadowMode.DISABLED,
// distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
// 1.0e3,
// 2.0e3
// ),
},
});
viewer.zoomTo(viewer.entities);
七、Label 标签
主要用于地图位置的标注,可以与图片合用(
billboard
广告牌 ),这时为了防止遮挡,可以设置偏移来避免。
var entity = viewer.entities.add({
name: "label",
position: Cesium.Cartesian3.fromDegrees(
-75.1641667,
39.9522222,
300000.0
),
label: {
show: true, // 是否显示文字标注
text: "label标签", // 显示的标注是什么
font: "normal 30px Sans-serif", // 设置标注字体的大小和类型
fillColor: Cesium.Color.RED, // 字体颜色
// FILL 填充;OUTLINE 只显示边框;FILL_AND_OUTLINE 既有填充又有边框
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
scale: 0.7, // 整体缩放,若字体出现模糊可以先设置两倍大字体,然后进行缩放
showBackground: false,// 是否显示标注的背景颜色
backgroundColor: Cesium.Color.BLUE, // 设置背景颜色
backgroundPadding: new Cesium.Cartesian2(7, 5), // 以像素为单位指定水平和垂直背景填充的属性
pixelOffset: Cesium.Cartesian2.ZERO, // 指定像素偏移的属性
eyeOffset: Cesium.Cartesian3.ZERO, // 指定眼偏移
horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // 水平对齐
verticalOrigin: Cesium.VerticalOrigin.CENTER, // 垂直对齐
heightReference: Cesium.HeightReference.NONE,
outlineColor: Cesium.Color.BLACK, // 字体外围颜色
outlineWidth: 1,
// 用于根据与相机的距离设置半透明度的属性
translucencyByDistance: new Cesium.NearFarScalar(
1.0e3,
1.0,
1.5e6,
1
),
// 用于根据与相机的距离设置 pixelOffset 的属性
pixelOffsetScaleByDistance: new Cesium.NearFarScalar(
1.0e3,
1.0,
1.5e6,
0.0
),
// 用于根据与相机的距离设置比例的属性
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 2.0, 2.0e3, 1.0),
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
0,
2.0e4),
// 一个属性,指定要禁用深度测试的距离相机的距离
disableDepthTestDistance: Number.POSITIVE_INFINITY,
},
});
viewer.zoomTo(viewer.entities);