2025-07-03 13:54:01 +08:00
|
|
|
|
/**
|
|
|
|
|
* 道路
|
|
|
|
|
*/
|
|
|
|
|
import Base from "../index";
|
|
|
|
|
import PolylineImageTrailMaterialProperty from "../../Materail/PolylineImageTrailMaterialProperty";
|
|
|
|
|
import { init_material } from "./RoadMaterialProperty";
|
|
|
|
|
|
|
|
|
|
class Corridor extends Base {
|
|
|
|
|
/**
|
|
|
|
|
* @constructor
|
|
|
|
|
* @param sdk
|
|
|
|
|
* @param options {object} 属性
|
|
|
|
|
* @param options.name{string} 名称
|
|
|
|
|
* @param options.image{string | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement} 指定 Image、URL、Canvas 或 Video 的属性
|
|
|
|
|
* @param options.width=10{number} 宽度
|
|
|
|
|
* @param options.height=0{number} 高度
|
|
|
|
|
* */
|
|
|
|
|
constructor(sdk, options = {}) {
|
|
|
|
|
super(sdk, options);
|
|
|
|
|
this.options.name = options.name || ''
|
|
|
|
|
this.options.image = options.image
|
|
|
|
|
this.options.width = options.width || 10
|
|
|
|
|
this.options.height = options.height || 0
|
|
|
|
|
init_material()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
create(positions) {
|
|
|
|
|
this.computeRoad(positions)
|
|
|
|
|
let fromDegreesArray = []
|
|
|
|
|
for (let i = 0; i < positions.length; i++) {
|
|
|
|
|
fromDegreesArray.push(positions[i].lng, positions[i].lat)
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-15 10:37:23 +08:00
|
|
|
|
let length = this.computeDistance2(positions)
|
2025-07-03 13:54:01 +08:00
|
|
|
|
|
|
|
|
|
let geometry = new Cesium.CorridorGeometry({
|
|
|
|
|
positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),
|
|
|
|
|
width: this.options.width,
|
|
|
|
|
height: this.options.height,
|
|
|
|
|
cornerType: Cesium.CornerType.MITERED,
|
|
|
|
|
vertexFormat: Cesium.MaterialAppearance.MaterialSupport.ALL.vertexFormat
|
|
|
|
|
})
|
|
|
|
|
// console.log(Cesium.CorridorGeometry.createGeometry(geometry))
|
|
|
|
|
// this.entity = this.sdk.viewer.scene.primitives.add(new Cesium.Primitive({//GroundPrimitive贴地
|
|
|
|
|
// geometryInstances: new Cesium.GeometryInstance({
|
|
|
|
|
// geometry: geometry,
|
|
|
|
|
// attributes: {
|
|
|
|
|
// color: Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 0.5))
|
|
|
|
|
// }
|
|
|
|
|
// }),
|
|
|
|
|
// appearance: new Cesium.MaterialAppearance({
|
|
|
|
|
// material: Cesium.Material.fromType('Image', {
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(length / this.options.width * 2, 1.0)
|
|
|
|
|
// }),
|
|
|
|
|
// faceForward: true,
|
|
|
|
|
// renderState: {
|
|
|
|
|
// blending: Cesium.BlendingState.ALPHA_BLEND
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
// }));
|
|
|
|
|
// console.log(this.entity, Outlinegeometry)
|
|
|
|
|
|
|
|
|
|
// this.entity = this.sdk.viewer.entities.add({
|
|
|
|
|
// name: "Red corridor on surface with rounded corners",
|
|
|
|
|
// corridor: {
|
|
|
|
|
// positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),
|
|
|
|
|
// width: this.options.width,
|
|
|
|
|
// height: 10,
|
|
|
|
|
// cornerType: Cesium.CornerType.MITERED,
|
|
|
|
|
// material: new Cesium.ImageMaterialProperty({
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(100, 1.0),
|
|
|
|
|
// color: Cesium.Color.TOMATO
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
// });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 编辑框
|
|
|
|
|
async edit(state) { }
|
|
|
|
|
|
|
|
|
|
remove() {
|
|
|
|
|
this.sdk.viewer.scene.primitives.remove(this.entity)
|
|
|
|
|
this.entity = null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
computeRoad(positions) {
|
|
|
|
|
let fromDegreesArray = []
|
|
|
|
|
for (let i = 0; i < positions.length; i++) {
|
|
|
|
|
fromDegreesArray.push(positions[i].lng, positions[i].lat)
|
|
|
|
|
}
|
|
|
|
|
let Outlinegeometry = new Cesium.CorridorGeometry({
|
|
|
|
|
positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),
|
|
|
|
|
width: this.options.width,
|
|
|
|
|
cornerType: Cesium.CornerType.MITERED,
|
|
|
|
|
vertexFormat: Cesium.MaterialAppearance.MaterialSupport.ALL.vertexFormat
|
|
|
|
|
})
|
|
|
|
|
let geometry = Cesium.CorridorGeometry.createGeometry(Outlinegeometry)
|
|
|
|
|
console.log(geometry)
|
|
|
|
|
let t = 0
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
t++
|
|
|
|
|
}, 100);
|
|
|
|
|
// let entity = this.sdk.viewer.scene.primitives.add(new Cesium.GroundPolylinePrimitive({
|
|
|
|
|
// geometryInstances : new Cesium.GeometryInstance({
|
|
|
|
|
// geometry : new Cesium.GroundPolylineGeometry({
|
|
|
|
|
// positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),
|
|
|
|
|
// width: this.options.width,
|
|
|
|
|
// cornerType: Cesium.CornerType.MITERED,
|
|
|
|
|
// vertexFormat: Cesium.MaterialAppearance.MaterialSupport.ALL.vertexFormat
|
|
|
|
|
// })
|
|
|
|
|
// }),
|
|
|
|
|
// appearance: new Cesium.PolylineMaterialAppearance({
|
|
|
|
|
// aboveGroud: true,
|
|
|
|
|
// material: new Cesium.Material({
|
|
|
|
|
// fabric: {
|
|
|
|
|
// uniforms: {
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(1000, 1.0),
|
|
|
|
|
// color: new Cesium.Color(1.0, 0.0, 0.0, 0.1)
|
|
|
|
|
// },
|
|
|
|
|
// source: `
|
|
|
|
|
// uniform sampler2D image;
|
|
|
|
|
// uniform vec4 color;
|
|
|
|
|
// uniform vec2 repeat;
|
|
|
|
|
|
|
|
|
|
// czm_material czm_getMaterial(czm_materialInput materialInput){
|
|
|
|
|
// czm_material material=czm_getDefaultMaterial(materialInput);
|
|
|
|
|
// vec2 st=repeat*materialInput.st;
|
|
|
|
|
// float time=fract(czm_frameNumber);
|
|
|
|
|
// vec4 colorImage=texture2D(image,vec2(fract(st.s-time),st.t));
|
|
|
|
|
// material.alpha=colorImage.a;
|
|
|
|
|
// material.diffuse=colorImage.rgb;
|
|
|
|
|
// return material;
|
|
|
|
|
// }`,
|
|
|
|
|
// },
|
|
|
|
|
// }),
|
|
|
|
|
// vertexShaderSource: `#define CLIP_POLYLINE
|
|
|
|
|
// void clipLineSegmentToNearPlane(
|
|
|
|
|
// vec3 p0,
|
|
|
|
|
// vec3 p1,
|
|
|
|
|
// out vec4 positionWC,
|
|
|
|
|
// out bool clipped,
|
|
|
|
|
// out bool culledByNearPlane,
|
|
|
|
|
// out vec4 clippedPositionEC)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = false;
|
|
|
|
|
// clipped = false;
|
|
|
|
|
// vec3 p0ToP1 = p1 - p0;
|
|
|
|
|
// float magnitude = length(p0ToP1);
|
|
|
|
|
// vec3 direction = normalize(p0ToP1);
|
|
|
|
|
// float endPoint0Distance = czm_currentFrustum.x + p0.z;
|
|
|
|
|
// float denominator = -direction.z;
|
|
|
|
|
// if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = true;
|
|
|
|
|
// }
|
|
|
|
|
// else if (endPoint0Distance > 0.0)
|
|
|
|
|
// {
|
|
|
|
|
// float t = endPoint0Distance / denominator;
|
|
|
|
|
// if (t < 0.0 || t > magnitude)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = true;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// p0 = p0 + t * direction;
|
|
|
|
|
// p0.z = min(p0.z, -czm_currentFrustum.x);
|
|
|
|
|
// clipped = true;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// clippedPositionEC = vec4(p0, 1.0);
|
|
|
|
|
// positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);
|
|
|
|
|
// }
|
|
|
|
|
// vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)
|
|
|
|
|
// {
|
|
|
|
|
// #ifdef POLYLINE_DASH
|
|
|
|
|
// vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);
|
|
|
|
|
// vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);
|
|
|
|
|
// vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);
|
|
|
|
|
// vec2 lineDir;
|
|
|
|
|
// if (usePrevious) {
|
|
|
|
|
// lineDir = normalize(positionWindow.xy - previousWindow.xy);
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// lineDir = normalize(nextWindow.xy - positionWindow.xy);
|
|
|
|
|
// }
|
|
|
|
|
// angle = atan(lineDir.x, lineDir.y) - 1.570796327;
|
|
|
|
|
// angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;
|
|
|
|
|
// #endif
|
|
|
|
|
// vec4 clippedPrevWC, clippedPrevEC;
|
|
|
|
|
// bool prevSegmentClipped, prevSegmentCulled;
|
|
|
|
|
// clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);
|
|
|
|
|
// vec4 clippedNextWC, clippedNextEC;
|
|
|
|
|
// bool nextSegmentClipped, nextSegmentCulled;
|
|
|
|
|
// clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);
|
|
|
|
|
// bool segmentClipped, segmentCulled;
|
|
|
|
|
// vec4 clippedPositionWC, clippedPositionEC;
|
|
|
|
|
// clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);
|
|
|
|
|
// if (segmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// return vec4(0.0, 0.0, 0.0, 1.0);
|
|
|
|
|
// }
|
|
|
|
|
// vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);
|
|
|
|
|
// vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);
|
|
|
|
|
// if (prevSegmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// directionToPrevWC = -directionToNextWC;
|
|
|
|
|
// }
|
|
|
|
|
// else if (nextSegmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// directionToNextWC = -directionToPrevWC;
|
|
|
|
|
// }
|
|
|
|
|
// vec2 thisSegmentForwardWC, otherSegmentForwardWC;
|
|
|
|
|
// if (usePrevious)
|
|
|
|
|
// {
|
|
|
|
|
// thisSegmentForwardWC = -directionToPrevWC;
|
|
|
|
|
// otherSegmentForwardWC = directionToNextWC;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// thisSegmentForwardWC = directionToNextWC;
|
|
|
|
|
// otherSegmentForwardWC = -directionToPrevWC;
|
|
|
|
|
// }
|
|
|
|
|
// vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);
|
|
|
|
|
// vec2 leftWC = thisSegmentLeftWC;
|
|
|
|
|
// float expandWidth = width * 0.5;
|
|
|
|
|
// if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))
|
|
|
|
|
// {
|
|
|
|
|
// vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);
|
|
|
|
|
// vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;
|
|
|
|
|
// float leftSumLength = length(leftSumWC);
|
|
|
|
|
// leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);
|
|
|
|
|
// vec2 u = -thisSegmentForwardWC;
|
|
|
|
|
// vec2 v = leftWC;
|
|
|
|
|
// float sinAngle = abs(u.x * v.y - u.y * v.x);
|
|
|
|
|
// expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);
|
|
|
|
|
// }
|
|
|
|
|
// vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;
|
|
|
|
|
// return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;
|
|
|
|
|
// }
|
|
|
|
|
// vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)
|
|
|
|
|
// {
|
|
|
|
|
// vec4 positionEC = czm_modelViewRelativeToEye * position;
|
|
|
|
|
// vec4 prevEC = czm_modelViewRelativeToEye * previous;
|
|
|
|
|
// vec4 nextEC = czm_modelViewRelativeToEye * next;
|
|
|
|
|
// return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// attribute vec3 position3DHigh;
|
|
|
|
|
// attribute vec3 position3DLow;
|
|
|
|
|
// attribute vec3 prevPosition3DHigh;
|
|
|
|
|
// attribute vec3 prevPosition3DLow;
|
|
|
|
|
// attribute vec3 nextPosition3DHigh;
|
|
|
|
|
// attribute vec3 nextPosition3DLow;
|
|
|
|
|
// attribute vec2 expandAndWidth;
|
|
|
|
|
// attribute vec2 st;
|
|
|
|
|
// attribute float batchId;
|
|
|
|
|
// varying float v_width;
|
|
|
|
|
// varying vec2 v_st;
|
|
|
|
|
// varying float v_polylineAngle;
|
|
|
|
|
// void main()
|
|
|
|
|
// {
|
|
|
|
|
// float expandDir = expandAndWidth.x;
|
|
|
|
|
// float width = abs(expandAndWidth.y) + 0.5;
|
|
|
|
|
// bool usePrev = expandAndWidth.y < 0.0;
|
|
|
|
|
// vec4 p = czm_computePosition();
|
|
|
|
|
// vec4 prev = czm_computePrevPosition();
|
|
|
|
|
// vec4 next = czm_computeNextPosition();
|
|
|
|
|
// float angle;
|
|
|
|
|
// vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
|
|
|
|
|
// gl_Position = czm_viewportOrthographic * positionWC;
|
|
|
|
|
// v_width = width;
|
|
|
|
|
// v_st.s = st.s;
|
|
|
|
|
// v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);
|
|
|
|
|
// v_polylineAngle = angle;
|
|
|
|
|
// }`,
|
|
|
|
|
// fragmentShaderSource: `#ifdef VECTOR_TILE
|
|
|
|
|
// uniform vec4 u_highlightColor;
|
|
|
|
|
// #endif
|
|
|
|
|
// varying vec2 v_st;
|
|
|
|
|
// void main()
|
|
|
|
|
// {
|
|
|
|
|
// czm_materialInput materialInput;
|
|
|
|
|
// vec2 st = v_st;
|
|
|
|
|
// st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);
|
|
|
|
|
// materialInput.s = st.s;
|
|
|
|
|
// materialInput.st = st;
|
|
|
|
|
// materialInput.str = vec3(st, 0.0);
|
|
|
|
|
// czm_material material = czm_getMaterial(materialInput);
|
|
|
|
|
// gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);
|
|
|
|
|
// #ifdef VECTOR_TILE
|
|
|
|
|
// gl_FragColor *= u_highlightColor;
|
|
|
|
|
// #endif
|
|
|
|
|
// czm_writeLogDepth();
|
|
|
|
|
// }`
|
|
|
|
|
// }),
|
|
|
|
|
// }));
|
|
|
|
|
console.log(entity)
|
|
|
|
|
// let entity = this.sdk.viewer.entities.add({
|
|
|
|
|
// corridor: {
|
|
|
|
|
// positions: Cesium.Cartesian3.fromDegreesArray(fromDegreesArray),
|
|
|
|
|
// width: 20000.0,
|
|
|
|
|
// cornerType: Cesium.CornerType.MITERED,
|
|
|
|
|
// material: new Cesium.RoadMaterialProperty({
|
|
|
|
|
// image: this.getSourceRootPath() + '/img/asphaltRoad.jpg',
|
|
|
|
|
// color: this.options.color,
|
|
|
|
|
// repeat: new Cesium.CallbackProperty(() => {
|
|
|
|
|
// let positionProperty = entity.corridor.positions;
|
|
|
|
|
// let positions = positionProperty.getValue(this.sdk.viewer.clock.currentTime);
|
|
|
|
|
|
|
|
|
|
// if (!Cesium.defined(positions)) {
|
|
|
|
|
// return new Cesium.Cartesian2(1.0, 1.0);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// let distance = 0;
|
|
|
|
|
// for (let i = 0; i < positions.length - 1; ++i) {
|
|
|
|
|
// distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// let imgProportion = 945 / 411 // 图片长宽比例
|
|
|
|
|
// let repeatX = distance / 20000;
|
|
|
|
|
// repeatX = repeatX / imgProportion
|
|
|
|
|
|
|
|
|
|
// return new Cesium.Cartesian2(repeatX, 1.0);
|
|
|
|
|
// }, false),
|
|
|
|
|
// duration: 0,
|
|
|
|
|
// rotate: new Cesium.CallbackProperty(() => {
|
|
|
|
|
// return t
|
|
|
|
|
// }),
|
|
|
|
|
// })
|
|
|
|
|
// },
|
|
|
|
|
// });
|
|
|
|
|
// console.log(entity)
|
|
|
|
|
let initposition = []
|
|
|
|
|
for (let i = 0; i < geometry.attributes.position.values.length; i += 3) {
|
|
|
|
|
console.log(geometry.attributes.position.values[i], geometry.attributes.position.values[i + 1], geometry.attributes.position.values[i + 2])
|
|
|
|
|
initposition.push(new Cesium.Cartesian3(geometry.attributes.position.values[i], geometry.attributes.position.values[i + 1], geometry.attributes.position.values[i + 2]))
|
|
|
|
|
}
|
|
|
|
|
console.log(initposition, Cesium.Cartesian3.fromDegrees(91.08567036051947, 24.990201656481236))
|
|
|
|
|
let flag = true
|
|
|
|
|
let bearing
|
|
|
|
|
this.entityArray = []
|
|
|
|
|
// 创建一个矩形实体,顶点坐标为世界坐标
|
|
|
|
|
const rectangle = this.sdk.viewer.entities.add({
|
|
|
|
|
rectangle: {
|
|
|
|
|
coordinates: Cesium.Rectangle.fromDegrees(-100.0, 20.0, -90.0, 30.0),
|
|
|
|
|
material: new Cesium.ImageMaterialProperty({
|
|
|
|
|
image: this.options.image,
|
|
|
|
|
repeat: new Cesium.Cartesian2(10, 1.0),
|
|
|
|
|
}),
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
for (let i = 0; i < geometry.indices.length; i += 3) {
|
|
|
|
|
// console.log(bearing)
|
|
|
|
|
|
|
|
|
|
let angleInDegrees
|
|
|
|
|
let theta
|
|
|
|
|
if (flag) {
|
|
|
|
|
let a = this.cartesian3Towgs84(initposition[geometry.indices[i]], this.sdk.viewer)
|
|
|
|
|
let b = this.cartesian3Towgs84(initposition[geometry.indices[i + 2]], this.sdk.viewer)
|
|
|
|
|
let point1 = turf.point([a.lng, a.lat]);
|
|
|
|
|
let point2 = turf.point([b.lng, b.lat]);
|
|
|
|
|
bearing = turf.bearing(point1, point2);
|
|
|
|
|
// 计算两点之间的角度
|
|
|
|
|
let angle = Cesium.Cartesian3.angleBetween(initposition[geometry.indices[i]], initposition[geometry.indices[i + 2]]);
|
|
|
|
|
// 转换角度为角度而不是弧度
|
|
|
|
|
angleInDegrees = Cesium.Math.toDegrees(angle)
|
|
|
|
|
|
|
|
|
|
//以a点为原点建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴),得到一个局部坐标到世界坐标转换的变换矩阵
|
|
|
|
|
let localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(initposition[geometry.indices[i]]);
|
|
|
|
|
//求世界坐标到局部坐标的变换矩阵
|
|
|
|
|
let worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());
|
|
|
|
|
//a点在局部坐标的位置,其实就是局部坐标原点
|
|
|
|
|
let localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, initposition[geometry.indices[i]], new Cesium.Cartesian3());
|
|
|
|
|
//B点在以A点为原点的局部的坐标位置
|
|
|
|
|
let localPosition_B = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, initposition[geometry.indices[i + 2]], new Cesium.Cartesian3());
|
|
|
|
|
//弧度
|
|
|
|
|
let angle2 = Cesium.Math.fastApproximateAtan2((localPosition_B.y - localPosition_A.y), (localPosition_B.x - localPosition_A.x))
|
|
|
|
|
//角度
|
|
|
|
|
theta = angle2 * (180 / Cesium.Math.PI);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
let a = this.cartesian3Towgs84(initposition[geometry.indices[i + 1]], this.sdk.viewer)
|
|
|
|
|
let b = this.cartesian3Towgs84(initposition[geometry.indices[i + 2]], this.sdk.viewer)
|
|
|
|
|
let point1 = turf.point([a.lng, a.lat]);
|
|
|
|
|
let point2 = turf.point([b.lng, b.lat]);
|
|
|
|
|
bearing = turf.bearing(point1, point2);
|
|
|
|
|
// 计算两点之间的角度
|
|
|
|
|
let angle = Cesium.Cartesian3.angleBetween(initposition[geometry.indices[i + 1]], initposition[geometry.indices[i + 2]]);
|
|
|
|
|
// 转换角度为角度而不是弧度
|
|
|
|
|
angleInDegrees = Cesium.Math.toDegrees(angle)
|
|
|
|
|
|
|
|
|
|
//以a点为原点建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴),得到一个局部坐标到世界坐标转换的变换矩阵
|
|
|
|
|
let localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(initposition[geometry.indices[i + 1]]);
|
|
|
|
|
//求世界坐标到局部坐标的变换矩阵
|
|
|
|
|
let worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());
|
|
|
|
|
//a点在局部坐标的位置,其实就是局部坐标原点
|
|
|
|
|
let localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, initposition[geometry.indices[i + 1]], new Cesium.Cartesian3());
|
|
|
|
|
//B点在以A点为原点的局部的坐标位置
|
|
|
|
|
let localPosition_B = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, initposition[geometry.indices[i + 2]], new Cesium.Cartesian3());
|
|
|
|
|
//弧度
|
|
|
|
|
let angle2 = Cesium.Math.fastApproximateAtan2((localPosition_B.y - localPosition_A.y), (localPosition_B.x - localPosition_A.x))
|
|
|
|
|
//角度
|
|
|
|
|
theta = angle2 * (180 / Cesium.Math.PI);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let point1 = Cesium.Cartesian3.fromDegrees(91, 24.990201656481236);
|
|
|
|
|
let point2 = Cesium.Cartesian3.fromDegrees(91, 24.626517401118033);
|
|
|
|
|
// 计算两点之间的角度
|
|
|
|
|
let angle = Cesium.Cartesian3.angleBetween(point1, point2);
|
|
|
|
|
// 转换角度为角度而不是弧度
|
|
|
|
|
let xx = Cesium.Math.toDegrees(angle)
|
|
|
|
|
|
|
|
|
|
flag = !flag
|
|
|
|
|
bearing = bearing - 90 + 0.145
|
|
|
|
|
console.log(bearing, angleInDegrees, angle, xx, theta)
|
|
|
|
|
|
|
|
|
|
//以a点为原点建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴),得到一个局部坐标到世界坐标转换的变换矩阵
|
|
|
|
|
let localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(point1);
|
|
|
|
|
//求世界坐标到局部坐标的变换矩阵
|
|
|
|
|
let worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());
|
|
|
|
|
//a点在局部坐标的位置,其实就是局部坐标原点
|
|
|
|
|
let localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, point1, new Cesium.Cartesian3());
|
|
|
|
|
//B点在以A点为原点的局部的坐标位置
|
|
|
|
|
let localPosition_B = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, point2, new Cesium.Cartesian3());
|
|
|
|
|
//弧度
|
|
|
|
|
let angle2 = Cesium.Math.fastApproximateAtan2((localPosition_B.z - localPosition_A.z), (localPosition_B.x - localPosition_A.x))
|
|
|
|
|
//角度
|
|
|
|
|
let theta2 = angle2 * (180 / Cesium.Math.PI);
|
|
|
|
|
// alert(theta2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let entity = this.sdk.viewer.entities.add({
|
|
|
|
|
// show: this.options.show,
|
|
|
|
|
// polygon: {
|
|
|
|
|
// hierarchy: new Cesium.PolygonHierarchy([initposition[geometry.indices[i]], initposition[geometry.indices[i + 1]], initposition[geometry.indices[i + 2]]]),
|
|
|
|
|
// perPositionHeight: false,
|
|
|
|
|
// // material: new PolylineImageTrailMaterialProperty({
|
|
|
|
|
// // image: this.options.image,
|
|
|
|
|
// // repeat: new Cesium.Cartesian2(10, 1.0),
|
|
|
|
|
// // color: Cesium.Color.TOMATO,
|
|
|
|
|
// // rotate: 0
|
|
|
|
|
// // }),
|
|
|
|
|
// material: new Cesium.ImageMaterialProperty({
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(1000, 1.0),
|
|
|
|
|
// }),
|
|
|
|
|
// stRotation: Cesium.Math.toRadians(theta - 90 - 0.0128),
|
|
|
|
|
// outline: true,
|
|
|
|
|
// outlineColor: Cesium.Color.BLACK,
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
let aa = 0
|
|
|
|
|
|
|
|
|
|
const shader = `
|
|
|
|
|
uniform sampler2D image;
|
|
|
|
|
uniform vec4 color;
|
|
|
|
|
uniform vec2 repeat;
|
|
|
|
|
|
|
|
|
|
czm_material czm_getMaterial(czm_materialInput materialInput){
|
|
|
|
|
czm_material material=czm_getDefaultMaterial(materialInput);
|
|
|
|
|
vec2 st=repeat*materialInput.st;
|
|
|
|
|
float time=fract(czm_frameNumber);
|
|
|
|
|
vec4 colorImage=texture2D(image,vec2(fract(st.s-time),st.t));
|
|
|
|
|
material.alpha=colorImage.a;
|
|
|
|
|
material.diffuse=colorImage.rgb;
|
|
|
|
|
return material;
|
|
|
|
|
}`
|
|
|
|
|
console.log(Cesium.Math.toRadians(theta - 90))
|
|
|
|
|
// let entity = this.sdk.viewer.scene.primitives.add(new Cesium.Primitive({
|
|
|
|
|
// geometryInstances : new Cesium.GeometryInstance({
|
|
|
|
|
// geometry : new Cesium.PolylineGeometry({
|
|
|
|
|
// positions : Cesium.Cartesian3.fromDegreesArray([
|
|
|
|
|
// 0.0, 0.0,
|
|
|
|
|
// 5.0, 0.0
|
|
|
|
|
// ]),
|
|
|
|
|
// width : 10.0,
|
|
|
|
|
// vertexFormat : Cesium.PolylineMaterialAppearance.VERTEX_FORMAT
|
|
|
|
|
// })
|
|
|
|
|
// }),
|
|
|
|
|
// appearance: new Cesium.PolylineMaterialAppearance({
|
|
|
|
|
// aboveGroud: true,
|
|
|
|
|
// material: new Cesium.Material({
|
|
|
|
|
// fabric: {
|
|
|
|
|
// uniforms: {
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(1000, 1.0),
|
|
|
|
|
// color: new Cesium.Color(1.0, 0.0, 0.0, 0.1)
|
|
|
|
|
// },
|
|
|
|
|
// source: shader,
|
|
|
|
|
// },
|
|
|
|
|
// }),
|
|
|
|
|
// vertexShaderSource: `#define CLIP_POLYLINE
|
|
|
|
|
// void clipLineSegmentToNearPlane(
|
|
|
|
|
// vec3 p0,
|
|
|
|
|
// vec3 p1,
|
|
|
|
|
// out vec4 positionWC,
|
|
|
|
|
// out bool clipped,
|
|
|
|
|
// out bool culledByNearPlane,
|
|
|
|
|
// out vec4 clippedPositionEC)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = false;
|
|
|
|
|
// clipped = false;
|
|
|
|
|
// vec3 p0ToP1 = p1 - p0;
|
|
|
|
|
// float magnitude = length(p0ToP1);
|
|
|
|
|
// vec3 direction = normalize(p0ToP1);
|
|
|
|
|
// float endPoint0Distance = czm_currentFrustum.x + p0.z;
|
|
|
|
|
// float denominator = -direction.z;
|
|
|
|
|
// if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = true;
|
|
|
|
|
// }
|
|
|
|
|
// else if (endPoint0Distance > 0.0)
|
|
|
|
|
// {
|
|
|
|
|
// float t = endPoint0Distance / denominator;
|
|
|
|
|
// if (t < 0.0 || t > magnitude)
|
|
|
|
|
// {
|
|
|
|
|
// culledByNearPlane = true;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// p0 = p0 + t * direction;
|
|
|
|
|
// p0.z = min(p0.z, -czm_currentFrustum.x);
|
|
|
|
|
// clipped = true;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// clippedPositionEC = vec4(p0, 1.0);
|
|
|
|
|
// positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);
|
|
|
|
|
// }
|
|
|
|
|
// vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)
|
|
|
|
|
// {
|
|
|
|
|
// #ifdef POLYLINE_DASH
|
|
|
|
|
// vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);
|
|
|
|
|
// vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);
|
|
|
|
|
// vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);
|
|
|
|
|
// vec2 lineDir;
|
|
|
|
|
// if (usePrevious) {
|
|
|
|
|
// lineDir = normalize(positionWindow.xy - previousWindow.xy);
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// lineDir = normalize(nextWindow.xy - positionWindow.xy);
|
|
|
|
|
// }
|
|
|
|
|
// angle = atan(lineDir.x, lineDir.y) - 1.570796327;
|
|
|
|
|
// angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;
|
|
|
|
|
// #endif
|
|
|
|
|
// vec4 clippedPrevWC, clippedPrevEC;
|
|
|
|
|
// bool prevSegmentClipped, prevSegmentCulled;
|
|
|
|
|
// clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);
|
|
|
|
|
// vec4 clippedNextWC, clippedNextEC;
|
|
|
|
|
// bool nextSegmentClipped, nextSegmentCulled;
|
|
|
|
|
// clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);
|
|
|
|
|
// bool segmentClipped, segmentCulled;
|
|
|
|
|
// vec4 clippedPositionWC, clippedPositionEC;
|
|
|
|
|
// clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);
|
|
|
|
|
// if (segmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// return vec4(0.0, 0.0, 0.0, 1.0);
|
|
|
|
|
// }
|
|
|
|
|
// vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);
|
|
|
|
|
// vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);
|
|
|
|
|
// if (prevSegmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// directionToPrevWC = -directionToNextWC;
|
|
|
|
|
// }
|
|
|
|
|
// else if (nextSegmentCulled)
|
|
|
|
|
// {
|
|
|
|
|
// directionToNextWC = -directionToPrevWC;
|
|
|
|
|
// }
|
|
|
|
|
// vec2 thisSegmentForwardWC, otherSegmentForwardWC;
|
|
|
|
|
// if (usePrevious)
|
|
|
|
|
// {
|
|
|
|
|
// thisSegmentForwardWC = -directionToPrevWC;
|
|
|
|
|
// otherSegmentForwardWC = directionToNextWC;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// thisSegmentForwardWC = directionToNextWC;
|
|
|
|
|
// otherSegmentForwardWC = -directionToPrevWC;
|
|
|
|
|
// }
|
|
|
|
|
// vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);
|
|
|
|
|
// vec2 leftWC = thisSegmentLeftWC;
|
|
|
|
|
// float expandWidth = width * 0.5;
|
|
|
|
|
// if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))
|
|
|
|
|
// {
|
|
|
|
|
// vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);
|
|
|
|
|
// vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;
|
|
|
|
|
// float leftSumLength = length(leftSumWC);
|
|
|
|
|
// leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);
|
|
|
|
|
// vec2 u = -thisSegmentForwardWC;
|
|
|
|
|
// vec2 v = leftWC;
|
|
|
|
|
// float sinAngle = abs(u.x * v.y - u.y * v.x);
|
|
|
|
|
// expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);
|
|
|
|
|
// }
|
|
|
|
|
// vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;
|
|
|
|
|
// return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;
|
|
|
|
|
// }
|
|
|
|
|
// vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)
|
|
|
|
|
// {
|
|
|
|
|
// vec4 positionEC = czm_modelViewRelativeToEye * position;
|
|
|
|
|
// vec4 prevEC = czm_modelViewRelativeToEye * previous;
|
|
|
|
|
// vec4 nextEC = czm_modelViewRelativeToEye * next;
|
|
|
|
|
// return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// attribute vec3 position3DHigh;
|
|
|
|
|
// attribute vec3 position3DLow;
|
|
|
|
|
// attribute vec3 prevPosition3DHigh;
|
|
|
|
|
// attribute vec3 prevPosition3DLow;
|
|
|
|
|
// attribute vec3 nextPosition3DHigh;
|
|
|
|
|
// attribute vec3 nextPosition3DLow;
|
|
|
|
|
// attribute vec2 expandAndWidth;
|
|
|
|
|
// attribute vec2 st;
|
|
|
|
|
// attribute float batchId;
|
|
|
|
|
// varying float v_width;
|
|
|
|
|
// varying vec2 v_st;
|
|
|
|
|
// varying float v_polylineAngle;
|
|
|
|
|
// void main()
|
|
|
|
|
// {
|
|
|
|
|
// float expandDir = expandAndWidth.x;
|
|
|
|
|
// float width = abs(expandAndWidth.y) + 0.5;
|
|
|
|
|
// bool usePrev = expandAndWidth.y < 0.0;
|
|
|
|
|
// vec4 p = czm_computePosition();
|
|
|
|
|
// vec4 prev = czm_computePrevPosition();
|
|
|
|
|
// vec4 next = czm_computeNextPosition();
|
|
|
|
|
// float angle;
|
|
|
|
|
// vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
|
|
|
|
|
// gl_Position = czm_viewportOrthographic * positionWC;
|
|
|
|
|
// v_width = width;
|
|
|
|
|
// v_st.s = st.s;
|
|
|
|
|
// v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);
|
|
|
|
|
// v_polylineAngle = angle;
|
|
|
|
|
// }`,
|
|
|
|
|
// fragmentShaderSource: `#ifdef VECTOR_TILE
|
|
|
|
|
// uniform vec4 u_highlightColor;
|
|
|
|
|
// #endif
|
|
|
|
|
// varying vec2 v_st;
|
|
|
|
|
// void main()
|
|
|
|
|
// {
|
|
|
|
|
// czm_materialInput materialInput;
|
|
|
|
|
// vec2 st = v_st;
|
|
|
|
|
// st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);
|
|
|
|
|
// materialInput.s = st.s;
|
|
|
|
|
// materialInput.st = st;
|
|
|
|
|
// materialInput.str = vec3(st, 0.0);
|
|
|
|
|
// czm_material material = czm_getMaterial(materialInput);
|
|
|
|
|
// gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);
|
|
|
|
|
// #ifdef VECTOR_TILE
|
|
|
|
|
// gl_FragColor *= u_highlightColor;
|
|
|
|
|
// #endif
|
|
|
|
|
// czm_writeLogDepth();
|
|
|
|
|
// }`
|
|
|
|
|
// }),
|
|
|
|
|
// }));
|
|
|
|
|
// console.log(entity)
|
|
|
|
|
// let geometryInstances2 = new Cesium.GeometryInstance({
|
|
|
|
|
// geometry: new Cesium.PolygonGeometry({
|
|
|
|
|
// polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray([100, 1, 101, 1, 101, -1, 100, -1])),
|
|
|
|
|
// }),
|
|
|
|
|
// })
|
|
|
|
|
// let entity2 = this.sdk.viewer.scene.primitives.add(new Cesium.GroundPrimitive({
|
|
|
|
|
// geometryInstances: geometryInstances2,
|
|
|
|
|
// appearance: new Cesium.EllipsoidSurfaceAppearance({
|
|
|
|
|
// aboveGroud: true,
|
|
|
|
|
// material: new Cesium.Material({
|
|
|
|
|
// fabric: {
|
|
|
|
|
// uniforms: {
|
|
|
|
|
// color: new Cesium.Color(1.0, 0.0, 0.0, 0.1),
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(1000, 1.0),
|
|
|
|
|
// rotate: 0
|
|
|
|
|
// },
|
|
|
|
|
// source: shader
|
|
|
|
|
// },
|
|
|
|
|
// }),
|
|
|
|
|
// }),
|
|
|
|
|
// }));
|
|
|
|
|
// console.log(geometryInstances2)
|
|
|
|
|
// // 获取多边形的边界矩形
|
|
|
|
|
// let boundingSphere = geometryInstances2.geometry.boundingSphere;
|
|
|
|
|
// // 创建一个矩阵,它表示多边形的本地坐标到世界坐标的转换
|
|
|
|
|
// let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(boundingSphere.center);
|
|
|
|
|
// console.log(entity2, matrix)
|
|
|
|
|
// setInterval(() => {
|
|
|
|
|
// }, 100);
|
|
|
|
|
// this.entityArray.push(entity)
|
|
|
|
|
console.log(entity)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let entity = this.sdk.viewer.entities.add({
|
|
|
|
|
// show: this.options.show,
|
|
|
|
|
// polygon: {
|
|
|
|
|
// hierarchy: new Cesium.PolygonHierarchy([
|
|
|
|
|
// new Cesium.Cartesian3(1201222.3498141132, 5794200.4246190665, 2372132.932514765),
|
|
|
|
|
// new Cesium.Cartesian3(1200929.6921250424, 5794615.962987943, 2371271.7244476764),
|
|
|
|
|
// new Cesium.Cartesian3(1199139.8791256004, 5794316.892300814, 2372896.7988495603)]),
|
|
|
|
|
// perPositionHeight: true,
|
|
|
|
|
// material: new PolylineImageTrailMaterialProperty({
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(10, 1.0),
|
|
|
|
|
// color: Cesium.Color.TOMATO,
|
|
|
|
|
// rotate: 0
|
|
|
|
|
// }),
|
|
|
|
|
// outline: true,
|
|
|
|
|
// outlineColor: Cesium.Color.BLACK,
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
// console.log(entity)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建新材质
|
|
|
|
|
let newMaterial = new Cesium.Material({
|
|
|
|
|
fabric: {
|
|
|
|
|
type: 'Color',
|
|
|
|
|
uniforms: {
|
|
|
|
|
color: new Cesium.Color(1.0, 0.0, 0.0, 1.0) // 红色
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
console.log(newMaterial)
|
|
|
|
|
// this.entity = this.sdk.viewer.entities.add({
|
|
|
|
|
// show: this.options.show,
|
|
|
|
|
// polygon: {
|
|
|
|
|
// hierarchy: new Cesium.PolygonHierarchy(initposition),
|
|
|
|
|
// perPositionHeight: false,
|
|
|
|
|
// material: new Cesium.ImageMaterialProperty({
|
|
|
|
|
// image: this.options.image,
|
|
|
|
|
// repeat: new Cesium.Cartesian2(100, 1.0),
|
|
|
|
|
// color: Cesium.Color.AQUA
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < initposition.length; i++) {
|
|
|
|
|
let entity = this.sdk.viewer.entities.add({
|
|
|
|
|
name: 'node-secondary-edit-point',
|
|
|
|
|
index: i,
|
|
|
|
|
position: initposition[i],
|
|
|
|
|
billboard: {
|
|
|
|
|
image: this.getSourceRootPath() + '/img/point.png',
|
|
|
|
|
width: 15,
|
|
|
|
|
height: 15,
|
|
|
|
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
|
|
|
|
color: Cesium.Color.WHITE.withAlpha(0.99)
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
text: '' + i,
|
|
|
|
|
pixelOffset: { x: 0, y: -20 },
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.sdk.viewer.entities.add({
|
|
|
|
|
name: 'node-secondary-edit-point',
|
|
|
|
|
position: Cesium.Cartesian3.fromDegrees(91.08567036051947, 24.990201656481236),
|
|
|
|
|
billboard: {
|
|
|
|
|
image: this.getSourceRootPath() + '/img/point.png',
|
|
|
|
|
width: 15,
|
|
|
|
|
height: 15,
|
|
|
|
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
|
|
|
|
color: Cesium.Color.WHITE.withAlpha(0.99)
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.sdk.viewer.entities.add({
|
|
|
|
|
name: 'node-secondary-edit-point',
|
|
|
|
|
position: Cesium.Cartesian3.fromDegrees(91.08588488854294, 24.626517401118033),
|
|
|
|
|
billboard: {
|
|
|
|
|
image: this.getSourceRootPath() + '/img/point.png',
|
|
|
|
|
width: 15,
|
|
|
|
|
height: 15,
|
|
|
|
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
|
|
|
|
color: Cesium.Color.WHITE.withAlpha(0.99)
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
test(v) {
|
|
|
|
|
for (let i = 0; i < this.entityArray.length; i++) {
|
|
|
|
|
this.entityArray[i].polygon.stRotation = Cesium.Math.toRadians(v)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default Corridor
|