Compare commits

..

59 Commits

Author SHA1 Message Date
zh
021655a90c Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-19 12:34:28 +08:00
zh
5332767287 12-19 2025-12-19 12:34:25 +08:00
b399d0e41b 修改 2025-12-19 12:03:13 +08:00
8025e1c261 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-18 10:20:12 +08:00
eb651f3299 修改线 2025-12-18 10:19:42 +08:00
zh
b7b4cfdd80 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-17 18:06:30 +08:00
zh
27543a3eae 12-17 2025-12-17 18:06:13 +08:00
1e0edcea59 修改 2025-12-16 18:01:17 +08:00
50b4501b7a 修改 2025-12-15 16:37:56 +08:00
e61afe5c69 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-15 11:21:18 +08:00
3ff8eeda5b 修改全局高程 2025-12-15 11:20:06 +08:00
zh
61f93a81f2 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-12 17:02:05 +08:00
zh
deccdfe061 12-12 2025-12-12 17:02:02 +08:00
98143a5b8f Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-12 17:01:17 +08:00
9de7ab532d 修改 2025-12-12 17:01:12 +08:00
zh
cf1b982b33 修改Arcgis在线底图地址 2025-12-11 17:49:06 +08:00
52f5c653da Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-10 17:28:33 +08:00
57ff9ca49f 修改 2025-12-10 17:28:30 +08:00
zh
44d9ace1c7 修改tip提示语 2025-12-10 14:59:18 +08:00
zh
5b200529b5 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-09 10:44:02 +08:00
zh
116245ed6b 优化扩散圆平移时的lable高度计算 2025-12-09 10:43:58 +08:00
zh
4622ee736c 立体雷达扫描持续时间duration参数改为速度speed 2025-12-09 10:42:40 +08:00
f8df4b73e4 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-08 14:45:28 +08:00
063e22fb6a 修改投影坐标转换 2025-12-08 14:45:24 +08:00
zh
239fc3ce90 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-05 18:19:40 +08:00
zh
b770c5fc7b 12-4 2025-12-05 18:19:35 +08:00
601642d6ee Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-12-05 13:58:36 +08:00
d38b138317 淹没分析 2025-12-05 13:58:33 +08:00
09553840c8 点标注更新高程时忽略自身 2025-12-02 14:38:21 +08:00
dfe7114409 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-28 18:11:37 +08:00
d0b58f378b 轨迹运动增加反向 2025-11-28 18:11:33 +08:00
669f2bf908 修改线当速度为0时不反向bug 2025-11-28 17:10:11 +08:00
1fecb7872f 飞行漫游 2025-11-25 17:08:14 +08:00
6d52711467 鼠标定位 2025-11-25 14:32:18 +08:00
b51c0a447d Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-25 09:52:43 +08:00
cff089c777 间距 2025-11-25 09:52:38 +08:00
zh
d6b0ed8bc3 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-19 10:39:18 +08:00
zh
80c27d0eef 增加点标注rtmp属性 2025-11-19 10:39:12 +08:00
cf28e960b8 飞行 2025-11-18 10:14:38 +08:00
a4edca57f0 飞行漫游 2025-11-17 12:01:34 +08:00
75b56f9562 新增度分秒拾取功能 2025-11-14 15:09:00 +08:00
25af7f1d02 修改视域默认值 2025-11-14 10:59:13 +08:00
f1171f5e32 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-13 17:13:32 +08:00
884378390e 鼠标定位 2025-11-13 17:13:28 +08:00
zh
0a4cd91fe6 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-13 14:59:12 +08:00
zh
29f6f5781b 信息栏样式 2025-11-13 14:59:06 +08:00
ae84184bf8 修改 2025-11-12 17:34:53 +08:00
b4fd967930 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-11-11 15:21:24 +08:00
004c203139 计算 2025-11-11 15:21:09 +08:00
zh
26570d888c 南纬度分秒准确性 2025-11-04 11:30:40 +08:00
zh
ba646c1fac 南纬度分秒准确性 2025-11-04 11:30:29 +08:00
zh
a1be89ade7 扇形参数 2025-11-04 11:30:02 +08:00
zh
5e9ffc5509 Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-10-29 16:43:04 +08:00
zh
8ad5524982 椭圆 2025-10-29 16:43:00 +08:00
94e5698f5a Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-10-27 14:35:49 +08:00
147b0bb43a 坐标修改、提示框样式修改 2025-10-27 14:35:43 +08:00
zh
90466a4799 提交 2025-10-23 18:01:47 +08:00
zh
f52d928b9b Merge branch 'master' of http://xny.yj-3d.com:3000/zh/sdk4.0_new 2025-10-21 18:05:06 +08:00
zh
35010675e7 提交 2025-10-21 18:04:59 +08:00
98 changed files with 2343 additions and 2279 deletions

View File

@ -17,6 +17,7 @@ class Draw extends Tools {
this.viewer = sdk.viewer
this.entityHasCreated = false
this.event = null
this._tipText = options.tipText
this.tip = null
this.points_ids = []
this.color = options.color || 'rgba(185,14,14,0.58)'
@ -24,6 +25,17 @@ class Draw extends Tools {
this._sdk2D = get2DView()
}
get tipText() {
return this._tipText || ''
}
set tipText(text) {
this._tipText = text
if(this.tip) {
this.tip.set_text(text)
}
}
create_point(cartesian, viewer = this.viewer) {
let id = this.randomString()
viewer.entities.add(

View File

@ -72,7 +72,7 @@ class DrawAssemble extends Draw {
// eslint-disable-next-line no-undef
YJ.Measure.SetMeasureStatus(true)
let into
this.tip = new MouseTip('左键确定,右键取消;', that.sdk)
this.tip = new MouseTip(this.tipText || '左键确定,右键取消;', that.sdk)
this.event = new MouseEvent(that.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -100,6 +100,9 @@ class DrawAssemble extends Draw {
cb(null, array)
this.end()
}
else {
cb(cache_positions.length)
}
})
this.event.mouse_move((movement, cartesian) => {
if (into === '2D') {
@ -147,6 +150,22 @@ class DrawAssemble extends Draw {
this.end()
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
return
}
if (this.points_ids.length >= 1) {
if(this.points_ids.length === 1) {
this.viewer.entities.remove(this.assemblePolygon)
this.assemblePolygon = undefined
}
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
this.anchorpoints.pop()
cb(cache_positions.length)
}
})
this.event.gesture_pinck_start((movement, cartesian) => {
if (into === '2D') {
return
@ -176,6 +195,7 @@ class DrawAssemble extends Draw {
cache_positions.push(this.cartesian3Towgs84(cartesian))
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian))
cb(cache_positions.length)
}
}
})
@ -204,6 +224,9 @@ class DrawAssemble extends Draw {
cb(null, array)
this.end()
}
else {
cb(cache_positions.length)
}
})
this.event2D.mouse_move((movement, cartesian) => {
if (into === '3D') {
@ -250,6 +273,21 @@ class DrawAssemble extends Draw {
cb(null)
this.end()
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
return
}
if (this.points_ids.length >= 1) {
if(this.points_ids.length === 1) {
this.viewer.entities.remove(this.assemblePolygon)
this.assemblePolygon = undefined
}
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
this.anchorpoints.pop()
cb(cache_positions.length)
}
})
this.event2D.gesture_pinck_start((movement, cartesian) => {
if (into === '3D') {
@ -280,6 +318,7 @@ class DrawAssemble extends Draw {
cache_positions.push(this.cartesian3Towgs84(cartesian))
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
cb(cache_positions.length)
}
}
})

View File

@ -48,7 +48,7 @@ export default class DrawAttackArrow extends Draw {
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定右键结束CTRL+右键撤销', this.sdk)
this.tip = new MouseTip(this.tipText || '左键确定右键结束CTRL+右键撤销', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -71,6 +71,7 @@ export default class DrawAttackArrow extends Draw {
this.points_ids.push(this.create_point(cartesian))
cache_positions.push(pos84)
isMove = false
cb(cache_positions.length)
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
@ -110,6 +111,7 @@ export default class DrawAttackArrow extends Draw {
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cb(cache_positions.length)
}
})

View File

@ -21,7 +21,7 @@ export default class DrawCircle extends Draw {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键开始,右键取消', this.sdk)
this.tip = new MouseTip(this.tipText || '左键开始,右键取消', this.sdk)
this.event = new MouseEvent(this.sdk)
let clickNum = 0
this.circle_id = this.randomString() //圆id
@ -37,7 +37,7 @@ export default class DrawCircle extends Draw {
return
}
into = '3D'
this.tip.set_text('再次左键,完成绘制;右键取消')
this.tip.set_text(this.tipText || '再次左键,完成绘制;右键取消')
clickNum++
if (clickNum === 1) {
this.point_id = this.create_point(cartesian)
@ -45,6 +45,7 @@ export default class DrawCircle extends Draw {
positions = this.createCircle(center, 0.01)
cache_points.push(cartesian)
createCirclePolygon()
cb(clickNum)
}
if (clickNum === 2) {
radius_points = cache_points.concat(cartesian)
@ -77,7 +78,24 @@ export default class DrawCircle extends Draw {
radius = this.computeDistance2([center, endpoint])
positions = this.createCircle(center, radius)
}
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
return
}
if (this.point_id) {
this.remove_entity(this.circle_id)
this.remove_entity(this.point_id)
this.point_id = null
cache_points = []
radius_points = []
positions = []
center = {}
endpoint = null
clickNum = 0
cb(clickNum)
}
})
this.event.gesture_pinck_start((movement, cartesian) => {
@ -92,7 +110,7 @@ export default class DrawCircle extends Draw {
cb(false)
}
else {
this.tip.set_text('再次左键,完成绘制;右键取消')
this.tip.set_text(this.tipText || '再次左键,完成绘制;右键取消')
clickNum++
if (clickNum === 1) {
this.point_id = this.create_point(cartesian)
@ -104,6 +122,7 @@ export default class DrawCircle extends Draw {
(movement.position1.x + movement.position2.x) / 2,
(movement.position1.y + movement.position2.y) / 2
)
cb(clickNum)
}
if (clickNum === 2) {
radius_points = cache_points.concat(cartesian)
@ -124,7 +143,7 @@ export default class DrawCircle extends Draw {
return
}
into = '2D'
this.tip.set_text('再次左键,完成绘制;右键取消')
this.tip.set_text(this.tipText || '再次左键,完成绘制;右键取消')
clickNum++
if (clickNum === 1) {
this.point_id = this.create_point(cartesian, this._sdk2D.viewer)
@ -132,6 +151,7 @@ export default class DrawCircle extends Draw {
positions = this.createCircle(center, 0.01)
cache_points.push(cartesian)
createCirclePolygon(this._sdk2D.viewer)
cb(clickNum)
}
if (clickNum === 2) {
radius_points = cache_points.concat(cartesian)
@ -179,7 +199,7 @@ export default class DrawCircle extends Draw {
cb(false)
}
else {
this.tip.set_text('再次左键,完成绘制;右键取消')
this.tip.set_text(this.tipText || '再次左键,完成绘制;右键取消')
clickNum++
if (clickNum === 1) {
this.point_id = this.create_point(cartesian, this._sdk2D.viewer)
@ -191,6 +211,7 @@ export default class DrawCircle extends Draw {
((movement.position1.x + movement.position2.x) / 2) + this.viewer.canvas.width,
(movement.position1.y + movement.position2.y) / 2
)
cb(clickNum)
}
if (clickNum === 2) {
radius_points = cache_points.concat(cartesian)
@ -203,6 +224,24 @@ export default class DrawCircle extends Draw {
}
})
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
return
}
if (this.point_id) {
this.remove_entity(this.circle_id)
this.remove_entity(this.point_id)
this.point_id = null
cache_points = []
radius_points = []
positions = []
center = {}
endpoint = null
clickNum = 0
cb(clickNum)
}
})
}
let that = this

View File

@ -15,7 +15,7 @@ export default class DrawElliptic extends Draw {
let into
this.entity_ids = []
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键开始,右键取消', this.sdk)
this.tip = new MouseTip(this.tipText || '左键开始,右键取消', this.sdk)
this.event = new MouseEvent(this.sdk)
let clickNum = 0
this.elliptic_id = this.randomString() //圆id
@ -34,7 +34,7 @@ export default class DrawElliptic extends Draw {
let bearing = 0
this.event.mouse_left((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
into = '3D'
@ -59,8 +59,11 @@ export default class DrawElliptic extends Draw {
cache_84_position[2] = pos84
}
if (clickNum >= 3) {
this.end()
cb(null, { center, bearing, semiMajorAxis, semiMinorAxis })
this.end()
cb(null, { center, bearing, semiMajorAxis, semiMinorAxis })
}
else {
cb(clickNum)
}
// if (clickNum === 2) {
// radius_points = cache_points.concat(cartesian)
@ -72,14 +75,14 @@ export default class DrawElliptic extends Draw {
// }
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
this.end()
cb(false)
})
this.event.mouse_move((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
this.tip.setPosition(
@ -94,11 +97,22 @@ export default class DrawElliptic extends Draw {
}
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if (into === '2D') {
return
}
this.remove_entity(this.points_ids.pop())
clickNum--
cb(clickNum)
if(clickNum==0) {
this.remove_entity(this.elliptic_id)
}
})
if (!this._is2D && this._sdk2D) {
this.event2D = new MouseEvent(this._sdk2D)
this.event2D.mouse_left((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
into = '2D'
@ -123,8 +137,11 @@ export default class DrawElliptic extends Draw {
cache_84_position[2] = pos84
}
if (clickNum >= 3) {
this.end()
cb(null, { center, bearing, semiMajorAxis, semiMinorAxis })
this.end()
cb(null, { center, bearing, semiMajorAxis, semiMinorAxis })
}
else {
cb(clickNum)
}
// if (clickNum === 2) {
// radius_points = cache_points.concat(cartesian)
@ -136,14 +153,14 @@ export default class DrawElliptic extends Draw {
// }
})
this.event2D.mouse_right((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
this.end()
cb(false)
})
this.event2D.mouse_move((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
this.tip.setPosition(

View File

@ -47,7 +47,7 @@ export default class DrawPincerArrow extends Draw {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定右键取消CTRL+右键撤销', this.sdk)
this.tip = new MouseTip(this.tipText || '左键确定右键取消CTRL+右键撤销', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -74,6 +74,9 @@ export default class DrawPincerArrow extends Draw {
this.end()
cb(null, cache_positions, c)
}
else {
cb(cache_positions.length)
}
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
@ -102,6 +105,7 @@ export default class DrawPincerArrow extends Draw {
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cb(cache_positions.length)
}
})
@ -155,6 +159,9 @@ export default class DrawPincerArrow extends Draw {
this.end()
cb(null, cache_positions, c)
}
else {
cb(cache_positions.length)
}
}
})
})
@ -183,6 +190,9 @@ export default class DrawPincerArrow extends Draw {
this.end()
cb(null, cache_positions, c)
}
else {
cb(cache_positions.length)
}
})
this.event2D.mouse_right((movement, cartesian) => {
if(into === '3D') {
@ -211,6 +221,7 @@ export default class DrawPincerArrow extends Draw {
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cb(cache_positions.length)
}
})
@ -264,6 +275,9 @@ export default class DrawPincerArrow extends Draw {
this.end()
cb(null, cache_positions, c)
}
else {
cb(cache_positions.length)
}
}
})
})

View File

@ -28,7 +28,7 @@ class DrawPoint extends Draw {
} else {
let car = undefined
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定,右键结束;', this.sdk)
this.tip = new MouseTip(this.tipText || '左键确定,右键结束;', this.sdk)
this.event = new MouseEvent(this.sdk)
this.event.mouse_left((movement, cartesian) => {
this.end()

View File

@ -62,7 +62,7 @@ class DrawPolygon extends Draw {
super.start()
YJ.Measure.SetMeasureStatus(true)
let into
this.tip = new MouseTip('左键确定右键结束CTRL+右键撤销', this.sdk)
this.tip = new MouseTip(this.tipText || '左键确定右键结束CTRL+右键撤销', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -88,6 +88,7 @@ class DrawPolygon extends Draw {
cache_84_position.push(this.cartesian3Towgs84(cartesian, this.viewer))
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian))
cb(cache_positions.length)
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
@ -122,6 +123,7 @@ class DrawPolygon extends Draw {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cache_84_position.pop()
cb(cache_positions.length)
}
})
@ -134,6 +136,7 @@ class DrawPolygon extends Draw {
cache_positions.pop()
cache_84_position.pop()
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
@ -164,6 +167,7 @@ class DrawPolygon extends Draw {
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian))
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
})
@ -190,6 +194,7 @@ class DrawPolygon extends Draw {
cache_84_position.push(this.cartesian3Towgs84(cartesian, this.viewer))
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
cb(cache_positions.length)
})
this.event2D.mouse_right((movement, cartesian) => {
if(into === '3D') {
@ -224,6 +229,7 @@ class DrawPolygon extends Draw {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cache_84_position.pop()
cb(cache_positions.length)
}
})
@ -236,6 +242,7 @@ class DrawPolygon extends Draw {
cache_positions.pop()
cache_84_position.pop()
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
@ -266,6 +273,7 @@ class DrawPolygon extends Draw {
// console.log(this.cartesian3Towgs84(cartesian))
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
})

View File

@ -96,7 +96,7 @@ class DrawPolyline extends Draw {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定右键结束CTRL+右键撤销', this.sdk)
this.tip = new MouseTip(this.tipText || '左键确定右键结束CTRL+右键撤销', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -104,7 +104,7 @@ class DrawPolyline extends Draw {
let cache_positions = []
let car = undefined
this.event.mouse_left((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
into = '3D'
@ -120,7 +120,6 @@ class DrawPolyline extends Draw {
}
cache_positions.push(cartesian)
this.points_ids.push(this.create_point(cartesian, this.viewer))
if (cache_positions.length >= this.options.number) {
let positions = []
cache_positions.forEach((item) => {
@ -137,9 +136,12 @@ class DrawPolyline extends Draw {
cb(null, positions, smoothPos)
this.end()
}
else {
cb(cache_positions.length)
}
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
let positions = []
@ -158,7 +160,7 @@ class DrawPolyline extends Draw {
this.end()
})
this.event.mouse_move((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
this.positions = cache_positions.concat(cartesian)
@ -169,28 +171,30 @@ class DrawPolyline extends Draw {
)
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cb(cache_positions.length)
}
})
this.event.gesture_pinck_start_keyboard_ctrl(() => {
if(into === '2D') {
if (into === '2D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
this.event.gesture_pinck_start((movement, cartesian) => {
if(into === '2D') {
if (into === '2D') {
return
}
let startTime = new Date()
@ -225,6 +229,7 @@ class DrawPolyline extends Draw {
cache_positions.push(cartesian)
this.points_ids.push(this.create_point(cartesian, this.viewer))
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
})
@ -233,7 +238,7 @@ class DrawPolyline extends Draw {
if (!this._is2D && this._sdk2D) {
this.event2D = new MouseEvent(this._sdk2D)
this.event2D.mouse_left((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
into = '2D'
@ -251,7 +256,7 @@ class DrawPolyline extends Draw {
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
})
this.event2D.mouse_right((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
let positions = []
@ -270,7 +275,7 @@ class DrawPolyline extends Draw {
this.end()
})
this.event2D.mouse_move((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
this.positions = cache_positions.concat(cartesian)
@ -281,17 +286,18 @@ class DrawPolyline extends Draw {
)
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
cb(cache_positions.length)
}
})
this.event2D.gesture_pinck_start_keyboard_ctrl(() => {
if(into === '3D') {
if (into === '3D') {
return
}
if (this.points_ids.length > 1) {
@ -302,7 +308,7 @@ class DrawPolyline extends Draw {
})
this.event2D.gesture_pinck_start((movement, cartesian) => {
if(into === '3D') {
if (into === '3D') {
return
}
let startTime = new Date()
@ -337,6 +343,7 @@ class DrawPolyline extends Draw {
cache_positions.push(cartesian)
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
this.positions = cache_positions.concat(cartesian)
cb(cache_positions.length)
}
})
})

View File

@ -58,7 +58,7 @@ class DrawRect extends Draw {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定,右键取消', that.sdk)
this.tip = new MouseTip(this.tipText || '左键确定,右键取消', that.sdk)
this.event = new MouseEvent(that.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
@ -86,10 +86,10 @@ class DrawRect extends Draw {
secondtPoint = wgs84
this.end()
cb(null, that.rectObj, [firstPoint, secondtPoint])
}
else {
cb(cnt)
}
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
@ -113,6 +113,19 @@ class DrawRect extends Draw {
}
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
return
}
if (this.points_ids.length >= 1) {
this.remove_entity(this.points_ids.pop()) //移除point
this.polygonHasCreated = false
this.rect = []
cnt--
cb(cnt)
}
})
this.event.gesture_pinck_start((movement, cartesian) => {
if(into === '2D') {
return
@ -145,7 +158,9 @@ class DrawRect extends Draw {
secondtPoint = wgs84
this.end()
cb(null, that.rectObj, [firstPoint, secondtPoint])
}
else {
cb(cnt)
}
}
})
@ -172,9 +187,10 @@ class DrawRect extends Draw {
secondtPoint = wgs84
this.end()
cb(null, that.rectObj, [firstPoint, secondtPoint])
}
else {
cb(cnt)
}
})
this.event2D.mouse_right((movement, cartesian) => {
@ -199,6 +215,19 @@ class DrawRect extends Draw {
}
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
return
}
if (this.points_ids.length >= 1) {
this.remove_entity(this.points_ids.pop()) //移除point
this.polygonHasCreated = false
this.rect = []
cnt--
cb(cnt)
}
})
this.event2D.gesture_pinck_start((movement, cartesian) => {
if(into === '3D') {
return
@ -231,7 +260,9 @@ class DrawRect extends Draw {
secondtPoint = wgs84
this.end()
cb(null, that.rectObj, [firstPoint, secondtPoint])
}
else {
cb(cnt)
}
}
})

View File

@ -26,7 +26,7 @@ class DrawSector extends Draw {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确认,右键取消', that.sdk)
this.tip = new MouseTip(this.tipText || '左键确认,右键取消', that.sdk)
this.event = new MouseEvent(that.sdk)
this._sector_id = null; //扇形
this._positions = []; //活动点
@ -45,6 +45,7 @@ class DrawSector extends Draw {
if (this._positions.length < 3) {
this.points_ids.push(this.create_point(cartesian));
this._positions.push(this.cartesian3Towgs84(cartesian, this.viewer));
cb(this._positions.length)
}
else {
this.end()
@ -90,6 +91,20 @@ class DrawSector extends Draw {
this.end()
cb(null)
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
return
}
if (this._positions.length >= 1) {
this.remove_entity(this.points_ids.pop())
this.remove_entity(this.points_ids.pop())
this.remove_entity(this._sector_id)
this._sector_id = undefined
this._positions.pop()
this._positions.pop()
cb(this._positions.length)
}
})
if (!this._is2D && this._sdk2D) {
this.event2D = new MouseEvent(this._sdk2D)
this.event2D.mouse_left((movement, cartesian) => {
@ -102,6 +117,7 @@ class DrawSector extends Draw {
if (this._positions.length < 3) {
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer));
this._positions.push(this.cartesian3Towgs84(cartesian, this.viewer));
cb(this._positions.length)
}
else {
this.end()
@ -147,6 +163,20 @@ class DrawSector extends Draw {
this.end()
cb(null)
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
return
}
if (this._positions.length >= 1) {
this.remove_entity(this.points_ids.pop())
this.remove_entity(this.points_ids.pop())
this.remove_entity(this._sector_id)
this._sector_id = undefined
this._positions.pop()
this._positions.pop()
cb(this._positions.length)
}
})
}
}
}

View File

@ -185,6 +185,18 @@ export default class MouseEvent {
}, Cesium.ScreenSpaceEventType.PINCH_MOVE)
}
keyboard_ctrl_z(cb) {
// // this.sdk.viewer.canvas.tabindex = 0
// // this.sdk.viewer.canvas.focus()
// let mapElm = this.sdk.viewer.canvas
// mapElm.addEventListener('keydown', function(e) {
// if (e.ctrlKey && e.key === 'z') {
// e.preventDefault();
// console.log('编辑器内触发 Ctrl + Z');
// }
// });
}
destroy() {
if (this.handler)
this.handler.destroy() //关闭事件句柄

View File

@ -78,7 +78,7 @@ function openLeftClick(sdk, cb) {
let obj = leftClickCallbackMap.get(key)
if (obj) {
if (obj.that) {
if (obj.that && obj.that.show) {
// 是否为多边形
if (obj.that.type === 'PolygonObject') {
// 是否可点击y
@ -242,7 +242,7 @@ function openLeftClick(sdk, cb) {
// 矢量
if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {
let obj = leftClickCallbackMap.get(pick.id.parentId)
if (obj.that.picking && obj.that.geojson) {
if (obj && obj.that && obj.that.picking && obj.that.geojson && obj.that.show) {
for (let i = 0; i < obj.that.geojson.features.length; i++) {
if (obj.that.geojson.features[i].id === pick.id._id) {
obj.callback(
@ -261,7 +261,7 @@ function openLeftClick(sdk, cb) {
if (pick.id.properties && pick.id.properties.id && leftClickCallbackMap.has(pick.id.properties.id._value)) {
let obj = leftClickCallbackMap.get(pick.id.properties.id._value)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
obj.callback(
movement,
pick.id.properties.id._value,
@ -270,7 +270,7 @@ function openLeftClick(sdk, cb) {
}
else if (leftClickCallbackMap.has(pick.id.id)) {
let obj = leftClickCallbackMap.get(pick.id.id)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
obj.callback(
movement,
pick.id.id,
@ -279,7 +279,7 @@ function openLeftClick(sdk, cb) {
}
else if (entityId && leftClickCallbackMap.has(entityId)) {
let obj = leftClickCallbackMap.get(entityId)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
obj.callback(
movement,
entityId,
@ -289,10 +289,12 @@ function openLeftClick(sdk, cb) {
else if (pick.primitive) {
if (typeof pick.id == 'string' && leftClickCallbackMap.has(pick.id)) {
let obj = leftClickCallbackMap.get(pick.id)
obj.callback(
movement,
pick.id,
cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that)
if (obj && obj.that && obj.that.picking && obj.that.show) {
obj.callback(
movement,
pick.id,
cartesian3Towgs84(getcartesian(sdk, movement), sdk.viewer), obj.that)
}
}
}
}
@ -300,7 +302,7 @@ function openLeftClick(sdk, cb) {
if (pick.primitive && pick.primitive.id) {
if (leftClickCallbackMap.has(pick.primitive.id)) {
let obj = leftClickCallbackMap.get(pick.primitive.id)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
if (obj.that.type === 'bim') {
if (YJ.Global.getBimPickStatus(sdk)) {
obj.callback(
@ -322,7 +324,7 @@ function openLeftClick(sdk, cb) {
if (pick.content && (!pick.primitive || !pick.primitive.id)) {
if (leftClickCallbackMap.has(pick.content.tileset.id)) {
let obj = leftClickCallbackMap.get(pick.content.tileset.id)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
if (obj.that.type === 'bim') {
if (YJ.Global.getBimPickStatus(sdk)) {
obj.callback(
@ -390,7 +392,7 @@ function openRightClick(sdk) {
let id
if (pick.id.type && pick.id.type === 'vector' && pick.id.parentId) {
let obj = rightClickCallbackMap.get(pick.id.parentId)
if (obj.that.picking && obj.that.geojson) {
if (obj && obj.that && obj.that.picking && obj.that.geojson && obj.that.show) {
for (let i = 0; i < obj.that.geojson.features.length; i++) {
if (obj.that.geojson.features[i].id === pick.id._id) {
obj.callback(
@ -410,7 +412,7 @@ function openRightClick(sdk) {
}
if (rightClickCallbackMap.has(id)) {
let obj = rightClickCallbackMap.get(id)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
let cartesian = getcartesian(sdk, movement)
if (!cartesian) {
return
@ -426,7 +428,7 @@ function openRightClick(sdk) {
if (pick && pick.content) {
if (rightClickCallbackMap.has(pick.content.tileset.id)) {
let obj = rightClickCallbackMap.get(pick.content.tileset.id)
if (obj.that.picking) {
if (obj && obj.that && obj.that.picking && obj.that.show) {
if (obj.that.type === 'bim') {
if (YJ.Global.getBimPickStatus(sdk)) {
let cartesian = getcartesian(sdk, movement)

View File

@ -76,6 +76,15 @@ function accordingToCameraHeight() {
}
function startDraw(sdk, showData) {
if (!sdk || !sdk.viewer) {
return
}
if (showData) {
let terrainAvailability = sdk.viewer.terrainProvider.availability;
if (!terrainAvailability) {
return '未加载地形数据!'
}
}
show = showData
Object.keys(paramData).forEach(item => {
@ -120,8 +129,28 @@ function reset() {
supplementaryContourShow = false
supplementaryContourWidth = 1.0
supplementaryContourColor = '#d084d1'
}
function setVal(data) {
secondaryLinesCount = data['secondaryLinesCount']
// show = true
equalHeightDistance = data['equalHeightDistance']
activeColor = rgbaFromObject(data['activeColor'])
indexContourShow = data['indexContourShow']
indexContourWidth = data['indexContourWidth']
indexContourColor = rgbaFromObject(data['indexContourColor'])
intermediateContourShow = data['intermediateContourShow']
intermediateContourWidth = data['intermediateContourWidth']
intermediateContourColor = rgbaFromObject(data['intermediateContourColor'])
halfIntervalContourShow = data['halfIntervalContourShow']
halfIntervalContourWidth = data['halfIntervalContourWidth']
halfIntervalContourColor = rgbaFromObject(data['halfIntervalContourColor'])
supplementaryContourShow = data['supplementaryContourShow']
supplementaryContourWidth = data['supplementaryContourWidth']
supplementaryContourColor = rgbaFromObject(data['supplementaryContourColor'])
}
function rgbaFromObject(colorObj) {
const { red, green, blue, alpha = 1 } = colorObj;
return `rgba(${red * 255}, ${green * 255}, ${blue * 255}, ${alpha})`;
}
async function dialog(sdk) {
_sdk = sdk
@ -707,4 +736,4 @@ czm_material czm_getMaterial(czm_materialInput materialInput)
});
}
export { dialog, startDraw, reset }
export { dialog, startDraw, reset, setVal }

View File

@ -18,6 +18,14 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
if (options.repeat) {
repeat = Number(options.repeat)
}
if (options.defaultTime) {
let contentElm = document.getElementsByClassName('fly-roam')[0]
contentElm.querySelector("input[name='defaultTime']").value = options.defaultTime
}
if (options.totalTime) {
let contentElm = document.getElementsByClassName('fly-roam')[0]
contentElm.querySelector("input[name='totalTime']").value = options.totalTime
}
let viewer = sdk.viewer
let tools = new Tools(sdk)
let active = 0
@ -72,6 +80,23 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
nameElm.value = name
nameElm.addEventListener('input', () => {
name = nameElm.value
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
})
let defaultTimeDom = contentElm.querySelector("input[name='defaultTime']")
nameElm.addEventListener('input', () => {
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
})
// let addListBtn = document.createElement('button');
@ -90,7 +115,9 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
func({
name: name,
points: newPoints,
repeat: repeat + ''
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
// _Dialog.clickSavePath && _Dialog.clickSavePath(
// {
@ -117,7 +144,8 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
let addBtn = contentElm.getElementsByClassName('add-point')[0]
addBtn.addEventListener('click', () => {
let position = tools.cartesian3Towgs84(viewer.camera.position, viewer)
let time = 0
let defaultTime = Number(contentElm.querySelector("input[name='defaultTime']").value)
let time = points.length === active ? 0 : defaultTime
let data = {
duration: time,
position: position,
@ -127,9 +155,24 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
roll: viewer.camera.roll
}
}
if (points.length === active && active !== 0) {
points[points.length - 1].duration = defaultTime
let trList = tableBody.getElementsByClassName('tr')
trList[points.length - 1].querySelector("input[name='time']").value = defaultTime
}
points.splice(active, 0, data)
addTrElm(data)
i++
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
})
// let modifyBtn = contentElm.getElementsByClassName('modify-point')[0]
// modifyBtn.addEventListener('click', () => {
@ -147,17 +190,21 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
// })
let totalTimeElm = contentElm.querySelector("input[name='totalTime']")
let isTotalTimeElm = contentElm.querySelector("input[name='isTotalTime']")
// let isTotalTimeElm = contentElm.querySelector("input[name='isTotalTime']")
let isTotalTimeElm = contentElm.getElementsByClassName('isTotalTime')[0]
let repeatElm = contentElm.querySelector("input[name='repeat']")
isTotalTimeElm.addEventListener('change', () => {
isTotalTimeElm.addEventListener('click', () => {
let trList = tableBody.getElementsByClassName('tr')
if (isTotalTimeElm.checked && trList.length > 0) {
// if (isTotalTimeElm.checked && trList.length > 0) {
if (trList.length > 0) {
let time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2))
for (let i = 0; i < trList.length - 1; i++) {
points[i].duration = time
trList[i].querySelector("input[name='time']").value = time
}
trList[trList.length - 1].querySelector("input[name='time']").value = 0
totalTimeElm.value = 0//点击应用后默认时间清零
}
})
totalTimeElm.addEventListener('blur', () => {
@ -174,6 +221,13 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
}
trList[trList.length - 1].querySelector("input[name='time']").value = 0
}
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
})
repeatElm.checked = (repeat === Infinity ? true : false)
repeatElm.addEventListener('change', () => {
@ -184,6 +238,13 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
repeat = 0
}
currentRepeat = repeat
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
_Dialog.changeRepeatStateCallBack && _Dialog.changeRepeatStateCallBack(repeatElm.checked)
})
@ -211,8 +272,9 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
<input class="input time" type="number" title="" min="0" max="999.99" step="0.01" name="time" value="${data.duration}">
</div>
<div class="td action">
<button class="play">播放</span>
<button class="delete">删除</span>
<button title="更新视角" class='iconBut'><svg class="icon-resetView modify-point" style='width:20px;height:20px;cursor: pointer;'><use xlink:href="#yj-icon-resetView"></use></svg></button>
<button title="播放" class='iconBut'><svg class="icon-play play" style='width:15px;height:15px;cursor: pointer;margin-top: -4px;'><use xlink:href="#yj-icon-play"></use></svg></button>
<button title="删除" class='iconBut'><svg class="icon-delete delete" style='width:20px;height:20px;cursor: pointer;'><use xlink:href="#yj-icon-delete"></use></svg></button>
</div>
`
tr.addEventListener('click', (v) => {
@ -245,16 +307,35 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
let e_play = tr.getElementsByClassName('play')[0]
let e_delete = tr.getElementsByClassName('delete')[0]
let e_time = tr.querySelector("input[name='time']")
let modifyBtn = tr.getElementsByClassName('modify-point')[0]
modifyBtn.addEventListener('click', () => {
for (let m = 0; m < trList.length; m++) {
if (trList[m] === e_delete.parentNode.parentNode.parentNode) {
let position = tools.cartesian3Towgs84(viewer.camera.position, viewer)
points[m].position = position
points[m].orientation = {
heading: viewer.camera.heading,
pitch: viewer.camera.pitch,
roll: viewer.camera.roll
}
tools.message({ text: '更新视角成功' })
}
}
})
e_play.addEventListener('click', () => {
for (let m = 0; m < trList.length; m++) {
if (trList[m] === e_delete.parentNode.parentNode) {
if (trList[m] === e_play.parentNode.parentNode.parentNode) {
flyTo(sdk, points, m)
}
}
})
e_delete.addEventListener("click", (v) => {
for (let m = 0; m < trList.length; m++) {
if (trList[m] === e_delete.parentNode.parentNode) {
if (trList[m] === e_delete.parentNode.parentNode.parentNode) {
points.splice(m, 1)
points[points.length - 1] && (points[points.length - 1].duration = 0)
tableBody.removeChild(tr)
@ -292,15 +373,21 @@ const open = async (sdk, options = {}, _Dialog = {}, func) => {
// if (trList.length > 0) {
// trList[trList.length - 1].querySelector("input[name='time']").disabled = 'disabled'
// }
func({
name: name,
points: points,
repeat: repeat + '',
defaultTime: defaultTimeDom.value,
totalTime: totalTimeElm.value
})
})
e_time.addEventListener('input', (v) => {
console.log(isTotalTimeElm, 'isTotalTimeElm')
isTotalTimeElm.checked = false
data.duration = Number(e_time.value)
if (data.duration < 0) {
data.duration = 0
}
console.log(data.duration, 'duration')
})
e_time.addEventListener('blur', () => {
e_time.value = Number(Number(e_time.value).toFixed(2))
@ -322,11 +409,12 @@ const close = () => {
// _DialogObject = null
// }
let contentElm = document.getElementsByClassName('fly-roam')[0]
let tableBody = contentElm.getElementsByClassName('table-body')[0];
let trList = tableBody.getElementsByClassName('tr')
for (let i = trList.length - 1; i >= 0; i--) {
tableBody.removeChild(trList[i])
if (contentElm) {
let tableBody = contentElm.getElementsByClassName('table-body')[0];
let trList = tableBody.getElementsByClassName('tr')
for (let i = trList.length - 1; i >= 0; i--) {
tableBody.removeChild(trList[i])
}
}
repeat = 0
@ -334,7 +422,6 @@ const close = () => {
}
const executeFlyTo = (sdk, points = [], index = 0, noStart) => {
console.log(noStart, points, 'noStart')
if (clickHandler) {
clickHandler.destroy()
}

View File

@ -1434,9 +1434,12 @@ class MapPrint {
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
setTimeout(() => {
exporting = false;
exportBtn.innerHTML = '打印';
}, 100);
}, 'image/png', 0.95);
exporting = false;
exportBtn.innerHTML = '打印';
// canvas2.toBlob(function (blob) {
// let imgBlobData = URL.createObjectURL(blob);
// let downloadElement = document.createElement('a');

View File

@ -166,5 +166,15 @@ function close(sdk) {
}
sdk.viewer.scene.preRender.removeEventListener(syncViewer, syncObject)
}
function destroy(sdk) {
if (mapx.viewer) {
if (mapx.viewer.entities) {
mapx.viewer.entities.removeAll()
}
mapx.viewer.destroy && mapx.viewer.destroy()
}
mapx = {}
sdk.viewer.scene.preRender.removeEventListener(syncViewer, syncObject)
}
export { open, close }
export { open, close, destroy }

View File

@ -50,7 +50,7 @@ const MouseCoordinate = (sdk, status) => {
contentElm = document.createElement('div');
contentElm.style.position = 'absolute';
contentElm.style['z-index'] = 777;
contentElm.style.color = '#ff0000';
contentElm.style.color = '#ffffff';
contentElm.style.left = '0px';
contentElm.style.top = '0px';
contentElm.style.width = '100%';
@ -68,6 +68,58 @@ const MouseCoordinate = (sdk, status) => {
tmovement = { ...movement.endPosition }
})
const posiToCoordinate = (coordinateSystem, position) => {
let type
switch (coordinateSystem) {
case 'EPSG:32601'://WGS84 通用横轴墨卡托投影
//带号 = ⌊(经度 + 180)/6⌋ + 1
var dh = Math.round((position.lng + 180) / 6 + 1)
if (position.lat > 0) {//北纬
type = 32600 + dh
type = 'EPSG:' + type
} else {//南纬
type = 32700 + dh
type = 'EPSG:' + type
}
break;
case 'EPSG:4534'://2000 坐标 3 度不带代号
//N = round(经度/3)
//EPSG = N - 25 + 4534
var dh3y = Math.round(position.lng / 3)
type = dh3y - 25 + 4534
type = 'EPSG:' + type
break;
case 'EPSG:4513'://2000 坐标 3 度带代号
//N = round(经度/3)
//EPSG = N - 25 + 4513
var dh3w = Math.round(position.lng / 3)
type = dh3w - 25 + 4513
type = 'EPSG:' + type
break;
case 'EPSG:4502'://2000 坐标 6 度不带代号
let zoneNumber = Math.floor(position.lng / 6) + 31
// 中国区域6度带带号范围为13-23
if (zoneNumber < 13) zoneNumber = 13;
if (zoneNumber > 23) zoneNumber = 23;
type = (zoneNumber - 13) + 4502
type = 'EPSG:' + type
break;
case 'EPSG:4491'://2000 坐标 6 度带代号
//N = floor(longitude/6) + 31
var dh6 = Math.floor(position.lng / 6) + 31
// 中国区域6度带带号范围为13-23
if (dh6 < 13) dh6 = 13;
if (dh6 > 23) dh6 = 23;
type = (dh6 - 13) + 4491
type = 'EPSG:' + type
break;
default:
break;
}
return type
}
const getPosition = () => {
if (!targetSdk) {
return
@ -120,7 +172,7 @@ const MouseCoordinate = (sdk, status) => {
let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer)
let coordinateSystem = getCoordinateSystem()
let positionType = getDMS()
if (coordinateSystem === 'EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
position = {
x: degrees.lng,
y: degrees.lat,
@ -129,34 +181,34 @@ const MouseCoordinate = (sdk, status) => {
// contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(6)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(6)}°</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
switch (positionType || '度') {
case '度':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(6)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(6)}°</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 160px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(8)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(8)}°</p><p style='margin: 0;'>海拔:${Number(degrees.alt.toFixed(2))} m</p></div>`
break;
case '度分':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, true)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, true)}</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 150px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, true)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, true)}</p><p style='margin: 0;'>海拔:${Number(degrees.alt.toFixed(2))} m</p></div>`
break;
case '度分秒':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, false)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, false)}</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 150px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, false)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, false)}</p><p style='margin: 0;'>海拔:${Number(degrees.alt.toFixed(2))} m</p></div>`
break;
default:
break;
}
}
else {
let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', coordinateSystem)
// let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', coordinateSystem)
let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', posiToCoordinate(coordinateSystem, degrees))
position = result.points[0]
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>x${position.x.toFixed(6)}</p><p style='margin: 0;'>y${position.y.toFixed(6)}</p><p style='margin: 0;'>z${position.z.toFixed(6)}</p></div>`
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 150px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>x${position.x.toFixed(2)}</p><p style='margin: 0;'>y${position.y.toFixed(2)}</p><p style='margin: 0;'>z${Number(position.z.toFixed(2))}</p></div>`
}
}
else {
let coordinateSystem = getCoordinateSystem()
if (coordinateSystem === 'EPSG:4326') {
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:-</p><p style='margin: 0;'>维度:-</p><p style='margin: 0;'>海拔:-</p></div>`
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 160px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:-</p><p style='margin: 0;'>维度:-</p><p style='margin: 0;'>海拔:-</p></div>`
}
else {
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>x-</p><p style='margin: 0;'>y-</p><p style='margin: 0;'>z-</p></div>`
contentElm.innerHTML = `<div class='mousePosiWords' style='width: 150px;position: absolute; z-index: 777; color: #ffffff; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>x-</p><p style='margin: 0;'>y-</p><p style='margin: 0;'>z-</p></div>`
}
}
}
animateUpdate()

View File

@ -9,10 +9,11 @@ import { FlwStatusSwitch, JwwStatusSwitch, getFlwStatus, getJwwStatus } from "..
import { SheetIndexStatusSwitch, getStatus } from '../SheetIndex'
import { getLeftClickState, getRightClickState, getMoveState } from "../../Global/ClickCallback"
import { openLeftClick, openRightClick, openMove } from "./ClickCallback"
import { rain, snow, fog, nightVision, skyStarry, illumination } from '../efflect'
let sdk2D
let sdk3D
let sdk2D = null
let sdk3D = null
let activeViewer
let controlViewer
let syncObject = {}
@ -45,7 +46,7 @@ async function init(sdk) {
openMove(sdk2D)
}
// window.sdk2D = sdk2D
window.sdk2D = sdk2D
solveBug()
syncObject = { sdks: [sdk, sdk2], tools }
await eventBind(sdk, 0, syncObject)
@ -82,6 +83,26 @@ async function init(sdk) {
if (getJwwStatus(sdk)) {
JwwStatusSwitch(sdk2, true)
}
// 雨雪雾夜视星空光照
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
switch (stages[i].name) {
case 'rain':
rain(sdk2, true)
break
case 'snow':
snow(sdk2, true)
break
case 'fog':
fog(sdk2, true)
break
case 'czm_night_vision':
nightVision(sdk2, true)
break
}
}
skyStarry(sdk2, !sdk.viewer.scene.skyAtmosphere.show)
illumination(sdk2, sdk.viewer.shadows)
sdk.entityMap.forEach((item, key) => {
if (item.showView == 2) {
@ -162,6 +183,7 @@ async function syncData2(sdk, id, entityId) {
callback = that.callback
}
let newObject = await new that.constructor(sdk2D, options, callback)
newObject.onClick = that.onClick
newObject.onRightClick = that.onRightClick
@ -208,6 +230,9 @@ async function syncData2(sdk, id, entityId) {
newObject.setSpreadProgressByTime(that.TweenAnimate._object.distance1 / that.TweenAnimate._valuesEnd.distance1 * that.spreadTime)
}
}
if (that.type === 'Explosion') {
newObject.entity.imgIndex = that.entity.imgIndex
}
if (newObject.on && newObject.type !== 'glb') {
if (newObject.type === 'vector') {
newObject.data = that.data
@ -310,6 +335,9 @@ async function syncData2(sdk, id, entityId) {
target.setSpreadProgressByTime(obj.TweenAnimate._object.distance1 / obj.TweenAnimate._valuesEnd.distance1 * obj.spreadTime)
}
}
if (obj.type === 'Explosion') {
target.entity.imgIndex = obj.entity.imgIndex
}
if (target.on && obj.type !== 'glb') {
if (target.type === 'vector') {
target.data = obj.data
@ -434,7 +462,7 @@ function syncImageryLayerMoved(layer, newindxe, oldindex) {
sdk2D.viewer.imageryLayers.lowerToBottom(layer2d)
}
// 移到最高层
else if (newindxe === sdk3D.viewer.imageryLayers._layers.length - 1) {
else if (newindxe >= sdk3D.viewer.imageryLayers._layers.length - 1) {
sdk2D.viewer.imageryLayers.raiseToTop(layer2d)
}
else {
@ -491,18 +519,18 @@ async function syncPrimitives(primitive) {
for (let i = primitives2D.length - 1; i >= 1; i--) {
let flag = false
for (let m = primitives3D.length - 1; m >= 1; m--) {
if (primitives3D[m].id && primitives2D[m].id && (primitives3D[m].id === primitives2D[i].id)) {
if (primitives3D[m].id && primitives2D[i].id && (primitives3D[m].id === primitives2D[i].id)) {
flag = true
}
}
if (!flag) {
sdk2D.viewer.scene.primitives.remove(primitives2D[i])
}
// if (!flag) {
// sdk2D.viewer.scene.primitives.remove(primitives2D[i])
// }
}
for (let m = primitives3D.length - 1; m >= 1; m--) {
let flag = false
for (let i = primitives2D.length - 1; i >= 1; i--) {
if (primitives3D[m].id && primitives2D[m].id && (primitives3D[m].id === primitives2D[i].id)) {
if (primitives3D[m].id && primitives2D[i].id && (primitives3D[m].id === primitives2D[i].id)) {
flag = true
primitives2D[i].show = primitives3D[m].show
primitives2D[i].startColor = primitives3D[m].startColor
@ -518,9 +546,9 @@ async function syncPrimitives(primitive) {
primitives2D[i].modelMatrix = primitives3D[m].modelMatrix
}
}
if (!flag) {
sdk2D.viewer.scene.primitives.add(primitives3D[m])
}
// if (!flag) {
// sdk2D.viewer.scene.primitives.add(primitives3D[m])
// }
}
}
}

View File

@ -9,7 +9,7 @@ let state = false
let scale = '1:100万'
function SheetIndexStatusSwitch(sdk, s = false) {
if(!sdk) {
if (!sdk) {
return
}
if (!tools) {
@ -32,7 +32,7 @@ function SheetIndexStatusSwitch(sdk, s = false) {
}
let sdkD = getSdk().sdkD
if(sdkD && sdk !== sdkD) {
if (sdkD && sdk !== sdkD) {
SheetIndexStatusSwitch(sdkD, s)
}
@ -118,7 +118,6 @@ function open(sdk) {
break;
}
}
if (!gridPrimitives) {
gridPrimitives = new Cesium.PrimitiveCollection();
gridPrimitives.name = 'SheetIndexGridPrimitives';
@ -128,7 +127,6 @@ function open(sdk) {
labelCollection = new Cesium.LabelCollection();
labelCollection.name = 'SheetIndexLabelCollection';
}
let stationaryFrames = 0;
let maxRectangle = null;
gridPrimitives.postRenderEvent = () => {

View File

@ -9,6 +9,7 @@ import { MouseRightMenu, getMouseRightMenuStatus } from '../mouseRightMenu';
import { getLeftClickState, getRightClickState, getMoveState } from '../ClickCallback'
import { openLeftClick, openRightClick, openMove } from './ClickCallback'
import { SheetIndexStatusSwitch, getStatus } from '../SheetIndex'
import { rain, snow, fog, nightVision, skyStarry, illumination } from '../efflect'
let state = false
@ -304,6 +305,26 @@ async function init(sdk) {
if (getStatus()) {
SheetIndexStatusSwitch(sdkD, true)
}
// 雨雪雾夜视星空光照
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
switch (stages[i].name) {
case 'rain':
rain(sdkD, true)
break
case 'snow':
snow(sdkD, true)
break
case 'fog':
fog(sdkD, true)
break
case 'czm_night_vision':
nightVision(sdkD, true)
break
}
}
skyStarry(sdkD, !sdk.viewer.scene.skyAtmosphere.show)
illumination(sdkD, sdk.viewer.shadows)
function changeEntitySplitStatus(v) {
let value
@ -1067,7 +1088,7 @@ function syncImageryLayerMoved(layer, newindxe, oldindex) {
sdkD.viewer.imageryLayers.lowerToBottom(layerD)
}
// 移到最高层
else if (newindxe === sdkD.viewer.imageryLayers._layers.length - 1) {
else if (newindxe >= sdkD.viewer.imageryLayers._layers.length - 1) {
sdkD.viewer.imageryLayers.raiseToTop(layerD)
}
else {
@ -1112,7 +1133,7 @@ async function syncPrimitives(primitive) {
for (let i = primitives2D.length - 1; i >= 1; i--) {
let flag = false
for (let m = primitives3D.length - 1; m >= 1; m--) {
if (primitives3D[m].id && primitives2D[m].id && (primitives3D[m].id === primitives2D[i].id)) {
if (primitives3D[m].id && primitives2D[i].id && (primitives3D[m].id === primitives2D[i].id)) {
flag = true
}
}
@ -1123,7 +1144,7 @@ async function syncPrimitives(primitive) {
for (let m = primitives3D.length - 1; m >= 1; m--) {
let flag = false
for (let i = primitives2D.length - 1; i >= 1; i--) {
if (primitives3D[m].id && primitives2D[m].id && (primitives3D[m].id === primitives2D[i].id)) {
if (primitives3D[m].id && primitives2D[i].id && (primitives3D[m].id === primitives2D[i].id)) {
flag = true
primitives2D[i].show = primitives3D[m].show
primitives2D[i].startColor = primitives3D[m].startColor

View File

@ -87,7 +87,13 @@ const FS_Fog = `
/*雨天*/
function rain(sdk, status = false) {
rainStages && sdk.viewer.scene.postProcessStages.remove(rainStages)
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'rain') {
sdk.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
rainStages = new Cesium.PostProcessStage({
name: "rain",
@ -101,11 +107,46 @@ function rain(sdk, status = false) {
});
sdk.viewer.scene.postProcessStages.add(rainStages);
}
let { getSdk } = require('../SplitScreen')
let { getSdk: getSdk2 } = require('../MultiViewportMode')
let sdkD = getSdk().sdkD
if(!sdkD) {
sdkD = getSdk2().sdkD
}
if(sdkD && sdk !== sdkD) {
let stages = sdkD.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'rain') {
sdkD.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
rainStages = new Cesium.PostProcessStage({
name: "rain",
fragmentShader: FS_Rain,
uniforms: {
tiltAngle: -0.4, // 倾斜角度
rainSize: 0.3, // 雨大小
rainWidth: 40, //雨长度
rainSpeed: 100, //雨速
},
});
sdkD.viewer.scene.postProcessStages.add(rainStages);
}
}
}
// 雪
function snow(sdk, status = false) {
snowStages && sdk.viewer.scene.postProcessStages.remove(snowStages)
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'snow') {
sdk.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
snowStages = new Cesium.PostProcessStage({
name: "snow",
@ -117,11 +158,44 @@ function snow(sdk, status = false) {
});
sdk.viewer.scene.postProcessStages.add(snowStages);
}
let { getSdk } = require('../SplitScreen')
let { getSdk: getSdk2 } = require('../MultiViewportMode')
let sdkD = getSdk().sdkD
if(!sdkD) {
sdkD = getSdk2().sdkD
}
if(sdkD && sdk !== sdkD) {
let stages = sdkD.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'snow') {
sdkD.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
snowStages = new Cesium.PostProcessStage({
name: "snow",
fragmentShader: FS_Snow,
uniforms: {
snowSize: 2, // 大小
snowSpeed: 60, //速度
},
});
sdkD.viewer.scene.postProcessStages.add(snowStages);
}
}
}
// 雾天
function fog(sdk, status = false) {
fogStages && sdk.viewer.scene.postProcessStages.remove(fogStages)
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'fog') {
sdk.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
fogStages = new Cesium.PostProcessStage({
name: "fog",
@ -133,26 +207,90 @@ function fog(sdk, status = false) {
});
sdk.viewer.scene.postProcessStages.add(fogStages);
}
let { getSdk } = require('../SplitScreen')
let { getSdk: getSdk2 } = require('../MultiViewportMode')
let sdkD = getSdk().sdkD
if(!sdkD) {
sdkD = getSdk2().sdkD
}
if(sdkD && sdk !== sdkD) {
let stages = sdkD.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'fog') {
sdkD.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
fogStages = new Cesium.PostProcessStage({
name: "fog",
fragmentShader: FS_Fog,
uniforms: {
visibility: 0.2, //
fogColor: Cesium.Color.WHITE,
},
});
sdkD.viewer.scene.postProcessStages.add(fogStages);
}
}
}
// 夜视
function nightVision(sdk, status = false) {
nightVisionStages && sdk.viewer.scene.postProcessStages.remove(nightVisionStages)
let stages = sdk.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'czm_night_vision') {
sdk.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
nightVisionStages = Cesium.PostProcessStageLibrary.createNightVisionStage();
sdk.viewer.scene.postProcessStages.add(nightVisionStages);
}
let { getSdk } = require('../SplitScreen')
let { getSdk: getSdk2 } = require('../MultiViewportMode')
let sdkD = getSdk().sdkD
if(!sdkD) {
sdkD = getSdk2().sdkD
}
if(sdkD && sdk !== sdkD) {
let stages = sdkD.viewer.scene.postProcessStages._stages
for (let i = 0; i < stages.length; i++) {
if (stages[i].name && stages[i].name === 'czm_night_vision') {
sdkD.viewer.scene.postProcessStages.remove(stages[i])
break
}
}
if (status) {
nightVisionStages = Cesium.PostProcessStageLibrary.createNightVisionStage();
sdkD.viewer.scene.postProcessStages.add(nightVisionStages);
}
}
}
// 星空
function skyStarry(sdk, status = false) {
sdk.viewer.scene.skyAtmosphere.show = !status
let { getSdk } = require('../SplitScreen')
let sdkD = getSdk().sdkD
if(sdkD && sdk !== sdkD) {
sdkD.viewer.scene.skyAtmosphere.show = !status
}
}
// 光照
function illumination(sdk, status = false) {
sdk.viewer.shadows = status
sdk.viewer._shadows = status
let { getSdk } = require('../SplitScreen')
let sdkD = getSdk().sdkD
if(sdkD && sdk !== sdkD) {
sdkD.viewer.shadows = status
sdkD.viewer._shadows = status
}
}

View File

@ -156,19 +156,20 @@ function CesiumContainer(sdk, options) {
infoElm.style.color = '#fff';
infoElm.style.padding = '4px 10px';
infoElm.style['border-radius'] = '18px';
infoElm.style.display = 'flex';
if (coordinateSystem === 'EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
infoElm.innerHTML = `
<span>经度:</span><span>-</span>
<span>纬度:</span><span>-</span>
<span>海拔高度</span><span>-</span>
<div><span>经度:</span><span>-</span></div>
<div><span>纬度:</span><span>-</span></div>
<div><span>高程</span><span>-</span></div>
`
}
else {
infoElm.innerHTML = `
<span>x</span><span>-</span>
<span>y</span><span>-</span>
<span>z</span><span>-</span>
<div><span>x</span><span>-</span></div>
<div><span>y</span><span>-</span></div>
<div><span>z</span><span>-</span></div>
`
}
sdk.viewer._element.appendChild(infoElm)
@ -197,7 +198,7 @@ function CesiumContainer(sdk, options) {
// let pos = sdk.viewer.scene.clampToHeight(_cartesian)
let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
// position.alt = height
if (coordinateSystem === 'EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
// infoElm.innerHTML = `
// <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
// <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
@ -206,23 +207,23 @@ function CesiumContainer(sdk, options) {
switch (positionType || '度') {
case '度':
infoElm.innerHTML = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${Number(position.lng.toFixed(8))}° </span></div>
<div><span>纬度:</span><span>${Number(position.lat.toFixed(8))}° </span></div>
<div><span>高程</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span></div>
<div><span>高程</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span></div>
<div><span>高程</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
default:
@ -230,13 +231,17 @@ function CesiumContainer(sdk, options) {
}
}
else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
console.log(result, 'result12');
infoElm.innerHTML = `
<span>x</span><span>${Number(result.points[0].x.toFixed(6))}</span>
<span style="margin-left: 5px;">y</span><span>${Number(result.points[0].y.toFixed(6))}</span>
<span style="margin-left: 5px;">z</span><span>${Number(result.points[0].z.toFixed(6))}</span>
// let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', posiToCoordinate(coordinateSystem, position))
if (result.points.length) {
infoElm.innerHTML = `
<div><span>x</span><span>${Number(result.points[0].x.toFixed(2))}</span></div>
<div><span>y</span><span>${Number(result.points[0].y.toFixed(2))}</span></div>
<div><span>z</span><span>${Number(result.points[0].z.toFixed(2))}</span></div>
`
}
}
}
}
@ -648,7 +653,6 @@ function splitScreen2(sdk, status) {
item.entity && (item.entity.splitDirection = value)
}
}
console.log()
})
}
}
@ -770,7 +774,7 @@ function setCoordinateSystem(sdk, epsg) {
let tools = new Tools()
let proj = sdk.proj
let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
if (coordinateSystem === 'EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
// infoElm.innerHTML = `
// <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
// <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
@ -779,23 +783,23 @@ function setCoordinateSystem(sdk, epsg) {
switch (positionType || '度') {
case '度':
infoElm.innerHTML = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${Number(position.lng.toFixed(8))}° </span></div>
<div><span>纬度:</span><span>${Number(position.lat.toFixed(8))}° </span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
default:
@ -803,21 +807,72 @@ function setCoordinateSystem(sdk, epsg) {
}
}
else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
console.log(result, 'result')
// let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', posiToCoordinate(coordinateSystem, position))
infoElm.innerHTML = `
<span>x</span><span>${Number(result.points[0].x.toFixed(6))}</span>
<span style="margin-left: 5px;">y</span><span>${Number(result.points[0].y.toFixed(6))}</span>
<span style="margin-left: 5px;">z</span><span>${Number(result.points[0].z.toFixed(6))}</span>
<div><span>x</span><span>${Number(result.points[0].x.toFixed(2))}</span></div>
<div><span>y</span><span>${Number(result.points[0].y.toFixed(2))}</span></div>
<div><span>z</span><span>${Number(result.points[0].z.toFixed(2))}</span></div>
`
}
}
function posiToCoordinate(coordinateSystem, position) {
let type
switch (coordinateSystem) {
case 'EPSG:32601'://WGS84 通用横轴墨卡托投影
//带号 = ⌊(经度 + 180)/6⌋ + 1
var dh = Math.floor((position.lng + 180) / 6 + 1)
if (position.lat > 0) {//北纬
type = 32600 + dh
type = 'EPSG:' + type
} else {//南纬
type = 32700 + dh
type = 'EPSG:' + type
}
break;
case 'EPSG:4534'://2000 坐标 3 度不带代号
//N = round(经度/3)
//EPSG = N - 25 + 4534
var dh3y = Math.round(position.lng / 3)
type = dh3y - 25 + 4534
type = 'EPSG:' + type
break;
case 'EPSG:4513'://2000 坐标 3 度带代号
//N = round(经度/3)
//EPSG = N - 25 + 4513
var dh3w = Math.round(position.lng / 3)
type = dh3w - 25 + 4513
type = 'EPSG:' + type
break;
case 'EPSG:4502'://2000 坐标 6 度不带代号
let zoneNumber = Math.floor(position.lng / 6) + 31
// 中国区域6度带带号范围为13-23
if (zoneNumber < 13) zoneNumber = 13;
if (zoneNumber > 23) zoneNumber = 23;
type = (zoneNumber - 13) + 4502
type = 'EPSG:' + type
break;
case 'EPSG:4491'://2000 坐标 6 度带代号
//N = floor(longitude/6) + 31
var dh6 = Math.floor(position.lng / 6) + 31
// 中国区域6度带带号范围为13-23
if (dh6 < 13) dh6 = 13;
if (dh6 > 23) dh6 = 23;
type = (dh6 - 13) + 4491
type = 'EPSG:' + type
break;
default:
break;
}
return type
}
function getDMS() {
return positionType
}
function setDMS(sdk, type) {
if (coordinateSystem !== 'EPSG:4326') {
if (coordinateSystem !== 'EPSG:4326' && coordinateSystem !== 'EPSG:4490') {
return
}
positionType = type
@ -834,23 +889,23 @@ function setDMS(sdk, type) {
switch (type) {
case '度':
infoElm.innerHTML = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span></div>
<div><span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
<div><span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span></div>
<div><span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span></div>
<div><span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span></div>
`
break;
default:

View File

@ -67,12 +67,13 @@ import {
on as multiViewportModeOn,
off as multiViewportModeOff,
get2DView,
getSdk as getSdk2
getSdk as getSdk2,
syncData
} from '../Global/MultiViewportMode'
import { MouseCoordinate } from '../Global/MouseCoordinate'
import { MouseRightMenu } from '../Global/mouseRightMenu'
import { dialog as ContourDialog, startDraw as ContourStartDraw, reset as ContourReset } from '../Global/Contour'
import { on as SplitScreenOn, off as SplitScreenOff, setActiveId as SplitScreenSetActiveId, getSdk } from '../Global/SplitScreen'
import { dialog as ContourDialog, startDraw as ContourStartDraw, reset as ContourReset, setVal as ContourSetVal } from '../Global/Contour'
import { on as SplitScreenOn, off as SplitScreenOff, setActiveId as SplitScreenSetActiveId, getSdk, syncSplitData } from '../Global/SplitScreen'
import LocateCurrent from '../Obj/Base/LocateCurrent'
import { AnalysisClear, SectionClear } from '../Obj/Analysis/clear'
@ -313,7 +314,8 @@ if (!window.YJ) {
on: multiViewportModeOn,
off: multiViewportModeOff,
get2DView,
getSdk: getSdk2
getSdk: getSdk2,
syncData: syncData
},
MouseCoordinate,
MouseRightMenu,
@ -348,11 +350,13 @@ if (!window.YJ) {
on: SplitScreenOn,
off: SplitScreenOff,
setActiveId: SplitScreenSetActiveId,
getSdk
getSdk,
syncData: syncSplitData
},
Contour: ContourDialog,
ContourStartDraw,
ContourReset
ContourReset,
ContourSetVal
}, //测量
Measure: {
GetMeasureStatus: () => {

View File

@ -9,7 +9,7 @@ import Measure from "../index";
class MeasureAngle extends Measure {
constructor(sdk) {
super(sdk, { text: "左键开始,右键取消" });
super(sdk, { text: "左键单击确定起点位置,右键单击取消夹角测量!" });
this.cachePositions = []
this.positions = []
this.arcPositions = []
@ -113,6 +113,7 @@ class MeasureAngle extends Measure {
if (this.ids.length === 0) {
//需要创建一个线
this.line_id = this.createPolyline()
this.tip.set_text('左键单击确定角点位置,右键单击取消夹角测量!')
}
this.ids.push(this.create_point(car))
@ -122,6 +123,7 @@ class MeasureAngle extends Measure {
this.positions = this.cachePositions.concat(car)
}
if (this.ids.length === 2) {
this.tip.set_text('左键单击确定终点位置,完成夹角测量!')
this.label_id = Cesium.createGuid()
this.arc_id = Cesium.createGuid()
let p = this.cartesian3Towgs84(car, this.viewer)

View File

@ -7,7 +7,7 @@ class MeasureAzimuth extends Measure {
* @description 方位角测量
* */
constructor(sdk) {
super(sdk, { text: "左键开始,右键取消" });
super(sdk, { text: "左键单击确定控制点位置,右键单击取消方位角测量!" });
this.cachePositions = []
this.positions = []
this.arcPositions = []
@ -80,6 +80,7 @@ class MeasureAzimuth extends Measure {
//需要创建一个线
this.line_id = this.createPolyline()
}
this.tip.set_text('左键单击确定控制点位置,完成方位角测量!')
this.tip.setPosition(car, movement.position.x, movement.position.y)
if (this.cachePositions.length) {
this.positions = this.cachePositions.concat(car)

View File

@ -216,6 +216,7 @@ class MeasureDistance extends Measure {
super.start()
this.positions = []
this.cachePositions = []
this.tip.set_text('左键单击确定控制点位置,右键单击取消贴地距离测量!')
let leftEvent = async (movement, car) => {
@ -234,6 +235,7 @@ class MeasureDistance extends Measure {
let cur_point = this.cartesian3Towgs84(car, this.viewer)
let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)
this.cachePositions.push(car)
this.tip.set_text('左键单击确定控制点位置,右键单击完成贴地距离测量!')
await this.computeDisByTowPoint(pre_p, cur_point)
} else {
this.cachePositions.push(car)

View File

@ -14,7 +14,7 @@ class MeasureHeight extends Measure {
* @description 高度测量
* */
constructor(sdk) {
super(sdk, {text: "左键开始,右键取消"});
super(sdk, {text: "左键单击确定控制点位置,右键单击取消垂直高度测量!"});
}
static create_polygon(that) {
@ -120,6 +120,7 @@ class MeasureHeight extends Measure {
this.ids.push(MeasureHeight.create_polygon(this))
this.ids.push(MeasureHeight.create_point(this, cartesian))
}
this.tip.set_text('左键单击确定终点位置,完成垂直高度测量!')
count++
this.tip.setPosition(cartesian, movement.position.x, movement.position.y)
if (count === 2) {
@ -131,7 +132,7 @@ class MeasureHeight extends Measure {
this.circleRadius = this.computeDistance2([this.firstpoint, cur_point])
this.height = Number((cur_point.alt - this.firstpoint.alt).toFixed(2))
this.text = "相对高度:" + this.height + " 米"
this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米")
// this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米")
}
this.ids.push(MeasureHeight.create_point(this, cartesian, {label: {text: "半径:" + this.circleRadius + " 米"}}))
this.end()
@ -148,7 +149,7 @@ class MeasureHeight extends Measure {
this.circleRadius = this.computeDistance2([this.firstpoint, cur_point])
this.height = Number((cur_point.alt - this.firstpoint.alt).toFixed(2))
this.text = "相对高度:" + this.height + " 米"
this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米")
// this.tip.set_text("左键完成,右键取消;半径:" + this.circleRadius + " 米")
}
})
this.event.mouse_right((movement, cartesian) => {

View File

@ -16,7 +16,7 @@ class MeasureLocation extends Measure {
* @description 坐标测量
* */
constructor(sdk) {
super(sdk, {text: ""});
super(sdk, { text: "" });
this.defaultColor = "#f11515"
this.locationID = this.randomString()
this.position = new Cesium.Cartesian3()
@ -103,16 +103,16 @@ class MeasureLocation extends Measure {
let leftEvent = (movement, cartesian) => {
this.position = cartesian
let entity = this.viewer.entities.getById(this.locationID)
if(entity) {
if (entity) {
entity.show = true
}
let p = this.cartesian3Towgs84(cartesian, this.viewer)
let coordinateSystem = getCoordinateSystem()
if(coordinateSystem==='EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
this.text = `经度:${Number(p.lng.toFixed(8))}\n纬度:${Number(p.lat.toFixed(8))}\n海拔:${Number(p.alt.toFixed(2))}`
}
else {
let result = this.convert([{x: p.lng, y: p.lat, z: p.alt}], 'EPSG:4326', coordinateSystem)
let result = this.convert([{ x: p.lng, y: p.lat, z: p.alt }], 'EPSG:4326', coordinateSystem)
this.text = `x${Number(result.points[0].x.toFixed(8))}\ny${Number(result.points[0].y.toFixed(8))}\nz${Number(result.points[0].z.toFixed(2))}`
}
this.end()
@ -125,17 +125,17 @@ class MeasureLocation extends Measure {
this.event.mouse_move((movement, cartesian) => {
this.tip.setPosition(cartesian, movement.endPosition.x, movement.endPosition.y)
let entity = this.viewer.entities.getById(this.locationID)
if(entity) {
if (entity) {
entity.show = true
}
this.position = cartesian
let p = this.cartesian3Towgs84(cartesian, this.viewer)
let coordinateSystem = getCoordinateSystem()
if(coordinateSystem==='EPSG:4326') {
if (coordinateSystem === 'EPSG:4326' || coordinateSystem === 'EPSG:4490') {
this.text = `经度:${Number(p.lng.toFixed(8))}\n纬度:${Number(p.lat.toFixed(8))}\n海拔:${Number(p.alt.toFixed(2))}`
}
else {
let result = this.convert([{x: p.lng, y: p.lat, z: p.alt}], 'EPSG:4326', coordinateSystem)
let result = this.convert([{ x: p.lng, y: p.lat, z: p.alt }], 'EPSG:4326', coordinateSystem)
this.text = `x${Number(result.points[0].x.toFixed(8))}\ny${Number(result.points[0].y.toFixed(8))}\nz${Number(result.points[0].z.toFixed(2))}`
}
})

View File

@ -158,6 +158,7 @@ class MeasureProjectionDistance extends Measure {
super.start()
this.positions = []
this.cachePositions = []
this.tip.set_text('左键单击确定控制点位置,右键单击取消投影距离测量!')
let leftEvent = async (movement, car) => {
if (this.ids.length === 0) {
@ -178,6 +179,7 @@ class MeasureProjectionDistance extends Measure {
let text = "投影距离:" + cur_len + " 米"
this.ids.push(MeasureProjectionDistance.create_point(car, {label: this.getLabel(text)}, this))
this.cachePositions.push(car)
this.tip.set_text('左键单击确定控制点位置,右键单击完成投影距离测量!')
} else {
this.cachePositions.push(car)
this.ids.push(MeasureProjectionDistance.create_point(car, {show: false}, this))
@ -212,13 +214,13 @@ class MeasureProjectionDistance extends Measure {
this.event.mouse_move((movement, car) => {
this.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y)
this.positions = this.cachePositions.concat(car)
if (this.cachePositions.length) {
let cur_point = this.cartesian3Towgs84(car, this.viewer)
let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)
let cur_len = this.computeDistance2([cur_point, pre_p])
let text = "当前投影距离:" + cur_len + " 米"
this.tip.set_text(text)
}
// if (this.cachePositions.length) {
// let cur_point = this.cartesian3Towgs84(car, this.viewer)
// let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)
// let cur_len = this.computeDistance2([cur_point, pre_p])
// let text = "当前投影距离:" + cur_len + " 米"
// this.tip.set_text(text)
// }
})
this.event.mouse_right(rightEvent)
this.event.mouse_right_keyboard_ctrl((movement, car) => {

View File

@ -160,6 +160,7 @@ class MeasureSlopeDistance extends Measure {
super.start()
this.positions = []
this.cachePositions = []
this.tip.set_text('左键单击确定控制点位置,右键单击取消坡度测量!')
let leftEvent = (movement, car) => {
if (this.ids.length === 0) {
@ -179,6 +180,7 @@ class MeasureSlopeDistance extends Measure {
//计算坡度
this.computeAngle(pre_p, cur_point)
}
this.tip.set_text('左键单击确定控制点位置,右键单击完成坡度测量!')
} else {
this.cachePositions.push(car)
this.ids.push(MeasureSlopeDistance.create_point(car, {}, this))
@ -232,18 +234,18 @@ class MeasureSlopeDistance extends Measure {
}
this.tip.setPosition(car, movement.endPosition.x, movement.endPosition.y)
this.positions = this.cachePositions.concat(cartesian)
if (this.cachePositions.length) {
let cur_point = this.cartesian3Towgs84(cartesian, this.viewer)
let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)
let d1 = this.computeDistance2([pre_p, cur_point])
let d2 = Math.abs(pre_p.alt - cur_point.alt)
let d3 = Math.sqrt(d1 * d1 + d2 * d2)
let cosAlpha = d1 / d3
let acos = Math.acos(cosAlpha)
let angle = this.radiansToDegrees(acos)
let label = "坡度:" + angle.toFixed(2) + "°"
this.tip.set_text(label)
}
// if (this.cachePositions.length) {
// let cur_point = this.cartesian3Towgs84(cartesian, this.viewer)
// let pre_p = this.cartesian3Towgs84(this.cachePositions[this.cachePositions.length - 1], this.viewer)
// let d1 = this.computeDistance2([pre_p, cur_point])
// let d2 = Math.abs(pre_p.alt - cur_point.alt)
// let d3 = Math.sqrt(d1 * d1 + d2 * d2)
// let cosAlpha = d1 / d3
// let acos = Math.acos(cosAlpha)
// let angle = this.radiansToDegrees(acos)
// let label = "坡度:" + angle.toFixed(2) + "°"
// this.tip.set_text(label)
// }
})
this.event.mouse_right(rightEvent)
this.event.mouse_right_keyboard_ctrl((movement, car) => {

View File

@ -80,6 +80,7 @@ class MeasureTdArea extends Measure {
this.text = ""
this.center = new Cesium.Cartesian3()
this.cachePositions = []
this.tip.set_text('左键单击确定控制点位置,右键单击取消贴地面积测量!')
let height = 0
let text
@ -96,6 +97,10 @@ class MeasureTdArea extends Measure {
this.positions = this.cachePositions.concat({ ...car })
this.tip.setPosition({ ...car }, movement.position.x, movement.position.y)
if (this.positions.length > 3) {
this.tip.set_text('左键单击确定控制点位置,右键单击完成贴地面积测量!')
}
}
let rightEvent = (movement, car) => {
this.positions = this.cachePositions

View File

@ -14,7 +14,7 @@ class MeasureTriangle extends Measure {
* @description 三角测量
* */
constructor(sdk) {
super(sdk);
super(sdk, {text: "左键单击确定控制点位置,右键单击取消三角测量!"});
}
cal_center(positions) {
@ -170,6 +170,7 @@ class MeasureTriangle extends Measure {
let leftEvent = (movement, car) => {
xiebian_line_positions.push(car)
this.tip.set_text('左键单击确定终点位置,完成三角测量!')
if (this.ids.length === 0) {//创建三角形
first_point = this.cartesian3Towgs84(car, this.viewer)
this.createPolyline(shuiping_line_id,)

View File

@ -85,6 +85,7 @@ class MeasureTyArea extends Measure {
this.ids = []
this.positions = []
this.text = ""
this.tip.set_text('左键单击确定控制点位置,右键单击取消投影面积测量!')
this.center = new Cesium.Cartesian3()
this.cachePositions = []
let height = 0
@ -117,6 +118,9 @@ class MeasureTyArea extends Measure {
lastcneter = this.center
this.text = "投影面积:" + area + " ㎡"
}
if(this.positions.length > 3) {
this.tip.set_text('左键单击确定控制点位置,右键单击完成投影面积测量!')
}
}
this.event.mouse_left(leftEvent)
this.event.mouse_move((movement, car) => {

View File

@ -38,19 +38,14 @@ class CircleViewShed extends Tools {
this.tools = new Tools(sdk)
YJ.Analysis.AnalysesResults.push(this)
// CircleViewShed.edit(this)
let terrainAvailability = this.viewer.terrainProvider.availability;
if (!terrainAvailability) {
this.tools.message({ type: 'warning', text: '未加载地形数据!' })
// window.ELEMENT && window.ELEMENT.Message({
// message: '未加载地形数据!',
// type: 'warning',
// duration: 1500
// });
return
}
// CircleViewShed.create(this)
}
draw() {
let terrainAvailability = this.viewer.terrainProvider.availability;
if (!terrainAvailability) {
return '未加载地形数据!'
}
CircleViewShed.create(this)
}
@ -115,13 +110,7 @@ class CircleViewShed extends Tools {
static create(that) {
let terrainAvailability = that.viewer.terrainProvider.availability;
if (!terrainAvailability) {
that.tools.message({ type: 'warning', text: '未加载地形数据!' })
// window.ELEMENT && window.ELEMENT.Message({
// message: '未加载地形数据!',
// type: 'warning',
// duration: 1500
// });
return
return '未加载地形数据!'
}
let count = 0
if (!YJ.Measure.GetMeasureStatus()) {
@ -129,10 +118,20 @@ class CircleViewShed extends Tools {
that._DialogObject.close()
that._DialogObject = null
}
let Draw = new YJ.Draw.DrawCircle(that.sdk)
let Draw = new YJ.Draw.DrawCircle(that.sdk, {
tipText: '左键单击确定中心点位置右键单击取消区域绘制CTRL+右键单击撤销'
})
Draw.start(async (a, options) => {
// that.center = options.center
if (!options) {
switch (a) {
case 0:
Draw.tipText = '左键单击确定中心点位置右键单击取消区域绘制CTRL+右键单击撤销'
break;
case 1:
Draw.tipText = '左键单击确定圆形视域半径,完成圆形视域分析!'
break;
}
return
}
that.radius = options.radius
@ -152,47 +151,47 @@ class CircleViewShed extends Tools {
}
}
static async edit(that) {
if (that._DialogObject && that._DialogObject.close) {
that._DialogObject.close()
that._DialogObject = null
}
that._DialogObject = await new Dialog(that.sdk.viewer._container, {
title: '圆形视域分析',
left: '180px',
top: '100px',
closeCallBack: () => {
that.Dialog.closeCallBack && that.Dialog.closeCallBack()
YJ.Measure.SetMeasureStatus(false)
}
})
await that._DialogObject.init()
that._DialogObject._element.body.className =
that._DialogObject._element.body.className + ' circle-view-shed'
let contentElm = document.createElement('div')
contentElm.innerHTML = html()
that._DialogObject.contentAppChild(contentElm)
// static async edit(that) {
// if (that._DialogObject && that._DialogObject.close) {
// that._DialogObject.close()
// that._DialogObject = null
// }
// that._DialogObject = await new Dialog(that.sdk.viewer._container, {
// title: '圆形视域分析',
// left: '180px',
// top: '100px',
// closeCallBack: () => {
// that.Dialog.closeCallBack && that.Dialog.closeCallBack()
// YJ.Measure.SetMeasureStatus(false)
// }
// })
// await that._DialogObject.init()
// that._DialogObject._element.body.className =
// that._DialogObject._element.body.className + ' circle-view-shed'
// let contentElm = document.createElement('div')
// contentElm.innerHTML = html()
// that._DialogObject.contentAppChild(contentElm)
let drawElm = document.createElement('button')
drawElm.innerHTML = '绘制'
drawElm.addEventListener('click', () => {
let terrainAvailability = that.viewer.terrainProvider.availability;
if (!terrainAvailability) {
window.ELEMENT && window.ELEMENT.Message({
message: '未加载地形数据!',
type: 'warning',
duration: 1500
});
return
}
CircleViewShed.create(that)
})
that._DialogObject.footAppChild(drawElm)
// let drawElm = document.createElement('button')
// drawElm.innerHTML = '绘制'
// drawElm.addEventListener('click', () => {
// let terrainAvailability = that.viewer.terrainProvider.availability;
// if (!terrainAvailability) {
// window.ELEMENT && window.ELEMENT.Message({
// message: '未加载地形数据!',
// type: 'warning',
// duration: 1500
// });
// return
// }
// CircleViewShed.create(that)
// })
// that._DialogObject.footAppChild(drawElm)
let all_elm = contentElm.getElementsByTagName('*')
that._EventBinding.on(that, all_elm)
that._elms = that._EventBinding.element
}
// let all_elm = contentElm.getElementsByTagName('*')
// that._EventBinding.on(that, all_elm)
// that._elms = that._EventBinding.element
// }
analyse() {
// this.destroy()

View File

@ -12,7 +12,7 @@ class ContourAnalysis {
let terrainAvailability = this.viewer.terrainProvider.availability;
if (!terrainAvailability) {
this.error = '未加载地形数据!'
this.tools.message({ type: 'warning', text: this.error })
// this.tools.message({ type: 'warning', text: this.error })
return
}
this.positions = options.positions

View File

@ -28,7 +28,7 @@ class CutFillAnalysis {
}
this.entities = []
this.tools = new Tools(this.sdk)
this.Draw = new DrawPolygon(this.sdk)
this.Draw = new DrawPolygon(this.sdk, { tipText: '左键单击确定控制点位置,右键单击取消范围绘制! CTRL+右键单击撤销上一个控制点' })
YJ.Analysis.AnalysesResults.push(this)
// CutFillAnalysis.EditBox(this)
}
@ -37,11 +37,12 @@ class CutFillAnalysis {
this.clean()
this.Draw.start((a, positions) => {
if (!positions || positions.length < 3) {
let _error = '最少需要三个坐标!'
this.tools.message({
text: _error,
type: 'warning',
});
if (a >= 3) {
this.Draw.tipText = '左键单击确定控制点位置,右键单击结束范围绘制! CTRL+右键单击撤销'
}
else {
this.Draw.tipText = '左键单击确定控制点位置,右键单击取消范围绘制! CTRL+右键单击撤销上一个控制点'
}
return
}
let fromDegreesArray = []

View File

@ -26,7 +26,7 @@ class Profile extends Draw {
console.warn('上一次测量未结束')
} else {
YJ.Measure.SetMeasureStatus(true)
that.tip = new MouseTip('左键确定,右键取消', that.sdk)
that.tip = new MouseTip('左键点击确定起点位置,右键点击取消绘制!', that.sdk)
that.event = new MouseEvent(that.sdk)
that.positions = []
that.points_ids = [] //存放左键点击时临时添加的point的id
@ -35,6 +35,7 @@ class Profile extends Draw {
let car = undefined
that.event.mouse_left(async (movement, cartesian) => {
try {
that.tip.set_text('左键点击确定终点位置,右键点击取消绘制!')
if (!that.entityHasCreated) {
Profile.create_polyline(that)
}

View File

@ -10,20 +10,18 @@ class SlopeAspect extends Tools {
constructor(sdk) {
super(sdk)
this.viewer = sdk.viewer;
let terrainAvailability = this.viewer.terrainProvider.availability;
if (!terrainAvailability) {
this.error = '未加载地形数据!'
return
}
this.event
this.result = []; //存储创建的坡度分析结果primitive集合
this.handler = undefined;
this.toolTip = "";
this.tools = new Tools(sdk)
let terrainAvailability = this.viewer.terrainProvider.availability;
if (!terrainAvailability) {
this.error = '未加载地形数据!'
this.tools.message({ type: 'warning', text: this.error })
return
}
YJ.Analysis.AnalysesResults.push(this)
this.Draw = new DrawPolygon(this.sdk)
this.Draw = new DrawPolygon(this.sdk, { tipText: '左键单击确定控制点位置,右键单击取消坡度分析! CTRL+右键单击撤销上一个控制点' })
// this.createNew4Distance()
this.createNew4Num(50)
}
@ -36,8 +34,13 @@ class SlopeAspect extends Tools {
const $this = this;
const viewer = this.viewer;
this.Draw.start((e, positions) => {
if (!positions || positions.length <= 2) {
this.tools.message({ type: 'warning', text: '至少拥有三个坐标位置!' })
if (!positions || positions.length < 3) {
if (e >= 3) {
this.Draw.tipText = '左键单击确定控制点位置,右键单击结束坡度分析! CTRL+右键单击撤销'
}
else {
this.Draw.tipText = '左键单击确定控制点位置,右键单击取消坡度分析! CTRL+右键单击撤销上一个控制点'
}
return
}
let boundary = [];
@ -66,8 +69,13 @@ class SlopeAspect extends Tools {
createNew4Num(n) {
let num = n
this.Draw.start((e, positions) => {
if (!positions || positions.length <= 2) {
this.tools.message({ type: 'warning', text: '至少拥有三个坐标位置!' })
if (!positions || positions.length < 3) {
if (e >= 3) {
this.Draw.tipText = '左键单击确定控制点位置,右键单击结束坡度分析! CTRL+右键单击撤销'
}
else {
this.Draw.tipText = '左键单击确定控制点位置,右键单击取消坡度分析! CTRL+右键单击撤销上一个控制点'
}
return
}
let boundary = [];

View File

@ -9,7 +9,7 @@ class Submerge extends Tools {
* @param sdk
* @description 淹没效果
* */
constructor(sdk, options = {}, _Dialog = {}) {
constructor(sdk, options = {}, _Dialog = {}, callback) {
super(sdk, options);
this.sdk = sdk
this.options = {}
@ -21,37 +21,30 @@ class Submerge extends Tools {
this.currentWaterLaver
this.color = '#00d9ff66'
this.Dialog = _Dialog
this.Draw = new DrawPolygon(this.sdk)
this.Draw = new DrawPolygon(this.sdk, { tipText: '左键单击确定控制点位置,右键单击取消范围绘制! CTRL+右键单击撤销上一个控制点' })
this.positions
this.status = true
this.area = 0
this._elms = {};
this.tools = new Tools(this.sdk)
this.callback = callback
YJ.Analysis.AnalysesResults.push(this)
// Submerge.EditBox(this)
// Submerge.create(this)
}
static create(that) {
static create(that, func) {
that.Draw.start((a, positions) => {
if (!positions || positions.length < 3) {
let _error = '至少需要三个坐标!'
that.tools.message({
text: _error,
type: 'warning',
});
if (a >= 3) {
that.Draw.tipText = '左键单击确定控制点位置,右键单击结束范围绘制! CTRL+右键单击撤销'
}
else {
that.Draw.tipText = '左键单击确定控制点位置,右键单击取消范围绘制! CTRL+右键单击撤销上一个控制点'
}
return
}
that.destroy()
if (!positions || positions.length == 0) {
that.positions = []
that._positions = []
that.options.minWaterLevel = 0
that.options.maxWaterLevel = 0
that.options.waterVolume = 0
that.area = 0
return
}
let fromDegreesArray = []
that.positions = positions
that._positions = positions
@ -99,7 +92,7 @@ class Submerge extends Tools {
that.waterLevel = that.options.maxWaterLevel - that.options.minWaterLevel
that.options.waterVolume = Number((that.waterLevel * that.area).toFixed(4))
func && func(that.options.waterVolume)
that.clickCallBack(that.area, that._positions)
// let contentElm = that._DialogObject._element.body
// let pauseBtn = contentElm.getElementsByClassName('pause')[0];
@ -110,8 +103,8 @@ class Submerge extends Tools {
// Submerge.EditBox(that)
})
}
draw() {
Submerge.create(this)
draw(func) {
Submerge.create(this, func)
}
static async EditBox(that) {
@ -276,9 +269,12 @@ class Submerge extends Tools {
value = 0
}
that.options.waterVolume = Math.floor(value * 10000) / 10000;
if (that.area) {
that.waterLevel = Number((that.options.waterVolume / that.area).toFixed(4))
that.options.maxWaterLevel = that.options.minWaterLevel + that.waterLevel
console.log(that.options.minWaterLevel, that.options.minWaterLevel, 'klklklkl')
that.options.maxWaterLevel = Math.floor((that.options.minWaterLevel) * 10000) / 10000 + Math.floor((that.options.minWaterLevel) * 10000) / 10000
}
}
});
@ -338,7 +334,6 @@ class Submerge extends Tools {
}
set onEnd(val) {
if (val && typeof val !== 'function') {
console.error('val:', val, '不是一个function')
} else {
this.clickCallBack = val
}
@ -384,13 +379,21 @@ class Submerge extends Tools {
move() {
if (this.TweenAnimate) {
TWEEN.remove(this.TweenAnimate)
// if (this.TweenAnimate) {
// TWEEN.remove(this.TweenAnimate)
// }
let that = this
if (!this.TweenAnimate && this.options.risingSpeed) {
let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
this.currentWaterLaver = r.waterLevel
}).onComplete(() => {
that.callback()
// 在这里执行动画结束后的逻辑
}).start()
} else if (!this.options.risingSpeed) {
that.callback()
}
let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
this.currentWaterLaver = r.waterLevel
}).start()
// let contentElm = this._DialogObject._element.body
// let pauseBtn = contentElm.getElementsByClassName('pause')[0];
// let startBtn = contentElm.getElementsByClassName('start')[0];
@ -401,6 +404,7 @@ class Submerge extends Tools {
restart() {
this.currentWaterLaver = this.options.minWaterLevel
let isPaused = false
let that = this
if (this.TweenAnimate) {
isPaused = this.TweenAnimate._isPaused
TWEEN.remove(this.TweenAnimate)
@ -408,10 +412,13 @@ class Submerge extends Tools {
let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
this.currentWaterLaver = r.waterLevel
}).onComplete(() => {
that.callback()
// 在这里执行动画结束后的逻辑
}).start()
if (isPaused) {
this.pause()
}
// if (isPaused) {
this.pause()
// }
}
start() {

View File

@ -154,7 +154,9 @@ class TerrainExcavation extends Tools {
startCreate() {
this.Draw.start((e, positions) => {
if (!positions || positions.length <= 2) {
this.tools.message({ type: 'warning', text: '至少拥有三个坐标位置!' })
if(!e && e!=0) {
this.tools.message({ type: 'warning', text: '至少拥有三个坐标位置!' })
}
return
}
if (!this.isConvex(positions)) {

View File

@ -182,7 +182,7 @@ class ViewShedStage extends Tools {
return pitch
}
static create(that) {
static create(that, callBack) {
that.destroy()
let count = 0;
if (!YJ.Measure.GetMeasureStatus()) {
@ -201,6 +201,7 @@ class ViewShedStage extends Tools {
that.ids.push(ViewShedStage.create_point(that, cartesian))
that.end()
that.update()
callBack(true)
}
})
that.event.mouse_move((movement, cartesian) => {
@ -212,6 +213,7 @@ class ViewShedStage extends Tools {
})
that.ids = []
that.end()
callBack(false)
})
that.event.gesture_pinck_start((movement, cartesian) => {
let startTime = new Date()
@ -223,6 +225,7 @@ class ViewShedStage extends Tools {
})
that.ids = []
that.end()
callBack(false)
}
})
})
@ -232,6 +235,7 @@ class ViewShedStage extends Tools {
text: '上一次测量未结束',
type: 'warning',
});
callBack(false)
}
@ -247,8 +251,8 @@ class ViewShedStage extends Tools {
this.tip = null
this.event = null
}
draw() {
ViewShedStage.create(this)
draw(callBack) {
ViewShedStage.create(this, callBack)
}
static create_point(that, cartesian) {

View File

@ -1179,6 +1179,9 @@ class AssembleObject extends Base {
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.tip && this.tip.destroy()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -1397,7 +1400,7 @@ class AssembleObject extends Base {
this.previous = null
this.positionEditing = false
if(this._positionEditingCallback) {
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
@ -1510,7 +1513,7 @@ class AssembleObject extends Base {
return this._areaChangeCallBack
}
set areaChangeCallBack (cd) {
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
@ -1644,18 +1647,20 @@ class AssembleObject extends Base {
let polygon = turf.polygon(points)
let centroid = turf.pointOnFeature(polygon)
let objectsToExclude = [...this.sdk.viewer.entities.values]
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
setTimeout(() => {
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
}, 200);
setTimeout(() => {

View File

@ -1416,7 +1416,7 @@ class AttackArrowObject extends Base {
}
this.positionEditing = false
if(this._positionEditingCallback) {
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
@ -1530,7 +1530,7 @@ class AttackArrowObject extends Base {
return this._areaChangeCallBack
}
set areaChangeCallBack (cd) {
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
@ -1757,18 +1757,20 @@ class AttackArrowObject extends Base {
let polygon = turf.polygon(points)
let centroid = turf.pointOnFeature(polygon)
let objectsToExclude = [...this.sdk.viewer.entities.values]
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
setTimeout(() => {
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
}, 200);
setTimeout(() => {
this.event.mouse_left(leftEvent)

View File

@ -28,8 +28,8 @@ class ArcgisLayer extends BaseLayer {
url
});
}
if (this.options.hasOwnProperty("layer_index")) {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider, this.options.layer_index)
if (this.options.hasOwnProperty("layerIndex")) {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider, this.options.layerIndex)
} else {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(imageryProvider,)
}
@ -53,7 +53,7 @@ class ArcgisLayer extends BaseLayer {
class ArcgisWXImagery extends ArcgisLayer {
constructor(sdk, options) {
super(sdk, options);
this.createArcGis("https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer")
this.createArcGis("https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer")
}
}
@ -67,7 +67,7 @@ class ArcgisBLUEImagery extends ArcgisLayer {
class ArcgisLWImagery extends ArcgisLayer {
constructor(sdk, options) {
super(sdk, options);
this.createArcGis("https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer")
this.createArcGis("https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer")
}
}

View File

@ -25,8 +25,8 @@ class GdImagery extends BaseLayer {
tilingScheme: this.amapMercatorTilingScheme()
})
if (this.options.hasOwnProperty("layer_index")) {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer, this.options.layer_index)
if (this.options.hasOwnProperty("layerIndex")) {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer, this.options.layerIndex)
} else {
this.entity = this.sdk.viewer.imageryLayers.addImageryProvider(gdLayer,)
}

View File

@ -16,17 +16,13 @@ class Layer extends BaseLayer {
super(sdk, options)
this.object = {}
this.options.host = this.options.host || getHost()
this.on()
this.loadLayer(this.options)
}
get type() {
return "layer"
}
on() {
return this.loadLayer(this.options)
}
async loadLayer(data) {
this.object = { ...data }
let url = ""
@ -105,9 +101,9 @@ class Layer extends BaseLayer {
if (!this.sdk || !this.sdk.viewer) {
return
}
if (this.options.hasOwnProperty("layer_index")) {
if (this.options.hasOwnProperty("layerIndex")) {
this.entity =
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layer_index)
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layerIndex)
} else {
this.entity =
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer,)

View File

@ -30,9 +30,9 @@ class Layer3rdparty extends BaseLayer {
let layer
layer = new Cesium.UrlTemplateImageryProvider(params)
if (this.options.hasOwnProperty("layer_index")) {
if (this.options.hasOwnProperty("layerIndex")) {
this.entity =
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layer_index)
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer, this.options.layerIndex)
} else {
this.entity =
this.sdk.viewer.scene.imageryLayers.addImageryProvider(layer,)

View File

@ -73,7 +73,7 @@ class BaseLayer extends BaseSource {
this.sdk.viewer.imageryLayers.raiseToTop(layer)
}
}
this.options.layer_index = this.entity._layerIndex
this.options.layerIndex = this.entity._layerIndex
return this.entity._layerIndex
}
@ -84,7 +84,7 @@ class BaseLayer extends BaseSource {
* */
layerLower() {
this.sdk.viewer.imageryLayers.lower(this.entity)
this.options.layer_index = this.entity._layerIndex
this.options.layerIndex = this.entity._layerIndex
return this.entity._layerIndex
}
@ -101,7 +101,7 @@ class BaseLayer extends BaseSource {
this.sdk.viewer.imageryLayers.raiseToTop(layer)
}
}
this.options.layer_index = this.entity._layerIndex
this.options.layerIndex = this.entity._layerIndex
return this.entity._layerIndex
}
@ -112,7 +112,7 @@ class BaseLayer extends BaseSource {
* */
layerToBottom() {
this.sdk.viewer.imageryLayers.lowerToBottom(this.entity)
this.options.layer_index = this.entity._layerIndex
this.options.layerIndex = this.entity._layerIndex
return this.entity._layerIndex
}

View File

@ -466,7 +466,6 @@ class Model extends BaseModel {
return this.options.name
}
set name(v) {
console.log(v, 'vvvvvvvvv')
this.options.name = v
this.options.label.text = v
this.label && (this.label.text = v)
@ -506,14 +505,14 @@ class Model extends BaseModel {
set lng(v) {
this.options.position = {
lng: v,
lng: Number(Number(v).toFixed(8)),
lat: this.options.position.lat,
alt: this.options.position.alt
}
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this.label && (this.label.position = [this.options.position.lng, this.options.position.lat, this.options.position.alt])
this._elms.lng && this._elms.lng.forEach((item) => {
item.value = v
item.value = this.options.position.lng
})
}
@ -524,13 +523,13 @@ class Model extends BaseModel {
set lat(v) {
this.options.position = {
lng: this.options.position.lng,
lat: v,
lat: Number(Number(v).toFixed(8)),
alt: this.options.position.alt
}
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this.label && (this.label.position = [this.options.position.lng, this.options.position.lat, this.options.position.alt])
this._elms.lat && this._elms.lat.forEach((item) => {
item.value = v
item.value = this.options.position.lat
})
}
@ -542,12 +541,12 @@ class Model extends BaseModel {
this.options.position = {
lng: this.options.position.lng,
lat: this.options.position.lat,
alt: v
alt: Number(Number(v).toFixed(2))
}
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this.label && (this.label.position = [Number(this.options.position.lng), Number(this.options.position.lat), Number(this.options.position.alt)])
this._elms.alt && this._elms.alt.forEach((item) => {
item.value = v
item.value = this.options.position.alt
})
}
@ -593,10 +592,10 @@ class Model extends BaseModel {
}
set rotateX(v) {
this.options.rotate.x = v
this.options.rotate.x = Number(Number(v).toFixed(2))
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this._elms.rotateX && this._elms.rotateX.forEach((item) => {
item.value = v
item.value = this.options.rotate.x
})
}
@ -605,10 +604,10 @@ class Model extends BaseModel {
}
set rotateY(v) {
this.options.rotate.y = v
this.options.rotate.y = Number(Number(v).toFixed(2))
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this._elms.rotateY && this._elms.rotateY.forEach((item) => {
item.value = v
item.value = this.options.rotate.y
})
}
@ -617,10 +616,10 @@ class Model extends BaseModel {
}
set rotateZ(v) {
this.options.rotate.z = v
this.options.rotate.z = Number(Number(v).toFixed(2))
this.updateModel(this.options.position.lng, this.options.position.lat, this.options.position.alt, this.options.rotate.x, this.options.rotate.y, this.options.rotate.z, this.options.scale)
this._elms.rotateZ && this._elms.rotateZ.forEach((item) => {
item.value = v
item.value = this.options.rotate.z
})
}
@ -1715,6 +1714,8 @@ class Model extends BaseModel {
this.attributeISC = this.options.attribute.ISC.content
this.cameraSelect && this.cameraSelect()
this.goodsSelect && this.goodsSelect()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
} catch (error) {
}

View File

@ -127,7 +127,8 @@ class BaseTileset extends BaseSource {
progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊
dynamicScreenSpaceErrorDensity: 0.1, // 数值加大,能让周边加载变快
dynamicScreenSpaceErrorFactor: 1,
dynamicScreenSpaceError: true // 有了这个后,会在真正的全屏加载完之后才清晰化房屋
dynamicScreenSpaceError: true, // 有了这个后,会在真正的全屏加载完之后才清晰化房屋
backFaceCulling: false, // 开启后,会剔除掉模型的背面,提升性能体验
}
let tileset
if (Number(Cesium.VERSION.split('.')[1]) >= 107) {
@ -488,14 +489,6 @@ class BaseTileset extends BaseSource {
* */
set rotationEditing(status) {
if (!this.tileset.root.transform) {
if (window.ELEMENT) {
window.ELEMENT.Message.closeAll();
window.ELEMENT.Message({
message: '该模型不支持移动和旋转!',
type: 'warning',
duration: 1500
});
}
console.warn('该模型不支持移动和旋转!')
return
}
@ -534,14 +527,6 @@ class BaseTileset extends BaseSource {
return
}
if (!this.tileset.root.transform) {
if (window.ELEMENT) {
window.ELEMENT.Message.closeAll();
window.ELEMENT.Message({
message: '该模型不支持移动和旋转!',
type: 'warning',
duration: 1500
});
}
console.warn('该模型不支持移动和旋转!')
return
}

View File

@ -50,7 +50,7 @@ class BatchModel extends Base {
let tools = new Tools(sdk)
// BatchModel.computeDis(this)
// if (this.options.positions.length > 0 || this.options.positions.lng) {
if (this.options.spacing < 0 || options.spacing * 1 === 0) {
if (options.type != '点' && (this.options.spacing < 0 || options.spacing * 1 === 0)) {
tools.message({ type: 'warning', text: '请输入正确的间距!' })
return;
}
@ -72,6 +72,7 @@ class BatchModel extends Base {
break;
}
Draw && Draw.start((a, positions) => {
if (!positions) { return }
this.options.positions = positions;
//判断范围是否过大
if (options.type == '面') {
@ -156,8 +157,8 @@ class BatchModel extends Base {
})
})
} else if (that.options.type == '点') {
let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat })
posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: height }]
// let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat })
posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: that.options.positions.alt }]
// posiArr = [that.options.positions]
that.pointArr = posiArr
}

View File

@ -166,6 +166,8 @@ class BillboardObject extends Base {
this.options.attribute.link.content || []
this.options.attribute.vr = this.options.attribute.vr || {}
this.options.attribute.vr.content = this.options.attribute.vr.content || []
this.options.attribute.rtmp = this.options.attribute.rtmp || {}
this.options.attribute.rtmp.content = this.options.attribute.rtmp.content || []
this.options.attribute.camera = this.options.attribute.camera || {}
this.options.attribute.camera.content =
this.options.attribute.camera.content || []
@ -245,6 +247,12 @@ class BillboardObject extends Base {
let font = getFontFamily(that.labelFontFamily) || 'Helvetica'
let url = that.replaceHost(that.options.billboard.image, that.options.host)
that._frameImages = []
if(url) {
that.options.billboard.image = url
}
else {
that.options.billboard.image = that.getSourceRootPath() + '/img/A-ablu-blank.png'
}
if (url && url.endsWith('gif')) {
isGlf = true
switch (that.options.heightMode) {
@ -480,6 +488,11 @@ class BillboardObject extends Base {
// value: '传感器',
// key: 'sensor'
// },
{
name: 'rtmp',
value: 'rtmp',
key: 'rtmp'
},
{
name: '全景图',
value: '全景图',
@ -591,7 +604,12 @@ class BillboardObject extends Base {
return this.options.position.lng
}
set lng(v) {
this.options.position.lng = Number(Number(v).toFixed(8))
if(v===null || v===undefined || v==='') {
this.options.position.lng = v
}
else {
this.options.position.lng = Number(Number(v).toFixed(8))
}
// this.scan && (this.scan.lng = v)
// this.diffuse && (this.diffuse.lng = v)
this.renewPoint()
@ -607,7 +625,12 @@ class BillboardObject extends Base {
return this.options.position.lat
}
set lat(v) {
this.options.position.lat = Number(Number(v).toFixed(8))
if(v===null || v===undefined || v==='') {
this.options.position.lat = v
}
else {
this.options.position.lat = Number(Number(v).toFixed(8))
}
// this.scan && (this.scan.lat = v)
// this.diffuse && (this.diffuse.lat = v)
this.renewPoint()
@ -623,7 +646,12 @@ class BillboardObject extends Base {
return this.options.position.alt
}
set alt(v) {
this.options.position.alt = Number(Number(v).toFixed(2))
if(v===null || v===undefined || v==='') {
this.options.position.alt = v
}
else {
this.options.position.alt = Number(Number(v).toFixed(2))
}
// this.scan && (this.scan.alt = v)
// this.diffuse && (this.diffuse.alt = v)
this.renewPoint()
@ -1420,6 +1448,170 @@ class BillboardObject extends Base {
}
}
get attributeRtmp() {
return this.options.attribute.rtmp.content
}
set attributeRtmp(v) {
this.options.attribute.rtmp.content = v
if (
!this._DialogObject ||
!this._DialogObject._element ||
!this._DialogObject._element.content ||
this._DialogObject._element.content.getElementsByClassName(
'attribute-content-rtmp'
).length == 0
) {
return
}
let table = this._DialogObject._element.content
.getElementsByClassName('attribute-content-rtmp')[1]
.getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (this.options.attribute.rtmp.content.length > 0) {
table.getElementsByClassName('table-empty')[0].style.display = 'none'
} else {
table.getElementsByClassName('table-empty')[0].style.display = 'flex'
}
for (let i = 0; i < this.options.attribute.rtmp.content.length; i++) {
let tr =
`
<div class="tr">
<div class="td">` +
this.options.attribute.rtmp.content[i].name +
`</div>
<div class="td">` +
this.options.attribute.rtmp.content[i].url +
`</div>
<div class="td">
<button @click="rtmpEdit">编辑</button>
<button @click="rtmpDelete">删除</button>
</div>
</div>`
let trElm = document.createRange().createContextualFragment(tr)
tableContent.appendChild(trElm)
}
let item = tableContent.getElementsByClassName('tr')
let fun = {
rtmpEdit: async index => {
this.attributeRtmp = await this.options.attribute.rtmp.content
let table = this._DialogObject._element.content
.getElementsByClassName('attribute-content-rtmp')[1]
.getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
let item = tableContent.getElementsByClassName('tr')
for (let i = 0; i < item.length; i++) {
if (index === i) {
let height = item[i].offsetHeight
let html = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
item[i].innerHTML = html
let textareaElm = item[i].getElementsByClassName('link-edit')[0]
textareaElm.style.height = height - 10 + 'px'
let td = item[i].getElementsByClassName('td')
td[0].getElementsByClassName(
'input'
)[0].value = this.options.attribute.rtmp.content[index].name
td[1].getElementsByClassName(
'input'
)[0].value = this.options.attribute.rtmp.content[index].url
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', e => {
if (typeof fun[m.value] === 'function') {
fun[m.value](
{
name: td[0].getElementsByClassName('input')[0].value,
url: td[1].getElementsByClassName('input')[0].value
},
i
)
}
})
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
break
}
}
},
rtmpDelete: i => {
this.options.attribute.rtmp.content.splice(i, 1)
this.attributeRtmp = this.options.attribute.rtmp.content
},
confirmEdit: (value, i) => {
let name = value.name && value.name.replace(/\s/g, '')
let url = value.url && value.url.replace(/\s/g, '')
if (name && url) {
this.options.attribute.rtmp.content[i] = value
} else {
window.ELEMENT &&
window.ELEMENT.Message({
message: '名称或链接不能为空!',
type: 'warning',
duration: 1500
})
}
this.attributeRtmp = this.options.attribute.rtmp.content
},
cancelEdit: () => {
this.attributeRtmp = this.options.attribute.rtmp.content
},
fileSelect: (value, i) => {
let fileElm = item[i].getElementsByClassName('file-select')[0]
fileElm.click()
fileElm.removeEventListener('change', fileSelect)
fileElm.addEventListener('change', fileSelect)
}
}
let fileSelect = event => {
if (event.target.value) {
let td = item[
event.target.getAttribute('index')
].getElementsByClassName('td')
td[1].getElementsByClassName('input')[0].value = event.target.value
event.target.value = null
}
}
for (let i = 0; i < item.length; i++) {
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', e => {
if (typeof fun[m.value] === 'function') {
fun[m.value](i)
}
})
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
}
}
get attributeGoods() {
return this.options.attribute.goods.content
}
@ -2135,16 +2327,19 @@ class BillboardObject extends Base {
this.labelShow = this.originalOptions.label.show
this.labelFontSize = this.originalOptions.label.fontSize
this.labelColor = this.originalOptions.label.color
this.lng = this.originalOptions.position.lng
this.lat = this.originalOptions.position.lat
this.alt = this.originalOptions.position.alt
this.lng = this.originalOptions.position.lng || 0
this.lat = this.originalOptions.position.lat || 0
this.alt = this.originalOptions.position.alt || 0
this.attributeLink = this.options.attribute.link.content
this.attributeVr = this.options.attribute.vr.content
this.attributeRtmp = this.options.attribute.rtmp.content
this.attributeCamera = this.options.attribute.camera.content
this.attributeGoods = this.options.attribute.goods.content
this.attributeISC = this.options.attribute.isc.content
this.cameraSelect && this.cameraSelect()
this.goodsSelect && this.goodsSelect()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -2198,7 +2393,7 @@ class BillboardObject extends Base {
10000000000000
)
let objectsToExclude = []
let objectsToExclude = [this.entity]
for (let [key, value] of this.sdk.entityMap) {
if (value.type === 'RadarScanStereoscopic' && value.entity) {
objectsToExclude.push(value.entity)

View File

@ -175,6 +175,8 @@ class CircleDiffuse extends Base {
zIndex: zIndex
}
})
syncData(that.sdk, that.options.id)
syncSplitData(that.sdk, that.options.id)
}
else {
that.entity = that.sdk.viewer.entities.add({
@ -299,8 +301,9 @@ class CircleDiffuse extends Base {
}
this.event.mouse_move((movement, cartesian) => {
let positions = this.cartesian3Towgs84(cartesian, this.sdk.viewer)
this.options.lng = positions.lng
this.options.lat = positions.lat
this.lng = positions.lng
this.lat = positions.lat
this.tip.setPosition(
cartesian,
movement.endPosition.x,
@ -309,8 +312,9 @@ class CircleDiffuse extends Base {
})
this.event.mouse_left((movement, cartesian) => {
let positions = this.cartesian3Towgs84(cartesian, this.sdk.viewer)
this.options.lng = positions.lng
this.options.lat = positions.lat
this.lng = positions.lng
this.lat = positions.lat
this.event.mouse_move(() => { })
this.event.mouse_left(() => { })
this.event.mouse_right(() => { })
@ -337,8 +341,9 @@ class CircleDiffuse extends Base {
}
else {
let positions = this.cartesian3Towgs84(cartesian, this.sdk.viewer)
this.options.lng = positions.lng
this.options.lat = positions.lat
this.lng = positions.lng
this.lat = positions.lat
this.event.mouse_move(() => { })
this.event.mouse_left(() => { })
this.event.mouse_right(() => { })
@ -364,8 +369,9 @@ class CircleDiffuse extends Base {
}
this.tip && this.tip.destroy()
if (this.lastOptions) {
this.options.lng = this.lastOptions.lng
this.options.lat = this.lastOptions.lat
this.lng = this.lastOptions.lng
this.lat = this.lastOptions.lat
}
this.lastOptions = undefined
}
@ -385,7 +391,13 @@ class CircleDiffuse extends Base {
}
set lng(v) {
this.options.lng = v
this.label.position = [v, this.lat]
let objectsToExclude = [...this.sdk.viewer.entities.values]
this.getClampToHeight({
lng: this.options.lng,
lat: this.options.lat
}, objectsToExclude).then(height => {
this.label.position = [this.options.lng, this.options.lat, height]
})
this._elms.lng && this._elms.lng.forEach((item) => {
item.value = v
})
@ -395,7 +407,13 @@ class CircleDiffuse extends Base {
}
set lat(v) {
this.options.lat = v
this.label.position = [this.lng, v]
let objectsToExclude = [...this.sdk.viewer.entities.values]
this.getClampToHeight({
lng: this.options.lng,
lat: this.options.lat
}, objectsToExclude).then(height => {
this.label.position = [this.options.lng, this.options.lat, height]
})
this._elms.lat && this._elms.lat.forEach((item) => {
item.value = v
})

View File

@ -1163,6 +1163,8 @@ class CircleObject extends Base {
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.tip && this.tip.destroy()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -1509,7 +1511,7 @@ class CircleObject extends Base {
height
]
})
}, 50);
}, 200);
setTimeout(() => {
this.event.mouse_left((movement, cartesian) => {

View File

@ -84,7 +84,7 @@ class CurvelineObject extends Base {
this.options.noseToTail = options.noseToTail || false
this.options.extend = options.extend || false
this.options.rotate = (options.rotate || options.rotate === false) ? options.rotate : true
this.options.space = options.space || 1
this.options.space = (options.space || options.space === 0) ? options.space : 1
this.options.speed = options.speed || 10
// this.options.dashSize = options.dashSize || 0.03
this.options.wordsName = options.wordsName || 0
@ -239,7 +239,9 @@ class CurvelineObject extends Base {
})
this.options.rotate = v
this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)
let params = { ...this.options }
params.speed = this.inputSpeed
this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, params)
}
get space() {
@ -480,6 +482,9 @@ class CurvelineObject extends Base {
return this.options.heightMode ? this.options.heightMode : 0
}
set heightMode(v) {
if (!this._isNodeEdit) {
this._lastHeightMode = null
}
this.positionEditing = false
this.options.heightMode = (v || v == 0) ? v : 2
let heightModeName = ''
@ -554,7 +559,7 @@ class CurvelineObject extends Base {
alt: fromDegreesArray[2]
}
}
}, 0);
}, 50);
}
get extend() {
@ -2049,7 +2054,11 @@ class CurvelineObject extends Base {
}
let positions = JSON.parse(JSON.stringify(positionsArray))
let ground
switch (this.heightMode) {
let heightMode = this.heightMode
if (this._isNodeEdit) {
heightMode = 0
}
switch (heightMode) {
case 0:
case '0':
ground = false
@ -2231,6 +2240,9 @@ class CurvelineObject extends Base {
this.heightMode = this.options.heightMode
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
// let height
// if (this.ground) {
// height = await that.getClampToHeight({
@ -2590,10 +2602,20 @@ class CurvelineObject extends Base {
// }
nodeEdit(cd) {
if(this._isNodeEdit) {
return
}
this.closeNodeEdit()
let lastHeightMode = this.heightMode
this._isNodeEdit = true
this.positionEditing = false
this.heightMode = 0
if (YJ.Measure.GetMeasureStatus()) {
} else {
this.closeNodeEdit()
if (!this._lastHeightMode && this._lastHeightMode != 0) {
this._lastHeightMode = lastHeightMode
}
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('请选择一个顶点,右键取消', this.sdk)
this.event = new MouseEvent(this.sdk)
this.ControllerObject = new Controller(this.sdk)
@ -2643,6 +2665,11 @@ class CurvelineObject extends Base {
})
this.event.mouse_right((movement, cartesian) => {
let _lastHeightMode = this._lastHeightMode
this._lastHeightMode = null
if (_lastHeightMode && _lastHeightMode !== 0 && _lastHeightMode !== '0') {
this.heightMode = _lastHeightMode
}
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
@ -2668,7 +2695,7 @@ class CurvelineObject extends Base {
this.entity.polyline.positions = new Cesium.CallbackProperty( () => {
let fromDegreesArray = this.renewPositions(this.options.positions)
this._nodeEditCallback(this.options.positions, this.lengthByMeter)
this._nodeEditCallback && this._nodeEditCallback(this.options.positions, this.lengthByMeter)
return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)
}, false)
@ -2691,10 +2718,18 @@ class CurvelineObject extends Base {
})
this.nodePoints.push(entity)
}
this._isNodeEdit = true
}
}
closeNodeEdit() {
this._isNodeEdit = false
let _lastHeightMode = this._lastHeightMode
this._lastHeightMode = null
if(_lastHeightMode && _lastHeightMode !== 0 && _lastHeightMode !== '0') {
this.heightMode = _lastHeightMode
}
YJ.Measure.SetMeasureStatus(false)
this.ControllerObject && this.ControllerObject.destroy()
this.event && this.event.destroy()
this.tip && this.tip.destroy()
@ -2919,7 +2954,11 @@ class CurvelineObject extends Base {
)
this.renewPolygon(fromDegreesArray)
switch (this.heightMode) {
let heightMode = this.heightMode
if (this._isNodeEdit) {
heightMode = 0
}
switch (heightMode) {
case 0:
case '0':
case 1:

View File

@ -35,7 +35,6 @@ class EllipseObject extends Base {
* @param options.line.width=2 {string} 边框宽
* @param options.line.color="rgba(255, 0, 0, 1)" {string} 边框颜色
* @param options.heightMode=2{number} 高度模式0海拔高度1相对地表2依附模式
* @param options.areaUnit='平方米' {string} 面积单位
* @param options.label {object} 标签对象
* @param options.label.text {string} 标签文本
* @param options.label.show {string} 标签显隐
@ -82,7 +81,6 @@ class EllipseObject extends Base {
this.options.line = options.line || {}
this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3)
this.options.line.color = this.options.line.color || 'rgba(255, 0, 0, 1)'
this.options['area-unit'] = options['area-unit'] || '平方米'
options.label = options.label || {}
this._elms = {};
this.options.label = {
@ -103,13 +101,6 @@ class EllipseObject extends Base {
this.options.attribute = options.attribute || {}
this.options.attribute.link = this.options.attribute.link || {}
this.options.attribute.link.content = this.options.attribute.link.content || []
this.options.attribute.vr = this.options.attribute.vr || {}
this.options.attribute.vr.content = this.options.attribute.vr.content || []
this.options.attribute.camera = this.options.attribute.camera || {}
this.options.attribute.camera.content = this.options.attribute.camera.content || []
this.options.attribute.goods = this.options.attribute.goods || {}
this.options.attribute.goods.content = this.options.attribute.goods.content || []
this.options.attributeType = options.attributeType || 'richText'
this.options.richTextContent = options.richTextContent || ''
this.event = new MouseEvent(this.sdk)
@ -136,7 +127,7 @@ class EllipseObject extends Base {
return
}
let heightModeName = ''
EllipseObject.closeNodeEdit(this)
this.closeNodeEdit()
let ground = false
let disabled = false
this.renewPositions()
@ -339,45 +330,6 @@ class EllipseObject extends Base {
})
}
get area() {
return this.options.area
}
set area(v) {
this.options.area = v
this._elms.area && this._elms.area.forEach((item) => {
item.value = v
})
}
get areaUnit() {
return this.options['area-unit']
}
set areaUnit(v) {
this.options['area-unit'] = v
this._elms.areaUnit && this._elms.areaUnit.forEach((item) => {
item.value = v
})
if (this.options.areaByMeter) {
switch (v) {
case '平方米':
this.area = this.options.areaByMeter
break;
case '平方千米':
this.area = Number((this.options.areaByMeter / 1000000).toFixed(8))
break;
case '亩':
this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4))
break;
case '公顷':
this.area = Number((this.options.areaByMeter / 10000).toFixed(6))
break;
default:
this.area = this.options.areaByMeter
}
}
}
get labelShow() {
return this.options.label.show
}
@ -589,318 +541,12 @@ class EllipseObject extends Base {
}
}
get attributeType() {
return this.options.attributeType
get areaChangeCallBack() {
return this._areaChangeCallBack
}
set attributeType(v) {
this.options.attributeType = v
this._elms.attributeType && this._elms.attributeType.forEach((item) => {
item.value = v
})
let attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content')
for (let i = 0; i < attributeContent.length; i++) {
if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {
attributeContent[i].style.display = 'block';
}
else {
attributeContent[i].style.display = 'none';
}
}
}
get attributeLink() {
return this.options.attribute.link.content
}
set attributeLink(v) {
this.options.attribute.link.content = v
if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {
return
}
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (this.options.attribute.link.content.length > 0) {
table.getElementsByClassName('table-empty')[0].style.display = 'none'
}
else {
table.getElementsByClassName('table-empty')[0].style.display = 'flex'
}
for (let i = 0; i < this.options.attribute.link.content.length; i++) {
let tr = `
<div class="tr">
<div class="td">` + this.options.attribute.link.content[i].name + `</div>
<div class="td">` + this.options.attribute.link.content[i].url + `</div>
<div class="td">
<button @click="linkEdit">编辑</button>
<button @click="linkDelete">删除</button>
</div>
</div>`
let trElm = document.createRange().createContextualFragment(tr)
tableContent.appendChild(trElm)
}
let item = tableContent.getElementsByClassName('tr')
let fun = {
linkEdit: async (index) => {
this.attributeLink = await this.options.attribute.link.content
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
let item = tableContent.getElementsByClassName('tr')
for (let i = 0; i < item.length; i++) {
if (index === i) {
let height = item[i].offsetHeight
let html = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
item[i].innerHTML = html
let textareaElm = item[i].getElementsByClassName('link-edit')[0]
textareaElm.style.height = (height - 10) + 'px'
let td = item[i].getElementsByClassName('td')
td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name
td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
break
}
}
},
linkDelete: (i) => {
this.options.attribute.link.content.splice(i, 1)
this.attributeLink = this.options.attribute.link.content
},
confirmEdit: (value, i) => {
let name = value.name && value.name.replace(/\s/g, "")
let url = value.url && value.url.replace(/\s/g, "")
if (name && url) {
this.options.attribute.link.content[i] = value
}
else {
window.ELEMENT && window.ELEMENT.Message({
message: '名称或链接不能为空!',
type: 'warning',
duration: 1500
});
}
this.attributeLink = this.options.attribute.link.content
},
cancelEdit: () => {
this.attributeLink = this.options.attribute.link.content
},
fileSelect: (value, i) => {
let fileElm = item[i].getElementsByClassName('file-select')[0]
fileElm.click()
fileElm.removeEventListener('change', fileSelect)
fileElm.addEventListener('change', fileSelect)
}
}
let fileSelect = (event) => {
if (event.target.value) {
let td = item[event.target.getAttribute('index')].getElementsByClassName('td')
td[1].getElementsByClassName('input')[0].value = event.target.value
event.target.value = null
}
}
for (let i = 0; i < item.length; i++) {
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value](i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
}
}
get attributeCamera() {
return this.options.attribute.camera.content
}
set attributeCamera(v) {
this.options.attribute.camera.content = v
}
get attributeVr() {
return this.options.attribute.vr.content
}
set attributeVr(v) {
this.options.attribute.vr.content = v
if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {
return
}
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (this.options.attribute.vr.content.length > 0) {
table.getElementsByClassName('table-empty')[0].style.display = 'none'
}
else {
table.getElementsByClassName('table-empty')[0].style.display = 'flex'
}
for (let i = 0; i < this.options.attribute.vr.content.length; i++) {
let tr = `
<div class="tr">
<div class="td">` + this.options.attribute.vr.content[i].name + `</div>
<div class="td">` + this.options.attribute.vr.content[i].url + `</div>
<div class="td">
<button @click="vrEdit">编辑</button>
<button @click="vrDelete">删除</button>
</div>
</div>`
let trElm = document.createRange().createContextualFragment(tr)
tableContent.appendChild(trElm)
}
let item = tableContent.getElementsByClassName('tr')
let fun = {
vrEdit: async (index) => {
this.attributeVr = await this.options.attribute.vr.content
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
let item = tableContent.getElementsByClassName('tr')
for (let i = 0; i < item.length; i++) {
if (index === i) {
let height = item[i].offsetHeight
let html = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
item[i].innerHTML = html
let textareaElm = item[i].getElementsByClassName('link-edit')[0]
textareaElm.style.height = (height - 10) + 'px'
let td = item[i].getElementsByClassName('td')
td[0].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].name
td[1].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].url
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
break
}
}
},
vrDelete: (i) => {
this.options.attribute.vr.content.splice(i, 1)
this.attributeVr = this.options.attribute.vr.content
},
confirmEdit: (value, i) => {
let name = value.name && value.name.replace(/\s/g, "")
let url = value.url && value.url.replace(/\s/g, "")
if (name && url) {
this.options.attribute.vr.content[i] = value
}
else {
window.ELEMENT && window.ELEMENT.Message({
message: '名称或链接不能为空!',
type: 'warning',
duration: 1500
});
}
this.attributeVr = this.options.attribute.vr.content
},
cancelEdit: () => {
this.attributeVr = this.options.attribute.vr.content
},
fileSelect: (value, i) => {
let fileElm = item[i].getElementsByClassName('file-select')[0]
fileElm.click()
fileElm.removeEventListener('change', fileSelect)
fileElm.addEventListener('change', fileSelect)
}
}
let fileSelect = (event) => {
if (event.target.value) {
let td = item[event.target.getAttribute('index')].getElementsByClassName('td')
td[1].getElementsByClassName('input')[0].value = event.target.value
event.target.value = null
}
}
for (let i = 0; i < item.length; i++) {
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value](i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
}
}
get attributeGoods() {
return this.options.attribute.goods.content
}
set attributeGoods(v) {
this.options.attribute.goods.content = v
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
static create(that) {
@ -932,7 +578,6 @@ class EllipseObject extends Base {
color: that.options.color
})
}
that.options.label.ground = ground
let positions = that.createEllipse(that.options.center, { bearing: that.options.bearing, semiMinorAxis: that.options.semiMinorAxis, semiMajorAxis: that.options.semiMajorAxis, height: that.options.center.alt + height })
@ -958,23 +603,8 @@ class EllipseObject extends Base {
})
that.sdk._entityZIndex++
EllipseObject.createLabel(that)
that.options.areaByMeter = Number((Cesium.Math.PI * that.options.semiMinorAxis * that.options.semiMajorAxis).toFixed(2));
switch (that.options['area-unit']) {
case '平方米':
that.options.area = that.options.areaByMeter
break;
case '平方千米':
that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8))
break;
case '亩':
that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4))
break;
case '公顷':
that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6))
break;
default:
that.options.area = that.options.areaByMeter
}
that.areaByMeter = Number((Cesium.Math.PI * that.options.semiMajorAxis * that.options.semiMinorAxis).toFixed(2));
that.areaChangeCallBack && that.areaChangeCallBack()
syncData(that.sdk, that.options.id)
if (that.options.show) {
@ -1006,6 +636,7 @@ class EllipseObject extends Base {
// 编辑框
async edit(state) {
return
let _this = this
this.originalOptions = this.deepCopyObj(this.options)
@ -1191,7 +822,6 @@ class EllipseObject extends Base {
let contentElm = document.createElement('div');
contentElm.innerHTML = html(this)
this._DialogObject.contentAppChild(contentElm)
this.attributeType = this.options.attributeType
this.attributeCamera = this.options.attribute.camera.content
// 创建标签页
@ -1495,13 +1125,10 @@ class EllipseObject extends Base {
this.options = this.deepCopyObj(this.originalOptions)
this.name = this.originalOptions.name
this.radius = this.originalOptions.radius
this.semiMinorAxis = this.originalOptions.semiMinorAxis
this.semiMajorAxis = this.originalOptions.semiMajorAxis
this.bearing = this.originalOptions.bearing
this.color = this.originalOptions.color
this.area = this.originalOptions.area
this.areaUnit = this.originalOptions['area-unit']
this.labelShow = this.originalOptions.label.show
this.labelFontSize = this.originalOptions.label.fontSize
this.labelFontFamily = this.originalOptions.label.fontFamily
@ -1515,9 +1142,6 @@ class EllipseObject extends Base {
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
this.attributeLink = this.options.attribute.link.content
this.attributeVr = this.options.attribute.vr.content
this.attributeCamera = this.options.attribute.camera.content
this.attributeGoods = this.options.attribute.goods.content
this.cameraSelect && this.cameraSelect()
this.goodsSelect && this.goodsSelect()
@ -1543,6 +1167,8 @@ class EllipseObject extends Base {
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.tip && this.tip.destroy()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -1559,51 +1185,6 @@ class EllipseObject extends Base {
await syncData(this.sdk, this.options.id)
}
_addLink() {
// document.getElementsByClassName
if (this._DialogObject._element.content.getElementsByClassName('link_add')[0].value) {
this.options.attribute.link.content.push({
name: '链接',
url: this._DialogObject._element.content.getElementsByClassName('link_add')[0].value
})
this._DialogObject._element.content.getElementsByClassName('link_add')[0].value = ''
this.attributeLink = this.options.attribute.link.content
}
else {
this.Dialog.clickAddLink && this.Dialog.clickAddLink()
}
}
addAttributeLink(link) {
this.options.attribute.link.content.push({
name: '链接',
url: link
})
this.attributeLink = this.options.attribute.link.content
}
_addRr() {
if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {
this.options.attribute.vr.content.push({
name: '全景图' ,
url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value
})
this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = ''
this.attributeVr = this.options.attribute.vr.content
}
else {
this.Dialog.clickAddVr && this.Dialog.clickAddVr()
}
}
addAttributeRr(vr) {
this.options.attribute.vr.content.push({
name: '全景图' ,
url: vr
})
this.attributeVr = this.options.attribute.vr.content
}
/**
* 飞到
*/
@ -1765,6 +1346,10 @@ class EllipseObject extends Base {
center: this.deepCopyObj(this.options.center)
}
this.positionEditing = false
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
})
this.event.mouse_right((movement, cartesian) => {
this.positionEditing = false
@ -1825,7 +1410,13 @@ class EllipseObject extends Base {
return this.operate.positionEditing
}
static nodeEdit(that, cb = () => { }) {
openPositionEditing(cd) {
this.positionEditing = true
this._positionEditingCallback = cd
}
nodeEdit(cb = () => { }) {
let that = this
that.positionEditing = false
if (YJ.Measure.GetMeasureStatus()) {
} else {
@ -1981,19 +1572,23 @@ class EllipseObject extends Base {
that.tip = null
that.heightMode = that.heightMode
cb('', { ...this.options.center })
})
that.getClampToHeight({
lng: that.center.lng,
lat: that.center.lat
}, objectsToExclude).then(height => {
that.label && (that.label.position = [
that.center.lng,
that.center.lat,
height
])
})
setTimeout(() => {
that.getClampToHeight({
lng: that.center.lng,
lat: that.center.lat
}, objectsToExclude).then(height => {
that.label && (that.label.position = [
that.center.lng,
that.center.lat,
height
])
})
}, 200);
createNodePoints(positions[0], 'semiMajorAxis')
createNodePoints(positions[(length - 2) / 4], 'semiMinorAxis')
createNodePoints(positions[(length - 2) / 2], 'semiMajorAxis')
@ -2020,17 +1615,17 @@ class EllipseObject extends Base {
}
}
static closeNodeEdit(that) {
closeNodeEdit() {
YJ.Measure.SetMeasureStatus(false)
that.event && that.event.destroy()
that.tip && that.tip.destroy()
that.tip = null
this.event && this.event.destroy()
this.tip && this.tip.destroy()
this.tip = null
for (let i = 0; i < that.nodePoints.length; i++) {
that.sdk.viewer.entities.remove(that.nodePoints[i])
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
that.nodePoints = []
that.picking = true
this.nodePoints = []
this.picking = true
}
static EventBinding(that, elements) {
@ -2198,8 +1793,8 @@ class EllipseObject extends Base {
}
// 计算投影面积
this.options.areaByMeter = Number((Cesium.Math.PI * this.options.semiMinorAxis * this.options.semiMajorAxis).toFixed(2));
this.areaUnit = this.areaUnit
this.areaByMeter = Number((Cesium.Math.PI * this.options.semiMinorAxis * this.options.semiMajorAxis).toFixed(2));
this.areaChangeCallBack && this.areaChangeCallBack()
return this.positions
}
}

View File

@ -219,6 +219,8 @@ class Explosion extends Base {
this.scaleByDistance = this.originalOptions.scaleByDistance
this.lng = this.options.position.lng
this.lat = this.options.position.lat
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
get scaleByDistance() {

View File

@ -379,6 +379,8 @@ class FlowLine extends Base {
this.duration = this.originalOptions.duration
this.color = this.originalOptions.color
this.lineBackAlpha = this.originalOptions.lineBackAlpha
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
/**

View File

@ -83,11 +83,9 @@ class GeoJson extends Base {
async on() {
let url = ""
if (this.options.host.endsWith("yjearth4.0"))
url = this.options.host + '/data/service/getFile'
else
url = this.options.host + '/yjearth4.0/data/service/getFile'
url = url + '?path=' + encodeURIComponent(this.options.url)
this.options.host = this.options.host || getHost()
url = this.options.host + '/fileInfo/previewLocal'
url += '?fileAbsolutePath=' + this.options.url
let rsp = await fetch(url, {
method: 'get',
headers: {
@ -98,17 +96,13 @@ class GeoJson extends Base {
})
let json = await rsp.json()
this.geojson = json
// this.sdk.addIncetance(this.options.id, this)
return GeoJson.addDataToGlobe(this, json.features)
}
/*geojosn暂时只用线的形式*/
static addDataToGlobe(that) {
/*geojosn暂时只用线的形式*/
const geoJsonDataSource = new Cesium.GeoJsonDataSource();
let geojson = that.deepCopyObj(that.geojson)
let geojson = this.deepCopyObj(this.geojson)
for (let i = 0; i < geojson.features.length; i++) {
if (!geojson.features[i].id) {
geojson.features[i].id = that.options.id + '_' + i
geojson.features[i].id = this.options.id + '_' + i
}
}
// console.log(geojson)
@ -116,13 +110,13 @@ class GeoJson extends Base {
clampToGround: true,
});
return promise.then(datasource => {
that.entity = datasource
this.entity = datasource
datasource.entities.values.forEach(enetity => {
// console.log(enetity)
let color = Cesium.Color.fromCssColorString(that.options.color)
let color = Cesium.Color.fromCssColorString(this.options.color)
let colorPolygon = color.withAlpha(0.2)
enetity.show = that.options.show
that.sdk.viewer.entities.add(enetity)
enetity.show = this.options.show
this.sdk.viewer.entities.add(enetity)
if (enetity.billboard) {
enetity.billboard.heightReference = Cesium.HeightReference.CLAMP_TO_GROUND
enetity.point = new Cesium.PointGraphics({
@ -136,26 +130,26 @@ class GeoJson extends Base {
if (enetity.polyline) {
enetity.polyline.material = color
enetity.polyline.zIndex = that.sdk._entityZIndex
that.sdk._entityZIndex++
enetity.polyline.zIndex = this.sdk._entityZIndex
this.sdk._entityZIndex++
}
if (enetity.polygon) {
enetity.polygon.perPositionHeight = false
enetity.polygon.material = colorPolygon
enetity.polygon.zIndex = that.sdk._entityZIndex
enetity.polygon.zIndex = this.sdk._entityZIndex
enetity.polyline = new Cesium.PolylineGraphics({
positions: enetity.polygon.hierarchy._value.positions,
width: 1,
clampToGround: true,
material: color,
zIndex: that.sdk._entityZIndex
zIndex: this.sdk._entityZIndex
})
that.sdk._entityZIndex++
this.sdk._entityZIndex++
}
})
that.loading = false
this.loading = false
})
}

View File

@ -125,13 +125,14 @@ class Graffiti extends Draw {
start() {
let _this = this
if (YJ.Measure.GetMeasureStatus()) {
this.tools.message({ type: 'warning', text: '上一次测量未结束' })
this._error = '上一次测量未结束'
} else {
this._error = null
let viewer = this.sdk.viewer
CameraController(this.sdk, false)
super.start()
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('长按左键,拖动鼠标进行涂鸦,右键结束涂鸦', this.sdk)
this.tip = new MouseTip('左键按下开始,松开完成,右键单击完成绘制', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id

View File

@ -1234,13 +1234,15 @@ class GroundSvg extends Base {
this.textScaleByDistance = this.originalOptions.text.scaleByDistance
this.textNear = this.originalOptions.text.near
this.textFar = this.originalOptions.text.far
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
/**
* 拖动
* @param {boolean} status=false 状态
*/
drag(status, cd) {
drag(status, dragCallback, endCallback) {
if (!this._loaded || !this.sdk || !this.sdk.viewer) {
return
}
@ -1322,7 +1324,7 @@ class GroundSvg extends Base {
bearingH = (((turf.rhumbBearing(pointC, turf.point(controlPoints[2])) + 360) - this.angle) % 360)
angleW = bearing2 - bearingW
angleH = bearing2 - bearingH
if ((angleW > -360 && angleW < -90) || (angleW < 360 && angleW > 90)) {
if ((angleW > -270 && angleW < -90) || (angleW < 270 && angleW > 90)) {
angleW = angleW + 180
flag = true
}
@ -1370,8 +1372,7 @@ class GroundSvg extends Base {
case 'svg-control-points_8':
bearingH = (((turf.rhumbBearing(pointC, turf.point(controlPoints[2])) + 360) - this.angle) % 360)
angleH = bearing2 - bearingH
if ((angleH > -360 && angleH < -90) || (angleH < 360 && angleH > 90)) {
if ((angleH > -270 && angleH < -90) || (angleH < 270 && angleH > 90)) {
angleH = angleH + 180
this.pointEntityCollection.values[2].point.color = Cesium.Color.fromCssColorString('#00ff0a')
this.pointEntityCollection.values[8].point.color = Cesium.Color.fromCssColorString('#ff0000')
@ -1534,7 +1535,7 @@ class GroundSvg extends Base {
}
this.scale = { ...scale }
dragCallback && dragCallback(this.options)
}
else {
let pickedObjectArray = this.sdk.viewer.scene.drillPick(movement.endPosition);
@ -1601,7 +1602,7 @@ class GroundSvg extends Base {
this.ScreenSpaceEventHandler.setInputAction((movement) => {
this.drag(false)
// if (!this._DialogObject) {
cd && cd(this.options)
endCallback && endCallback(this.options)
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
// }

View File

@ -178,8 +178,10 @@ class LabelObject extends Base {
lng: v[0],
lat: v[1]
}, objectsToExclude).then(height => {
v[2] = height
this.options.position = [...v]
if(this.ground) {
v[2] = height
this.options.position = [...v]
}
})
// let point1 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], 0);
// let point2 = Cesium.Cartesian3.fromDegrees(this.options.position[0], this.options.position[1], 10000000);
@ -275,7 +277,9 @@ class LabelObject extends Base {
lng: this.options.position[0],
lat: this.options.position[1]
}, objectsToExclude).then(height => {
this.options.position[2] = height
if(this.ground) {
this.options.position[2] = height
}
})
}
@ -494,6 +498,7 @@ class LabelObject extends Base {
const ctx = this._canvas.getContext('2d')
ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);
ctx.font = this.options.fontSize + 'px ' + this.font
this.options.outlineWidth = 0
let texts = this.options.text.split('\n')
let canvasWidth = 0
let canvasHeight = 0
@ -503,7 +508,7 @@ class LabelObject extends Base {
if (width > canvasWidth) {
canvasWidth = width
}
canvasHeight += this.options.fontSize
canvasHeight += (this.options.fontSize + (this.options.outlineWidth * 2))
}
canvasHeight = canvasHeight + 20 + (texts.length - 1) * 5
canvasWidth = canvasWidth + 30
@ -526,7 +531,7 @@ class LabelObject extends Base {
ctx.font = this.options.fontSize + 'px ' + this.font
let maxWidth = 0
for (let i = 0; i < texts.length; i++) {
let width = ctx.measureText(texts[i]).width
let width = ctx.measureText(texts[i]).width + (this.options.outlineWidth * 2)
if (maxWidth < width) {
maxWidth = width
}
@ -535,15 +540,25 @@ class LabelObject extends Base {
let centerDistance = (canvasWidth - maxWidth) / 2
for (let i = 0; i < texts.length; i++) {
const text = texts[i]
ctx.strokeStyle = this.options.outlineColor; // 边框颜色
ctx.lineWidth = this.options.outlineWidth * 2; // 边框粗细
if (this.options.fontSize < 10) {
ctx.fillText(text, 15 + centerDistance, this.options.fontSize * (i + 1) + 10 + i * 5)
ctx.strokeText(text, 15 + centerDistance + this.options.outlineWidth, this.options.fontSize * (i + 1) + 10 + (i * 5) + this.options.outlineWidth);
ctx.fillText(text, 15 + centerDistance + this.options.outlineWidth, this.options.fontSize * (i + 1) + 10 + (i * 5) + this.options.outlineWidth)
} else {
ctx.strokeText(
text,
15 + centerDistance + this.options.outlineWidth,
(this.options.fontSize * (i + 1)) +
((10 * 10) / this.options.fontSize) +
(i * 5) + (this.options.outlineWidth / 2)
);
ctx.fillText(
text,
15 + centerDistance,
this.options.fontSize * (i + 1) +
(10 * 10) / this.options.fontSize +
i * 5
15 + centerDistance + this.options.outlineWidth,
(this.options.fontSize * (i + 1)) +
((10 * 10) / this.options.fontSize) +
(i * 5) + (this.options.outlineWidth / 2)
)
}
}

View File

@ -585,7 +585,9 @@ class Flame extends Base {
this.lng = this.originalOptions.lng
this.lat = this.originalOptions.lat
this.alt = this.originalOptions.alt
syncPrimitives(this.entity)
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
// syncPrimitives(this.entity)
}
async remove() {
@ -599,7 +601,10 @@ class Flame extends Base {
this.tip && this.tip.destroy()
this.event && this.event.destroy()
await this.sdk.removeIncetance(this.options.id)
await syncData(this.sdk, this.options.id)
let sdkD = get2DSdk().sdkD
if(this.sdk !== sdkD) {
await syncData(this.sdk, this.options.id)
}
}
/**@desc 打开平移功能

View File

@ -606,6 +606,8 @@ class Fountain extends Base {
this.lng = this.originalOptions.lng
this.lat = this.originalOptions.lat
this.alt = this.originalOptions.alt
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -619,7 +621,10 @@ class Fountain extends Base {
this.tip && this.tip.destroy()
this.event && this.event.destroy()
await this.sdk.removeIncetance(this.options.id)
await syncData(this.sdk, this.options.id)
let sdkD = get2DSdk().sdkD
if(this.sdk !== sdkD) {
await syncData(this.sdk, this.options.id)
}
}
/**@desc 打开平移功能

View File

@ -581,6 +581,8 @@ class Smoke extends Base {
this.lng = this.originalOptions.lng
this.lat = this.originalOptions.lat
this.alt = this.originalOptions.alt
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -594,7 +596,10 @@ class Smoke extends Base {
this.tip && this.tip.destroy()
this.event && this.event.destroy()
await this.sdk.removeIncetance(this.options.id)
await syncData(this.sdk, this.options.id)
let sdkD = get2DSdk().sdkD
if(this.sdk !== sdkD) {
await syncData(this.sdk, this.options.id)
}
}
/**@desc 打开平移功能

View File

@ -718,6 +718,8 @@ class Spout extends Base {
this.lng = this.originalOptions.start.lng
this.lat = this.originalOptions.start.lat
this.alt = this.originalOptions.start.alt
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -731,7 +733,10 @@ class Spout extends Base {
this.tip && this.tip.destroy()
this.event && this.event.destroy()
await this.sdk.removeIncetance(this.options.id)
await syncData(this.sdk, this.options.id)
let sdkD = get2DSdk().sdkD
if(this.sdk !== sdkD) {
await syncData(this.sdk, this.options.id)
}
}
/**@desc 打开平移功能

View File

@ -1432,7 +1432,7 @@ class PincerArrowObject extends Base {
}
this.positionEditing = false
if(this._positionEditingCallback) {
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
@ -1546,7 +1546,7 @@ class PincerArrowObject extends Base {
return this._areaChangeCallBack
}
set areaChangeCallBack (cd) {
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
@ -1686,18 +1686,20 @@ class PincerArrowObject extends Base {
let polygon = turf.polygon(points)
let centroid = turf.pointOnFeature(polygon)
let objectsToExclude = [...this.sdk.viewer.entities.values]
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
setTimeout(() => {
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
}, 200);
createNodePoints()
}, 200);
async function createNodePoints() {

View File

@ -1295,6 +1295,8 @@ class PolygonObject extends Base {
this.positions[0],
this.positions[1]
]
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
/**
@ -1500,7 +1502,7 @@ class PolygonObject extends Base {
fromDegreesArray = []
this.heightMode = this.heightMode
if(this._positionEditingCallback) {
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
@ -1683,6 +1685,7 @@ class PolygonObject extends Base {
_this.previous.positions[0],
_this.previous.positions[1]
]
this.previous = null
}
}
@ -1699,19 +1702,20 @@ class PolygonObject extends Base {
return this._areaChangeCallBack
}
set areaChangeCallBack (cd) {
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
nodeEdit(cb = () => { }) {
this.positionEditing = false
setTimeout(() => {
let previous = [...this.options.positions]
if (YJ.Measure.GetMeasureStatus()) {
cb('上一次测量未结束')
} else {
YJ.Measure.SetMeasureStatus(true)
this.picking = false
this.tip = new MouseTip('请选择一个顶点,右键取消', this.sdk)
this.tip = new MouseTip('左键单击选择控制点,右键单击取消编辑', this.sdk)
this.event = new MouseEvent(this.sdk)
this.nodePoints = []
let _this = this
@ -1729,6 +1733,7 @@ class PolygonObject extends Base {
let added = false
let leftEvent = async (movement, cartesian) => {
let objectsToExclude = [...this.sdk.viewer.entities.values]
if (selectPoint) {
this.options.positions[selectPoint.index] = this.cartesian3Towgs84(
cartesian,
@ -1737,7 +1742,7 @@ class PolygonObject extends Base {
originalPosition = this.options.positions[selectPoint.index]
added = true
let potHeight = await this.getClampToHeight(
this.options.positions[selectPoint.index]
this.options.positions[selectPoint.index], objectsToExclude
)
let entity = this.sdk.viewer.entities.add({
name: 'node-secondary-edit-point',
@ -1771,7 +1776,6 @@ class PolygonObject extends Base {
)
newpositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
let objectsToExclude = [...this.sdk.viewer.entities.values]
if (this.options.positions.length < 3) {
this
.getClampToHeight({
@ -1847,7 +1851,7 @@ class PolygonObject extends Base {
selectPoint = pick.id
this.nodePoints.splice(pick.id.index, 1)
this.sdk.viewer.entities.remove(pick.id)
this.tip.set_text('左键开始右键结束CTRL+右键撤销')
this.tip.set_text('左键单击确定控制点位置,右键单击结束编辑! CTRL+右键单击撤销上一个控制点')
originalPosition = this.cartesian3Towgs84(
selectPoint.position.getValue(),
this.sdk.viewer
@ -1856,12 +1860,72 @@ class PolygonObject extends Base {
}
}
let rightEvent = (movement, cartesian) => {
this.closeNodeEdit = () => {
if (!this.sdk || !this.sdk.viewer) {
return
}
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.tip && this.tip.destroy()
this.tip = null
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
this.nodePoints = []
this.picking = true
}
if (selectPoint) {
this.options.positions[selectPoint.index] = originalPosition
// this.options.positions.splice(selectPoint.index, 1)
if (added) {
this.options.positions.splice(selectPoint.index, 1)
}
if (this.options.positions.length < 3) {
this.options.positions = [...previous]
let positions = this.options.positions
let fromDegreesArray = []
for (let i = 0; i < positions.length; i++) {
fromDegreesArray.push(positions[i].lng, positions[i].lat)
}
this.positions = Cesium.Cartesian3.fromDegreesArray(
fromDegreesArray
)
newpositions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
this.previous = {
positions: [...this.positions]
}
let objectsToExclude = [...this.sdk.viewer.entities.values]
let positions2 = [[]]
for (let i = 0; i < this.options.positions.length; i++) {
positions2[0].push([
this.options.positions[i].lng,
this.options.positions[i].lat
])
}
positions2[0].push([
this.options.positions[0].lng,
this.options.positions[0].lat
])
let polygon = turf.polygon(positions2)
let centroid = turf.centroid(polygon)
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
this.areaByMeter = this.computeArea(this.options.positions)
this.areaChangeCallBack && this.areaChangeCallBack()
}
cb(null, this.options.positions)
}
@ -1871,6 +1935,8 @@ class PolygonObject extends Base {
this.heightMode = this.heightMode
}
this.closeNodeEdit = rightEvent
this.entity.polyline.clampToGround = true
this.entity.polyline.arcType = Cesium.ArcType.GEODESIC
@ -1919,18 +1985,20 @@ class PolygonObject extends Base {
])
let polygon = turf.polygon(positions)
let centroid = turf.centroid(polygon)
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
setTimeout(() => {
this
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
this.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
}, 200);
}
setTimeout(() => {
@ -2017,6 +2085,9 @@ class PolygonObject extends Base {
}
}
this.nodePoints.pop()
if (this.options.positions.length < 3) {
this.tip.set_text('左键单击确定控制点位置,右键单击取消编辑! CTRL+右键单击撤销上一个控制点')
}
}
})

View File

@ -1027,6 +1027,8 @@ class PolyhedronObject extends Base {
let centroid = turf.pointOnFeature(polygon);
let height = await this.getClampToHeight({ lng: centroid.geometry.coordinates[0], lat: centroid.geometry.coordinates[1] })
this.label.position = [centroid.geometry.coordinates[0], centroid.geometry.coordinates[1], this.extrudedHeight + this.height]
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {

View File

@ -83,7 +83,7 @@ class PolylineObject extends Base {
this.options.smooth = options.smooth || false
this.options.extend = options.extend || false
this.options.rotate = (options.rotate || options.rotate === false) ? options.rotate : true
this.options.space = options.space || 1
this.options.space = (options.space || options.space === 0) ? options.space : 1
this.options.speed = options.speed || 10
// this.options.dashSize = options.dashSize || 0.03
this.options.wordsName = options.wordsName || 0
@ -141,11 +141,11 @@ class PolylineObject extends Base {
// this.options.attribute.goods.content =
// this.options.attribute.goods.content || []
delete this.options.attribute.camera
delete this.options.attribute.vr
delete this.options.attribute.goods
delete this.options.attribute.camera
delete this.options.attribute.vr
delete this.options.attribute.goods
this.options.richTextContent = options.richTextContent || ''
this.options.richTextContent = options.richTextContent || ''
this.operate = {}
@ -514,6 +514,9 @@ class PolylineObject extends Base {
return this.options.heightMode ? this.options.heightMode : 0
}
set heightMode(v) {
if (!this._isNodeEdit) {
this._lastHeightMode = null
}
this.positionEditing = false
this.options.heightMode = (v || v == 0) ? v : 2
let heightModeName = ''
@ -548,6 +551,7 @@ class PolylineObject extends Base {
}
setTimeout(() => {
if (ground) {
this.label.ground = ground
@ -570,7 +574,7 @@ class PolylineObject extends Base {
alt: fromDegreesArray[2]
}
}
}, 0);
}, 50);
}
get extend() {
@ -2077,7 +2081,11 @@ class PolylineObject extends Base {
}
let positions = JSON.parse(JSON.stringify(positionsArray))
let ground
switch (this.heightMode) {
let heightMode = this.heightMode
if (this._isNodeEdit) {
heightMode = 0
}
switch (heightMode) {
case 0:
case '0':
ground = false
@ -2243,6 +2251,9 @@ class PolylineObject extends Base {
this.heightMode = this.options.heightMode
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
// let height
// if (this.ground) {
// height = await that.getClampToHeight({
@ -2587,13 +2598,21 @@ class PolylineObject extends Base {
// }
nodeEdit(cb) {
if(this._isNodeEdit) {
return
}
this.closeNodeEdit()
let lastHeightMode = this.heightMode
this._isNodeEdit = true
this.positionEditing = false
this.noseToTail = false
// this.smooth = false
this.heightMode = 0
if (YJ.Measure.GetMeasureStatus()) {
} else {
this.closeNodeEdit()
if (!this._lastHeightMode && this._lastHeightMode != 0) {
this._lastHeightMode = lastHeightMode
}
YJ.Measure.SetMeasureStatus(true)
this._nodeEditCallback = cb
this.tip = new MouseTip('请选择一个顶点,右键取消', this.sdk)
@ -2644,6 +2663,11 @@ class PolylineObject extends Base {
})
this.event.mouse_right((movement, cartesian) => {
let _lastHeightMode = this._lastHeightMode
this._lastHeightMode = null
if (_lastHeightMode && _lastHeightMode !== 0 && _lastHeightMode !== '0') {
this.heightMode = _lastHeightMode
}
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
@ -2669,7 +2693,7 @@ class PolylineObject extends Base {
this.entity.polyline.positions = new Cesium.CallbackProperty(() => {
let fromDegreesArray = this.renewPositions(this.options.positions)
this._nodeEditCallback(this.options.positions, this.lengthByMeter)
this._nodeEditCallback && this._nodeEditCallback(this.options.positions, this.lengthByMeter)
return Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)
}, false)
@ -2692,10 +2716,17 @@ class PolylineObject extends Base {
})
this.nodePoints.push(entity)
}
this._isNodeEdit = true
}
}
closeNodeEdit() {
this._isNodeEdit = false
let _lastHeightMode = this._lastHeightMode
this._lastHeightMode = null
if (_lastHeightMode && _lastHeightMode !== 0 && _lastHeightMode !== '0') {
this.heightMode = _lastHeightMode
}
YJ.Measure.SetMeasureStatus(false)
this.ControllerObject && this.ControllerObject.destroy()
this.event && this.event.destroy()
@ -2846,8 +2877,8 @@ class PolylineObject extends Base {
this.previous.positions = positionsLngLat
// this.entity.polyline.positionsLngLat = positionsLngLat
let fromDegreesArray = this.renewPositions(this.options.positions, ()=>{
if(this._positionEditingCallback) {
let fromDegreesArray = this.renewPositions(this.options.positions, () => {
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
@ -2913,7 +2944,11 @@ class PolylineObject extends Base {
)
this.renewPolygon(fromDegreesArray)
switch (this.heightMode) {
let heightMode = this.heightMode
if (this._isNodeEdit) {
heightMode = 0
}
switch (heightMode) {
case 0:
case '0':
case 1:
@ -2958,7 +2993,7 @@ class PolylineObject extends Base {
return this._lengthChangeCallBack
}
set lengthChangeCallBack (cd) {
set lengthChangeCallBack(cd) {
this._lengthChangeCallBack = cd
}

View File

@ -1061,6 +1061,8 @@ class RadarScan extends Base {
this.labelLineColor = this.originalOptions.label.lineColor
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {

View File

@ -30,7 +30,7 @@ class RadarScanStereoscopic extends Base {
* @param options.colorOut=rgba(255,255,0,0.3){string} 范围颜色
* @param options.colorIn=rgba(255,0,0,0.3){string} 扫描颜色
* @param options.radius=10 {number} 半径
* @param options.duration=2000 {number} 持续时间
* @param options.speed=1 {number} 扫描速度(倍)
* @param options.label {object} 标签对象
* @param options.label.show {string} 标签显隐
* @param options.label.position {string} 标签位置
@ -75,7 +75,7 @@ class RadarScanStereoscopic extends Base {
if(this.options.radius > 999999) {
this.options.radius = 999999
}
this.options.duration = options.duration || 2000
this.options.speed = options.speed || 1
this.event = new MouseEvent(this.sdk)
options.label = options.label || {}
this.options.label = {
@ -117,7 +117,7 @@ class RadarScanStereoscopic extends Base {
let height = options.alt;
let heading = that.options.duration ? 360 / that.options.duration * Cesium.getTimestamp() : 0;
let heading = that.options.speed ? (360 / that.duration * Cesium.getTimestamp() * that.options.speed) : 0;
let arr = calculatePane(that.options, that.options.radius, heading);
let _time = new Date().getTime();
@ -129,7 +129,7 @@ class RadarScanStereoscopic extends Base {
// _time = tempTime
// heading += speed;
heading = that.options.duration ? 360 / that.options.duration * Cesium.getTimestamp() : 0;
heading = that.options.speed ? (360 / that.duration * Cesium.getTimestamp() * that.options.speed) : 0;
arr = calculatePane(that.options, that.options.radius, heading);
});
that.entity = viewer.entities.add({
@ -384,11 +384,14 @@ class RadarScanStereoscopic extends Base {
}
get duration() {
return this.options.duration
return 1000
}
set duration(v) {
this.options.duration = v
this._elms.duration && this._elms.duration.forEach((item) => {
get speed() {
return this.options.speed
}
set speed(v) {
this.options.speed = v
this._elms.speed && this._elms.speed.forEach((item) => {
item.value = v
})
RadarScanStereoscopic.changeParam(this)
@ -1028,7 +1031,7 @@ class RadarScanStereoscopic extends Base {
this.colorOut = this.originalOptions.colorOut
this.colorIn = this.originalOptions.colorIn
this.radius = this.originalOptions.radius
this.duration = this.originalOptions.duration
this.speed = this.originalOptions.speed
this.labelShow = this.originalOptions.label.show
this.labelColor = this.originalOptions.label.color
this.labelFontSize = this.originalOptions.label.fontSize
@ -1042,6 +1045,8 @@ class RadarScanStereoscopic extends Base {
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
this.positionEditing = false
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {

View File

@ -36,7 +36,6 @@ class SectorObject extends Base {
* @param options.line.width=3 {number} 边框宽
* @param options.line.color="rgba(155, 155, 124, 0.89)" {string} 边框颜色
* @param options.heightMode=2{number} 高度模式0海拔高度1相对地表2依附模式
* @param options.areaUnit='平方米' {string} 面积单位
* @param options.label {object} 标签对象
* @param options.label.text {string} 标签文本
* @param options.label.show {string} 标签显隐
@ -82,7 +81,6 @@ class SectorObject extends Base {
this.options.line = options.line || {}
this.options.line.width = ((this.options.line.width || this.options.line.width === 0) ? this.options.line.width : 3)
this.options.line.color = this.options.line.color || 'rgba(255, 0, 0, 1)'
this.options['area-unit'] = options['area-unit'] || '平方米'
options.label = options.label || {}
this._elms = {};
this.options.label = {
@ -103,13 +101,10 @@ class SectorObject extends Base {
this.options.attribute = options.attribute || {}
this.options.attribute.link = this.options.attribute.link || {}
this.options.attribute.link.content = this.options.attribute.link.content || []
this.options.attribute.vr = this.options.attribute.vr || {}
this.options.attribute.vr.content = this.options.attribute.vr.content || []
this.options.attribute.camera = this.options.attribute.camera || {}
this.options.attribute.camera.content = this.options.attribute.camera.content || []
this.options.attribute.goods = this.options.attribute.goods || {}
this.options.attribute.goods.content = this.options.attribute.goods.content || []
this.options.attributeType = options.attributeType || 'richText'
delete this.options.attribute.camera
delete this.options.attribute.vr
delete this.options.attribute.goods
this.options.richTextContent = options.richTextContent || ''
this.event = new MouseEvent(this.sdk)
@ -136,7 +131,7 @@ class SectorObject extends Base {
return
}
let heightModeName = ''
SectorObject.closeNodeEdit(this)
this.closeNodeEdit()
let ground = false
let disabled = false
this.renewPositions()
@ -336,45 +331,6 @@ class SectorObject extends Base {
})
}
get area() {
return this.options.area
}
set area(v) {
this.options.area = v
this._elms.area && this._elms.area.forEach((item) => {
item.value = v
})
}
get areaUnit() {
return this.options['area-unit']
}
set areaUnit(v) {
this.options['area-unit'] = v
this._elms.areaUnit && this._elms.areaUnit.forEach((item) => {
item.value = v
})
if (this.options.areaByMeter) {
switch (v) {
case '平方米':
this.area = this.options.areaByMeter
break;
case '平方千米':
this.area = Number((this.options.areaByMeter / 1000000).toFixed(8))
break;
case '亩':
this.area = Number((this.options.areaByMeter / 666.6666667).toFixed(4))
break;
case '公顷':
this.area = Number((this.options.areaByMeter / 10000).toFixed(6))
break;
default:
this.area = this.options.areaByMeter
}
}
}
get labelShow() {
return this.options.label.show
}
@ -586,320 +542,6 @@ class SectorObject extends Base {
}
}
get attributeType() {
return this.options.attributeType
}
set attributeType(v) {
this.options.attributeType = v
this._elms.attributeType && this._elms.attributeType.forEach((item) => {
item.value = v
})
let attributeContent = this._DialogObject._element.content.getElementsByClassName('attribute-content')
for (let i = 0; i < attributeContent.length; i++) {
if (attributeContent[i].className.indexOf('attribute-content-' + v) > -1) {
attributeContent[i].style.display = 'block';
}
else {
attributeContent[i].style.display = 'none';
}
}
}
get attributeLink() {
return this.options.attribute.link.content
}
set attributeLink(v) {
this.options.attribute.link.content = v
if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-link').length == 0) {
return
}
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (this.options.attribute.link.content.length > 0) {
table.getElementsByClassName('table-empty')[0].style.display = 'none'
}
else {
table.getElementsByClassName('table-empty')[0].style.display = 'flex'
}
for (let i = 0; i < this.options.attribute.link.content.length; i++) {
let tr = `
<div class="tr">
<div class="td">` + this.options.attribute.link.content[i].name + `</div>
<div class="td">` + this.options.attribute.link.content[i].url + `</div>
<div class="td">
<button @click="linkEdit">编辑</button>
<button @click="linkDelete">删除</button>
</div>
</div>`
let trElm = document.createRange().createContextualFragment(tr)
tableContent.appendChild(trElm)
}
let item = tableContent.getElementsByClassName('tr')
let fun = {
linkEdit: async (index) => {
this.attributeLink = await this.options.attribute.link.content
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-link')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
let item = tableContent.getElementsByClassName('tr')
for (let i = 0; i < item.length; i++) {
if (index === i) {
let height = item[i].offsetHeight
let html = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
item[i].innerHTML = html
let textareaElm = item[i].getElementsByClassName('link-edit')[0]
textareaElm.style.height = (height - 10) + 'px'
let td = item[i].getElementsByClassName('td')
td[0].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].name
td[1].getElementsByClassName('input')[0].value = this.options.attribute.link.content[index].url
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
break
}
}
},
linkDelete: (i) => {
this.options.attribute.link.content.splice(i, 1)
this.attributeLink = this.options.attribute.link.content
},
confirmEdit: (value, i) => {
let name = value.name && value.name.replace(/\s/g, "")
let url = value.url && value.url.replace(/\s/g, "")
if (name && url) {
this.options.attribute.link.content[i] = value
}
else {
window.ELEMENT && window.ELEMENT.Message({
message: '名称或链接不能为空!',
type: 'warning',
duration: 1500
});
}
this.attributeLink = this.options.attribute.link.content
},
cancelEdit: () => {
this.attributeLink = this.options.attribute.link.content
},
fileSelect: (value, i) => {
let fileElm = item[i].getElementsByClassName('file-select')[0]
fileElm.click()
fileElm.removeEventListener('change', fileSelect)
fileElm.addEventListener('change', fileSelect)
}
}
let fileSelect = (event) => {
if (event.target.value) {
let td = item[event.target.getAttribute('index')].getElementsByClassName('td')
td[1].getElementsByClassName('input')[0].value = event.target.value
event.target.value = null
}
}
for (let i = 0; i < item.length; i++) {
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value](i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
}
}
get attributeCamera() {
return this.options.attribute.camera.content
}
set attributeCamera(v) {
this.options.attribute.camera.content = v
}
get attributeVr() {
return this.options.attribute.vr.content
}
set attributeVr(v) {
this.options.attribute.vr.content = v
if (!this._DialogObject || !this._DialogObject._element || !this._DialogObject._element.content || this._DialogObject._element.content.getElementsByClassName('attribute-content-vr').length == 0) {
return
}
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (this.options.attribute.vr.content.length > 0) {
table.getElementsByClassName('table-empty')[0].style.display = 'none'
}
else {
table.getElementsByClassName('table-empty')[0].style.display = 'flex'
}
for (let i = 0; i < this.options.attribute.vr.content.length; i++) {
let tr = `
<div class="tr">
<div class="td">` + this.options.attribute.vr.content[i].name + `</div>
<div class="td">` + this.options.attribute.vr.content[i].url + `</div>
<div class="td">
<button @click="vrEdit">编辑</button>
<button @click="vrDelete">删除</button>
</div>
</div>`
let trElm = document.createRange().createContextualFragment(tr)
tableContent.appendChild(trElm)
}
let item = tableContent.getElementsByClassName('tr')
let fun = {
vrEdit: async (index) => {
this.attributeVr = await this.options.attribute.vr.content
let table = this._DialogObject._element.content.getElementsByClassName('attribute-content-vr')[1].getElementsByClassName('table')[0]
let tableContent = table.getElementsByClassName('table-body')[0]
let item = tableContent.getElementsByClassName('tr')
for (let i = 0; i < item.length; i++) {
if (index === i) {
let height = item[i].offsetHeight
let html = `
<div class="td">
<input class="input" type="text">
</div>
<div class="td">
<textarea class="input link-edit" type="text"></textarea>
</div>
<div class="td">
<button @click="confirmEdit">确认</button>
<button @click="cancelEdit">取消</button>
</div>`
item[i].innerHTML = html
let textareaElm = item[i].getElementsByClassName('link-edit')[0]
textareaElm.style.height = (height - 10) + 'px'
let td = item[i].getElementsByClassName('td')
td[0].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].name
td[1].getElementsByClassName('input')[0].value = this.options.attribute.vr.content[index].url
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value]({ name: td[0].getElementsByClassName('input')[0].value, url: td[1].getElementsByClassName('input')[0].value }, i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
break
}
}
},
vrDelete: (i) => {
this.options.attribute.vr.content.splice(i, 1)
this.attributeVr = this.options.attribute.vr.content
},
confirmEdit: (value, i) => {
let name = value.name && value.name.replace(/\s/g, "")
let url = value.url && value.url.replace(/\s/g, "")
if (name && url) {
this.options.attribute.vr.content[i] = value
}
else {
window.ELEMENT && window.ELEMENT.Message({
message: '名称或链接不能为空!',
type: 'warning',
duration: 1500
});
}
this.attributeVr = this.options.attribute.vr.content
},
cancelEdit: () => {
this.attributeVr = this.options.attribute.vr.content
},
fileSelect: (value, i) => {
let fileElm = item[i].getElementsByClassName('file-select')[0]
fileElm.click()
fileElm.removeEventListener('change', fileSelect)
fileElm.addEventListener('change', fileSelect)
}
}
let fileSelect = (event) => {
if (event.target.value) {
let td = item[event.target.getAttribute('index')].getElementsByClassName('td')
td[1].getElementsByClassName('input')[0].value = event.target.value
event.target.value = null
}
}
for (let i = 0; i < item.length; i++) {
let btn = item[i].getElementsByTagName('button')
for (let n = 0; n < btn.length; n++) {
if (!btn[n] || !btn[n].attributes) {
continue
}
for (let m of btn[n].attributes) {
if (m.name === '@click') {
btn[n].addEventListener('click', (e) => {
if (typeof (fun[m.value]) === 'function') {
fun[m.value](i)
}
});
btn[n].attributes.removeNamedItem(m.name)
break
}
}
}
}
}
get attributeGoods() {
return this.options.attribute.goods.content
}
set attributeGoods(v) {
this.options.attribute.goods.content = v
}
static create(that) {
let fromDegreesArray = that.calSector(that.options.center, that.options.radius, that.options.startAngle, that.options.endAngle, 360, true)
let ground = true
@ -973,23 +615,8 @@ class SectorObject extends Base {
if (angle < 0) {
angle = 360 + angle
}
that.options.areaByMeter = Number((Cesium.Math.PI * that.options.radius * that.options.radius * (angle / 360)).toFixed(2));
switch (that.options['area-unit']) {
case '平方米':
that.options.area = that.options.areaByMeter
break;
case '平方千米':
that.options.area = Number((that.options.areaByMeter / 1000000).toFixed(8))
break;
case '亩':
that.options.area = Number((that.options.areaByMeter / 666.6666667).toFixed(4))
break;
case '公顷':
that.options.area = Number((that.options.areaByMeter / 10000).toFixed(6))
break;
default:
that.options.area = that.options.areaByMeter
}
that.areaByMeter = Number((Cesium.Math.PI * that.options.radius * that.options.radius * (angle / 360)).toFixed(2));
that.areaChangeCallBack && that.areaChangeCallBack()
syncData(that.sdk, that.options.id)
if (that.options.show) {
@ -1021,6 +648,7 @@ class SectorObject extends Base {
// 编辑框
async edit(state) {
return
let _this = this
this.originalOptions = this.deepCopyObj(this.options)
@ -1511,8 +1139,6 @@ class SectorObject extends Base {
this.name = this.originalOptions.name
this.radius = this.originalOptions.radius
this.color = this.originalOptions.color
this.area = this.originalOptions.area
this.areaUnit = this.originalOptions['area-unit']
this.labelShow = this.originalOptions.label.show
this.labelFontSize = this.originalOptions.label.fontSize
this.labelFontFamily = this.originalOptions.label.fontFamily
@ -1525,12 +1151,6 @@ class SectorObject extends Base {
this.lineColor = this.originalOptions.line.color
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
this.attributeLink = this.options.attribute.link.content
this.attributeVr = this.options.attribute.vr.content
this.attributeCamera = this.options.attribute.camera.content
this.attributeGoods = this.options.attribute.goods.content
this.cameraSelect && this.cameraSelect()
this.goodsSelect && this.goodsSelect()
this.heightMode = this.originalOptions.heightMode
@ -1554,6 +1174,8 @@ class SectorObject extends Base {
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.tip && this.tip.destroy()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -1820,6 +1442,10 @@ class SectorObject extends Base {
center: this.deepCopyObj(this.options.center)
}
this.positionEditing = false
if (this._positionEditingCallback) {
this._positionEditingCallback()
this._positionEditingCallback = null
}
})
this.event.mouse_right((movement, cartesian) => {
this.positionEditing = false
@ -1887,7 +1513,21 @@ class SectorObject extends Base {
return this.operate.positionEditing
}
static nodeEdit(that, cb = () => { }) {
openPositionEditing(cd) {
this.positionEditing = true
this._positionEditingCallback = cd
}
get areaChangeCallBack() {
return this._areaChangeCallBack
}
set areaChangeCallBack(cd) {
this._areaChangeCallBack = cd
}
nodeEdit(cb = () => { }) {
let that = this
that.positionEditing = false
if (YJ.Measure.GetMeasureStatus()) {
} else {
@ -1959,18 +1599,20 @@ class SectorObject extends Base {
that.cartesian3Towgs84(positions[positions.length - 4], that.sdk.viewer)
]
let objectsToExclude = [...that.sdk.viewer.entities.values]
that
.getClampToHeight({
lng: that.options.center.lng,
lat: that.options.center.lat
}, objectsToExclude)
.then(height => {
that.label.position = [
that.options.center.lng,
that.options.center.lat,
height
]
})
setTimeout(() => {
that
.getClampToHeight({
lng: that.options.center.lng,
lat: that.options.center.lat
}, objectsToExclude)
.then(height => {
that.label.position = [
that.options.center.lng,
that.options.center.lat,
height
]
})
}, 200);
setTimeout(() => {
createNodePoints(positions[1], 'sector-start')
createNodePoints(positions[positions.length - 4], 'sector-end')
@ -2042,6 +1684,8 @@ class SectorObject extends Base {
that.tip = null
that.heightMode = that.heightMode
cb('', { ...that.options.center })
})
}, 200);
async function createNodePoints(pos, type) {
@ -2064,17 +1708,17 @@ class SectorObject extends Base {
}
}
static closeNodeEdit(that) {
closeNodeEdit() {
YJ.Measure.SetMeasureStatus(false)
that.event && that.event.destroy()
that.tip && that.tip.destroy()
that.tip = null
this.event && this.event.destroy()
this.tip && this.tip.destroy()
this.tip = null
for (let i = 0; i < that.nodePoints.length; i++) {
that.sdk.viewer.entities.remove(that.nodePoints[i])
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
that.nodePoints = []
that.picking = true
this.nodePoints = []
this.picking = true
}
static EventBinding(that, elements) {
@ -2259,8 +1903,8 @@ class SectorObject extends Base {
if (angle < 0) {
angle = 360 + angle
}
this.options.areaByMeter = Number((Cesium.Math.PI * this.options.radius * this.options.radius * (angle / 360)).toFixed(2));
this.areaUnit = this.areaUnit
this.areaByMeter = Number((Cesium.Math.PI * this.options.radius * this.options.radius * (angle / 360)).toFixed(2));
this.areaChangeCallBack && this.areaChangeCallBack()
return fromDegreesArray
}
}

View File

@ -1618,7 +1618,7 @@ class StraightArrowObject extends Base {
_addRr() {
if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {
this.options.attribute.vr.content.push({
name: '全景图' ,
name: '全景图',
url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value
})
this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = ''
@ -1631,7 +1631,7 @@ class StraightArrowObject extends Base {
addAttributeRr(vr) {
this.options.attribute.vr.content.push({
name: '全景图' ,
name: '全景图',
url: vr
})
this.attributeVr = this.options.attribute.vr.content
@ -2191,18 +2191,20 @@ class StraightArrowObject extends Base {
let polygon = turf.polygon(points)
let centroid = turf.pointOnFeature(polygon)
let objectsToExclude = [...that.sdk.viewer.entities.values]
that
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
that.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
setTimeout(() => {
that
.getClampToHeight({
lng: centroid.geometry.coordinates[0],
lat: centroid.geometry.coordinates[1]
}, objectsToExclude)
.then(height => {
that.label.position = [
centroid.geometry.coordinates[0],
centroid.geometry.coordinates[1],
height
]
})
}, 200);
createNodePoints()
}, 200);
async function createNodePoints() {

View File

@ -634,6 +634,8 @@ class GroundText extends Base {
this.angle = this.originalOptions.angle
this.scale = this.originalOptions.scale
this.color = this.originalOptions.color
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {

View File

@ -452,6 +452,8 @@ class StandText extends Base {
maximumHeights.push(positions[i].alt + extrudedHeight)
}
this.entity.wall.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -595,7 +597,7 @@ class StandText extends Base {
selectPoint = pick.id
this.nodePoints.splice(pick.id.index, 1)
this.sdk.viewer.entities.remove(pick.id)
this.tip.set_text('左键开始右键结束CTRL+右键撤销')
this.tip.set_text('左键单击确认顶点位置,右键单击结束CTRL+右键撤销')
originalPosition = this.cartesian3Towgs84(cartesian, this.sdk.viewer)
this.entity.wall.positions = new Cesium.CallbackProperty(function () {
return Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
@ -615,6 +617,15 @@ class StandText extends Base {
if(isAdd) {
this.options.positions.splice(selectPoint.index, 1)
}
if (!this.options.positions || this.options.positions.length < 2) {
console.warn('最少需要两个坐标!')
window.ELEMENT && window.ELEMENT.Message({
message: '最少需要两个坐标!',
type: 'warning',
duration: 1500
});
this.options.positions = [...previous]
}
cb(null, this.options.positions)
}
let positions = this.options.positions

View File

@ -95,6 +95,7 @@ class TrajectoryMotion extends Base {
this.options.line.noseToTail = options.line.noseToTail ? options.line.noseToTail : false
this.positions_smooth = []
this.options.ground = options.ground || false
this.options.reverse = options.reverse || false
this.options.state = (options.state || options.state === false) ? options.state : true
this.options.routeDirection = (options.routeDirection || options.routeDirection === false) ? options.routeDirection : true
this.keyPoints = []
@ -618,20 +619,30 @@ class TrajectoryMotion extends Base {
set delay(v) {
this.options.delay = v
if (this.TweenAnimate && this.TweenAnimate._isPlaying) {
this.TweenAnimate.delay(this.delay)
this.TweenAnimate.delay(this.delay*1000)
}
this._elms.delay && this._elms.delay.forEach((item) => {
item.value = v
})
}
get reverse() {
return this.options.reverse
}
set reverse(v) {
this.lineEdit = false
this.options.reverse = v
this.smooth = this.smooth
}
get state() {
return this.options.state
}
set state(v) {
this.options.state = v
cancelAnimationFrame(this._requestAnimationFrameEventId)
if (this.editObj) {
if (this.options.state && this.editObj) {
this.editObj.destroy()
this.editObj = null
if (this._DialogObject && this._DialogObject._element && this._DialogObject._element.content) {
@ -646,10 +657,10 @@ class TrajectoryMotion extends Base {
if (this.TweenAnimate.isPlaying()) {
this.TweenAnimate.timeout = setTimeout(() => {
this.TweenAnimate.resume()
}, this.options.delay);
}, this.options.delay*1000);
}
else {
this.TweenAnimate.delay(this.delay).start()
this.TweenAnimate.delay(this.delay*1000).start()
}
this.speed = this.speed
}
@ -1513,7 +1524,7 @@ class TrajectoryMotion extends Base {
let HeadingPitchRoll2
let previous = {}
let m = 0
this.TweenAnimate = new TWEEN.Tween({ distance: startDistance }).to({ distance: this.distance }, (totalTime - time) * 1000).delay(this.delay).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(() => {
this.TweenAnimate = new TWEEN.Tween({ distance: startDistance }).to({ distance: this.distance }, (totalTime - time) * 1000).delay(this.delay*1000).easing(TWEEN.Easing.Linear.None).repeat(this.options.loop ? Infinity : 0).onRepeat(() => {
if (time || startDistance) {
this.modelMove(positions)
}
@ -1562,11 +1573,15 @@ class TrajectoryMotion extends Base {
animateUpdate
)
if (_this.options.firstPersonView) {
let targetHeading = _this.model.heading + 90 + _this.firstPersonHeadingPitch.heading
if(!_this.routeDirection) {
targetHeading = 180 - targetHeading
}
let positionCamera = { ..._this.sdk.viewer.camera._position }
_this.sdk.viewer.camera.setView({
destination: positionCamera,
orientation: {
heading: Cesium.Math.toRadians(_this.model.heading + 90 + _this.firstPersonHeadingPitch.heading),
heading: Cesium.Math.toRadians(targetHeading),
pitch: Cesium.Math.toRadians(_this.firstPersonHeadingPitch.pitch),
roll: 0
}
@ -1794,10 +1809,14 @@ class TrajectoryMotion extends Base {
if (_this.viewFollow) {
// console.log(Cesium.Math.toDegrees(_this.sdk.viewer.camera.pitch))
if (_this.options.firstPersonView) {
let targetHeading = heading + 90 + _this.firstPersonHeadingPitch.heading
if(!_this.routeDirection) {
targetHeading = 180 - targetHeading
}
_this.sdk.viewer.camera.setView({
destination: positionCamera,
orientation: {
heading: Cesium.Math.toRadians(heading + 90 + _this.firstPersonHeadingPitch.heading),
heading: Cesium.Math.toRadians(targetHeading),
pitch: Cesium.Math.toRadians(_this.firstPersonHeadingPitch.pitch),
roll: 0
}
@ -2257,6 +2276,8 @@ class TrajectoryMotion extends Base {
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
this.options = this.deepCopyObj(this.originalOptions);
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
// viewFollow(e) {
@ -2285,6 +2306,7 @@ class TrajectoryMotion extends Base {
this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].innerHTML = '开始调整'
this._DialogObject._element.content.getElementsByClassName('model-rotate-btn')[0].className = 'btn model-rotate-btn'
}
return false
}
else {
if (this.viewFollow) {
@ -2333,6 +2355,8 @@ class TrajectoryMotion extends Base {
Cesium.Matrix4.multiply(originalMatrix, rotationY, originalMatrix)
Cesium.Matrix4.multiply(originalMatrix, rotationZ, this.entity.modelMatrix)
}
return true
}
}
@ -2373,7 +2397,7 @@ class TrajectoryMotion extends Base {
// maximumScale: 100000,
}
const getAnimationsList = () => {
if (this.options.model.url === this.originalOptions.model.url) {
if (this.originalOptions && this.options.model.url === this.originalOptions.model.url) {
this.modelAnimate = this.originalOptions.model.animate
}
else {
@ -2457,10 +2481,13 @@ class TrajectoryMotion extends Base {
// 更新坐标
renewLinePositions(pos) {
let positions = pos
let positions = [...pos]
if (this.noseToTail) {
positions = [...pos, pos[0]]
}
if(this.reverse) {
positions.reverse()
}
let fromDegreesArrayHeights = []
let time = []
let positions_smooth = []

View File

@ -143,6 +143,7 @@ class TrajectoryMotionObject extends Base {
}
}
let positions_smooth = this._renewLine(this.options.line.positions)
this.line.polyline.positions = positions_smooth
this._elms.height && this._elms.height.forEach((item) => {
item.value = v
})
@ -210,6 +211,7 @@ class TrajectoryMotionObject extends Base {
this.lineEdit = false
this.options.line.smooth = v
let positions = this._renewLine(this.options.line.positions)
this.line.polyline.positions = positions
this.modelMove(positions)
this._elms.smooth && this._elms.smooth.forEach((item) => {
item.checked = v
@ -271,6 +273,7 @@ class TrajectoryMotionObject extends Base {
let nosmooth = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArrayHeights)
if (this.line) {
let positions_smooth = this._renewLine(this.options.line.positions)
this.line.polyline.positions = positions_smooth
this.modelMove(positions_smooth)
}
this._elms.noseToTail && this._elms.noseToTail.forEach((item) => {

View File

@ -42,14 +42,14 @@ class Vector extends Base {
return
}
this.colors = colors
this.options.head_tables = options.head_tables || []
this.options.fileName = options.fileName || '未命名对象'
this.options.headTables = options.headTables || []
this.options.name = options.name || '未命名对象'
if (!this.options.path.endsWith('.kml')) {
; (this.options.color = options.color || 'rgba(0,255,184,0.5)'),
(this.options.opacity =
options.opacity || options.opacity === 0 ? options.opacity : 1)
}
// if (!this.options.path.endsWith('.kml')) {
// ; (this.options.color = options.color || 'rgba(0,255,184,0.5)'),
// (this.options.opacity =
// options.opacity || options.opacity === 0 ? options.opacity : 1)
// }
this.options.show =
options.show || options.show === false ? options.show : true
@ -120,34 +120,34 @@ class Vector extends Base {
}
async init() {
let url = ''
this.options.host = this.options.host || getHost()
if (this.options.host.endsWith('yjearth4.0')) {
url = this.options.host + '/api/v1/vector/load2'
} else {
url = this.options.host + '/yjearth4.0/api/v1/vector/load2'
}
url += '?path=' + this.options.path
// url = 'json/shp.json'
let response = await fetch(url, {
method: 'get',
headers: {
'Content-Type': 'application/json',
token: getToken(),
Authorization: 'Bearer ' + getToken()
return new Promise(async (resolve, reject) => {
let url = ''
this.options.host = this.options.host || getHost()
url = this.options.host + '/gdal/import'
// url = 'json/shp.json'
let params = new FormData()
params.append('path', this.options.path)
let response = await fetch(url, {
method: 'post',
headers: {
Authorization: getToken()
},
body: params
})
console.log('response', response)
if (response.status === 200) {
let arrayBuffer = await response.arrayBuffer()
let uint8Array = new Uint8Array(arrayBuffer)
let string = this.decompressGzip(uint8Array)
if (this.data.length === 0) {
this.data = JSON.parse(string)
}
console.log('this.data', this.data)
await this.formatData()
Vector.create(this)
resolve()
}
})
if (response.status === 200) {
let arrayBuffer = await response.arrayBuffer()
let uint8Array = new Uint8Array(arrayBuffer)
let string = this.decompressGzip(uint8Array)
if(this.data.length===0)
{
this.data = JSON.parse(string)
}
await this.formatData()
return Vector.create(this)
}
});
}
// 格式化数据
@ -195,16 +195,16 @@ class Vector extends Base {
}
for (let m = 0; m < this.data.list[i].features.length; m++) {
this.data.list[i].features[m].properties.id
if(!this.data.list[i].features[m].properties) {
if (!this.data.list[i].features[m].properties) {
this.data.list[i].features[m].properties = {}
}
if(!this.data.list[i].features[m].properties.id) {
if (!this.data.list[i].features[m].properties.id) {
this.data.list[i].features[m].properties.id = Cesium.createGuid()
}
this.data.list[i].features[m].id = this.data.list[i].features[m].properties.id
posConvert(
this.data.list[i].features[m].geometry,
this.data.list[i].crs_src,
this.data.list[i].crs_src || '+proj=longlat +datum=WGS84 +no_defs',
this.data.list[i].crs_dst || '+proj=longlat +datum=WGS84 +no_defs'
)
this.data.list[i].features[m].geometry.geometries ||
@ -231,12 +231,12 @@ class Vector extends Base {
// }
}
get fileName() {
return this.options.fileName
get name() {
return this.options.name
}
set fileName(v) {
this.options.fileName = v
this._elms.fileName && (this._elms.fileName.value = v)
set name(v) {
this.options.name = v
this._elms.name && (this._elms.name.value = v)
}
get field() {
@ -252,9 +252,9 @@ class Vector extends Base {
// }
// }
let label = v
for (let index = 0; index < this.options.head_tables.length; index++) {
if (this.options.head_tables[index].key === v) {
label = this.options.head_tables[index].label
for (let index = 0; index < this.options.headTables.length; index++) {
if (this.options.headTables[index].key === v) {
label = this.options.headTables[index].label
break
}
}
@ -348,13 +348,8 @@ class Vector extends Base {
) {
let url = ''
that.options.host = that.options.host || getHost()
if (that.options.host.endsWith('yjearth4.0')) {
url = that.options.host + '/api/v1/vector/getKml'
} else {
url = that.options.host + '/yjearth4.0/api/v1/vector/getKml'
}
url += '?path=' + that.options.path
// url = 'json/shp.json'
url = that.options.host + '/fileInfo/previewLocal'
url += '?fileAbsolutePath=' + that.options.path
fetch(url, {
method: 'get',
headers: {
@ -625,16 +620,26 @@ class Vector extends Base {
}
})
if (!that.options.field) {
const properties = ['id', 'Id', 'ID', 'name', 'Name', 'NAME', 'address', 'Address', 'ADDRESS', 'text', 'Text', 'TEXT', 'label', 'Label', 'LABEL'];
const properties = ['name', 'Name', 'NAME'];
const field = properties.find(prop => that.geojson.features[0].properties[prop] !== undefined);
if (field) {
that.options.field = field;
}
else {
for (let key in that.geojson.features[0].properties) {
that.options.field = key;
break;
}
const isChinese = (str) => /[\u4e00-\u9fa5]/.test(str);
const sortedKeys = Object.keys(that.geojson.features[0].properties || {}).sort((a, b) => {
const aIsCN = isChinese(a);
const bIsCN = isChinese(b);
if (!aIsCN && bIsCN) return -1;
if (aIsCN && !bIsCN) return 1;
// 非中文:纯字母序(不区分大小写);中文:拼音序
return aIsCN
? a.localeCompare(b, 'zh-CN')
: a.toUpperCase().localeCompare(b.toUpperCase());
});
that.options.field = sortedKeys[0]
}
}
// for (let i = 0; i < that.#textEntity.length; i++) {
@ -734,17 +739,17 @@ class Vector extends Base {
left: '180px',
top: '100px',
confirmCallBack: options => {
this.fileName = this.fileName.trim()
if (!this.fileName) {
this.fileName = '未命名对象'
this.name = this.name.trim()
if (!this.name) {
this.name = '未命名对象'
}
this.originalOptions.fileName = this.fileName
this.originalOptions.name = this.name
this.originalOptions.field = this.field
this._DialogObject.close()
DialogEvent.confirmCallBack &&
DialogEvent.confirmCallBack({
id: this.options.id,
fileName: this.originalOptions.fileName,
name: this.originalOptions.name,
field: this.originalOptions.field
})
},
@ -772,17 +777,17 @@ class Vector extends Base {
this._DialogObject.contentAppChild(contentElm)
let nameElm = contentElm.getElementsByClassName('flie-name')[0]
nameElm.value = this.options.fileName
nameElm.value = this.options.name
nameElm.addEventListener('input', () => {
this.options.fileName = nameElm.value
this.options.name = nameElm.value
})
let keyData = []
for (let key in this.geojson.features[0].properties) {
let label = key
for (let index = 0; index < this.options.head_tables.length; index++) {
if (this.options.head_tables[index].key === key) {
label = this.options.head_tables[index].label
for (let index = 0; index < this.options.headTables.length; index++) {
if (this.options.headTables[index].key === key) {
label = this.options.headTables[index].label
break
}
}
@ -820,7 +825,7 @@ class Vector extends Base {
})
this._elms.field = keyDataLegpElm
}
this._elms.fileName = nameElm
this._elms.name = nameElm
return
@ -833,9 +838,9 @@ class Vector extends Base {
for (let key in this.geojson.features[0].properties) {
let label = key
for (let index = 0; index < this.options.head_tables.length; index++) {
if (this.options.head_tables[index].key === key) {
label = this.options.head_tables[index].label
for (let index = 0; index < this.options.headTables.length; index++) {
if (this.options.headTables[index].key === key) {
label = this.options.headTables[index].label
break
}
}
@ -848,7 +853,7 @@ class Vector extends Base {
this.options.field = selectElm.value
})
this._elms.fileName = nameElm
this._elms.name = nameElm
this._elms.field = selectElm
} else {
if (this._DialogObject && this._DialogObject.close) {
@ -858,255 +863,6 @@ class Vector extends Base {
}
}
async editById(status = false, nodeId, DialogEvent = {}) {
// nodeId = this.dataArray[0].attr.id
if (this._DialogObject && this._DialogObject.close) {
this._DialogObject.close()
this._DialogObject = null
}
let cameraName = ''
let index
if (status) {
let options = {}
for (let i = 0; i < this.geojson.features.length; i++) {
if (this.geojson.features[i].id === nodeId) {
if (this.geojson.features[i].content) {
options = this.deepCopyObj(this.geojson.features[i].content)
}
index = i
break
}
}
options.id = options.id || nodeId
options.link || (options.link = {})
options.link.content || (options.link.content = [])
options.camera || (options.camera = [])
options.richTextContent || (options.richTextContent = '')
options.attributeType = options.attributeType || 'richText'
this._DialogObject = await new Dialog(this.sdk, options, {
title: '编辑属性',
left: '180px',
top: '100px',
confirmCallBack: () => {
this._DialogObject.close()
this.geojson.features[index].content = this.deepCopyObj(
this._DialogObject.attribute
)
DialogEvent.confirmCallBack &&
DialogEvent.confirmCallBack(this._DialogObject.attribute)
},
closeCallBack: () => {
// this.reset()
DialogEvent.closeCallBack && DialogEvent.closeCallBack()
}
})
this._DialogObject.event = DialogEvent
this._DialogObject.attribute = this.deepCopyObj(options)
let html = `
<div class="row">
<div class="col">
<span class="label">内容类型:</span>
<select class="input input-select attribute-select" style="width: 120px;">
<option value="richText">富文本</option>
<!--<option value="link">链接</option>
<option value="camera">摄像头</option>
<option value="sensor">传感器</option>
<option value="vr">全景图</option>-->
</select>
</div>
<div class="col attribute-content attribute-content-link">
<div class="input-group">
<input class="input link_add" type="text">
<button class="link_add_btn">+</button>
</div>
</div>
</div>
<div class="attribute-content attribute-content-richText">
<span>编辑内容:<button class="open-richText-btn">打开文本编辑器</button></span>
</div>
<div class="attribute-content attribute-content-link">
<div class="table">
<div class="table-head">
<div class="tr">
<div class="th">名称</div>
<div class="th">链接</div>
<div class="th">操作</div>
</div>
</div>
<div class="table-body">
</div>
<div class="table-empty">
<div class="empty-img"></div>
<p>暂无数据</p>
</div>
</div>
</div>
<div class="attribute-content attribute-content-camera">
<div class="row">
<div class="col">
<span class="label">编辑内容:</span>
<input class="input camera-name" type="text" style="width: 100px;">
<button class="select btn camera-select">搜索</button>
</div>
</div>
<div>
<div class="table camera-table">
<div class="table-head">
<div class="tr">
<div class="th">操作</div>
<div class="th">设备名称</div>
<div class="th" style="width: 80px; flex: 0 80px;min-width: 80px;">设备类型</div>
<div class="th" style="width: 126px; flex: 0 126px;min-width: 126px;">设备IP</div>
<div class="th" style="width: 80px; flex: 0 80px;min-width: 80px;">设备端口</div>
<div class="th" style="width: 80px; flex: 0 80px;min-width: 80px;">用户名</div>
<div class="th">密码</div>
</div>
</div>
<div class="table-body" style="display:none;">
<div class="tr">
<div class="td">
<input type="checkbox" value="2">
<span>绑定</span>
</div>
<div class="td">设备名称</div>
<div class="td">设备类型</div>
<div class="td">设备IP</div>
<div class="td">设备端口</div>
<div class="td">用户名</div>
<div class="td">密码</div>
</div>
</div>
<div class="table-empty">
<div class="empty-img"></div>
<p>暂无数据</p>
</div>
</div>
</div>
<div class=""row>
<ul class="pagination"></ul>
</div>
</div>
`
let contentElm = document.createElement('div')
contentElm.innerHTML = html
this._DialogObject.contentAppChild(contentElm)
let all_elm = contentElm.getElementsByTagName('*')
this._DialogObject._element.body.style.width = '600px'
let attributeSelectElm = contentElm.getElementsByClassName(
'attribute-select'
)[0]
let linkAddBtnElm = contentElm.getElementsByClassName('link_add_btn')[0]
let openRichTextBtnElm = contentElm.getElementsByClassName(
'open-richText-btn'
)[0]
let attributeContent = this._DialogObject._element.content.getElementsByClassName(
'attribute-content'
)
for (let i = 0; i < attributeContent.length; i++) {
if (
attributeContent[i].className.indexOf(
'attribute-content-' + this._DialogObject.attribute.attributeType
) > -1
) {
attributeContent[i].style.display = 'block'
} else {
attributeContent[i].style.display = 'none'
}
}
attributeSelectElm.addEventListener('change', () => {
this._DialogObject.attribute.attributeType = attributeSelectElm.value
for (let i = 0; i < attributeContent.length; i++) {
if (
attributeContent[i].className.indexOf(
'attribute-content-' + this._DialogObject.attribute.attributeType
) > -1
) {
attributeContent[i].style.display = 'block'
} else {
attributeContent[i].style.display = 'none'
}
}
})
linkAddBtnElm.addEventListener('click', async () => {
if (
this._DialogObject._element.content.getElementsByClassName(
'link_add'
)[0].value
) {
this._DialogObject.attribute.link.content.push({
name: '链接',
url: this._DialogObject._element.content.getElementsByClassName(
'link_add'
)[0].value
})
this._DialogObject._element.content.getElementsByClassName(
'link_add'
)[0].value = ''
this.setAttributeLinkById(
nodeId,
this._DialogObject.attribute.link.content
)
} else {
DialogEvent.clickAddLink && DialogEvent.clickAddLink(nodeId)
}
})
openRichTextBtnElm.addEventListener('click', () => {
richText.open(
nodeId,
nodeId,
this._DialogObject.attribute.richTextContent
)
richText.primaryCallBack = content => {
this._DialogObject.attribute.richTextContent = content
}
})
let cameraNameElm = contentElm.getElementsByClassName('camera-name')[0]
let cameraSelectElm = contentElm.getElementsByClassName(
'camera-select'
)[0]
cameraNameElm.addEventListener('input', () => {
cameraName = cameraNameElm.value
})
this.cameraSelect && this.cameraSelect(cameraName)
cameraSelectElm.addEventListener('click', () => {
this.cameraSelect && this.cameraSelect(cameraName)
})
// let nameElm = contentElm.getElementsByClassName('flie-name')[0]
// nameElm.value = this.options.fileName
// nameElm.addEventListener('input', ()=>{
// this.options.fileName = nameElm.value
// })
// let selectElm = contentElm.getElementsByClassName('input-select')[0]
// let option = ''
// for(let key in this.dataArray[0].attr) {
// let o = `<option value="${key}">${key}</option>`
// option = option + o
// }
// selectElm.innerHTML = option
// selectElm.value = this.options.field
// selectElm.addEventListener('input', ()=>{
// this.options.field = selectElm.value
// })
// this._elms.fileName = nameElm
// this._elms.field = selectElm
} else {
if (this._DialogObject && this._DialogObject.close) {
this._DialogObject.close()
this._DialogObject = null
}
}
}
editContentById(nodeId, content) {
for (let i = 0; i < this.geojson.features.length; i++) {
if (this.geojson.features[i].id === nodeId) {
@ -1117,7 +873,7 @@ class Vector extends Base {
}
reset() {
this.fileName = this.originalOptions.fileName
this.name = this.originalOptions.name
this.field = this.originalOptions.field
}
@ -1332,7 +1088,7 @@ class Vector extends Base {
return trsElm
}
flyTo(id, options = {}) {
async flyTo(id, options = {}) {
setActiveViewer(0)
closeRotateAround(this.sdk)
closeViewFollow(this.sdk)
@ -1392,33 +1148,34 @@ class Vector extends Base {
}
}
} else {
if (
this.options.customView &&
this.options.customView.relativePosition &&
this.options.customView.orientation
) {
let orientation = {
heading: Cesium.Math.toRadians(
this.options.customView.orientation.heading || 0.0
),
pitch: Cesium.Math.toRadians(
this.options.customView.orientation.pitch || -60.0
),
roll: Cesium.Math.toRadians(
this.options.customView.orientation.roll || 0.0
)
}
let lng = this.options.customView.relativePosition.lng
let lat = this.options.customView.relativePosition.lat
let alt = this.options.customView.relativePosition.alt
let destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt)
this.sdk.viewer.camera.flyTo({
destination: destination,
orientation: orientation
})
} else {
if (this.range) {
if (this.range) {
if (
this.options.customView &&
this.options.customView.relativePosition &&
this.options.customView.orientation
) {
let orientation = {
heading: Cesium.Math.toRadians(
this.options.customView.orientation.heading || 0.0
),
pitch: Cesium.Math.toRadians(
this.options.customView.orientation.pitch || -60.0
),
roll: Cesium.Math.toRadians(
this.options.customView.orientation.roll || 0.0
)
}
let position = { lng: this.range[0], lat: this.range[1] }
position.alt = await this.getClampToHeight(position)
let lng = this.options.customView.relativePosition.lng + position.lng
let lat = this.options.customView.relativePosition.lat + position.lat
let alt = this.options.customView.relativePosition.alt + position.alt
let destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt)
this.sdk.viewer.camera.flyTo({
destination: destination,
orientation: orientation
})
} else {
let array = []
this.getClampToHeight({
lng: this.range[0],
@ -1537,164 +1294,6 @@ class Vector extends Base {
this.imgEntity = []
}
cameraSelect(cameraName, page) {
const type = {
'1': '海康',
'2': '大华'
}
let host = this.options.host
if (
this._DialogObject &&
this._DialogObject._element &&
this._DialogObject._element.content
) {
let paginationElm = that._DialogObject._element.content.getElementsByClassName(
'pagination'
)[0]
let attributeCameraElm = that._DialogObject._element.content.getElementsByClassName(
'attribute-content-camera'
)[0]
if (!paginationElm) {
return
}
if (!attributeCameraElm) {
return
}
generatePagination(paginationElm, 1, 10, 1)
} else {
return
}
let url = ''
const params = {
cameraName: cameraName,
page: !page || typeof page === 'object' ? 1 : page,
pageSize: 5
}
const queryString = new URLSearchParams(params).toString()
if (host.endsWith('yjearth4.0'))
url = `${host}/api/v1/cameraData/list?${queryString}`
else url = `${host}/yjearth4.0/api/v1/cameraData/list?${queryString}`
// url = this.options.path
fetch(url, {
method: 'get',
headers: {
'Content-Type': 'application/json',
token: getToken(),
Authorization: 'Bearer ' + getToken()
}
}).then(response => {
if (response.status === 200) {
response.json().then(data => {
if (data.code === 200 || data.code === 0) {
if (
!this._DialogObject ||
!this._DialogObject._element ||
!this._DialogObject._element.content
) {
return
}
let paginationElm = this._DialogObject._element.content.getElementsByClassName(
'pagination'
)[0]
let table = this._DialogObject._element.content.getElementsByClassName(
'camera-table'
)[0]
let tableContent = table.getElementsByClassName('table-body')[0]
tableContent.innerHTML = ''
if (data.data) {
if (data.data.list && data.data.list.length > 0) {
generatePagination(
paginationElm,
data.data.total,
10,
1,
pageIndex => {
this.cameraSelect &&
this.cameraSelect(cameraName, pageIndex)
}
)
table.getElementsByClassName('table-empty')[0].style.display =
'none'
tableContent.style.display = 'inline-flex'
for (let i = 0; i < data.data.list.length; i++) {
let tr = `
<div class="tr">
<div class="td">
<input type="checkbox" value="${data.data.list[i].ID}">
<span>绑定</span>
</div>
<div class="td">${data.data.list[i].cameraName}</div>
<div class="td" style="width: 80px; flex: 0 80px; min-width: 80px;">${type[data.data.list[i].type]
}</div>
<div class="td" style="width: 126px; flex: 0 126px;min-width: 126px;">${data.data.list[i].ip
}</div>
<div class="td" style="width: 80px; flex: 0 80px;min-width: 80px;">${data.data.list[i].port
}</div>
<div class="td" style="width: 80px; flex: 0 80px;min-width: 80px;">${data.data.list[i].userName
}</div>
<div class="td">${data.data.list[i].passWord}</div>
</div>`
let trElm = document
.createRange()
.createContextualFragment(tr)
let checkbox = trElm.querySelector('input[type="checkbox"]')
checkbox.addEventListener('change', () => {
if (checkbox.checked) {
this._DialogObject.attribute.camera.push(
data.data.list[i]
)
} else {
let newArray = this._DialogObject.attribute.camera.filter(
item => {
return item.ID !== data.data.list[i].ID
}
)
this._DialogObject.attribute.camera = newArray
}
})
tableContent.appendChild(trElm)
for (
let m = 0;
m < this._DialogObject.attribute.camera.length;
m++
) {
if (
this._DialogObject.attribute.camera[m].ID ===
data.data.list[i].ID
) {
checkbox.checked = true
break
}
}
}
}
if (data.data && data.data.total) {
generatePagination(
paginationElm,
data.data.total,
10,
1,
pageIndex => {
this.cameraSelect &&
this.cameraSelect(cameraName, pageIndex)
}
)
}
} else {
generatePagination(paginationElm, 1, 10, 1)
table.getElementsByClassName('table-empty')[0].style.display =
'flex'
tableContent.style.display = 'none'
}
} else {
console.error(data.message)
}
})
}
})
}
load(callback) {
if (this.#loaded) {
callback()

View File

@ -1274,15 +1274,8 @@ class WallRealStereoscopic extends Base {
this.labelBackgroundColorStart = this.originalOptions.label.backgroundColor[0]
this.labelBackgroundColorEnd = this.originalOptions.label.backgroundColor[1]
let positions = this.options.positions
let fromDegreesArray = []
let minimumHeights = []
let maximumHeights = []
for (let i = 0; i < positions.length; i++) {
fromDegreesArray.push(positions[i].lng, positions[i].lat, positions[i].alt)
minimumHeights.push(positions[i].alt)
maximumHeights.push(positions[i].alt + this.options.extrudedHeight)
}
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
// this.entity.polylineVolume.positions = Cesium.Cartesian3.fromDegreesArrayHeights(fromDegreesArray)
}
@ -1342,7 +1335,7 @@ class WallRealStereoscopic extends Base {
}
material = new Cesium.CustomMaterialSource({
image: this.getSourceRootPath() + `/img/material/${img}.png`,
image: this.getSourceRootPath() + `/img/material/${img}.jpg`,
color: this.options.color,
is2D: false,
repeats: new Cesium.CallbackProperty(() => {
@ -1469,6 +1462,7 @@ class WallRealStereoscopic extends Base {
}
}
let rightEvent = (movement, cartesian) => {
that.closeNodeEdit = ()=>{}
if (selectPoint) {
that.options.positions[selectPoint.index] = originalPosition
if (isAdd) {
@ -1489,6 +1483,7 @@ class WallRealStereoscopic extends Base {
that.tip.destroy()
that.material = that.material
}
that.closeNodeEdit = rightEvent
function update(isCallback = false) {
if (that.entity) {
@ -1632,6 +1627,8 @@ class WallRealStereoscopic extends Base {
}
}
closeNodeEdit() {}
update() {
if (this.entity) {
let positions = this.calculatePositions()

View File

@ -803,6 +803,15 @@ class WallStereoscopic extends Base {
item.checked = this.noseToTail
})
for (let i = 0; i < this.nodePoints.length; i++) {
this.sdk.viewer.entities.remove(this.nodePoints[i])
}
this.nodePoints = []
YJ.Measure.SetMeasureStatus(false)
this.event && this.event.destroy()
this.event && this.tip.destroy()
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
async remove() {
@ -995,6 +1004,7 @@ class WallStereoscopic extends Base {
}
}
let rightEvent = (movement, cartesian) => {
that.closeNodeEdit = ()=>{}
if (selectPoint) {
that.options.positions[selectPoint.index] = originalPosition
if (isAdd) {
@ -1023,6 +1033,8 @@ class WallStereoscopic extends Base {
that.material = that.material
}
that.closeNodeEdit = rightEvent
that.event.mouse_left(leftEvent)
that.event.mouse_right(rightEvent)
@ -1109,6 +1121,8 @@ class WallStereoscopic extends Base {
}
}
closeNodeEdit() {}
setDIV(options = { domid: "", x: 10, y: 10 }) {
options.x = (options.x || options.x === 0) ? options.x : 10
options.y = (options.y || options.y === 0) ? options.y : 10

View File

@ -276,6 +276,8 @@ class WaterSurface extends Base {
this.animationSpeed = this.originalOptions.animationSpeed
this.amplitude = this.originalOptions.amplitude
this.height = this.originalOptions.height
syncData(this.sdk, this.options.id)
syncSplitData(this.sdk, this.options.id)
}
/**

View File

@ -8,7 +8,7 @@ let fontData = [
{
name: '思源黑体',
value: '思源黑体',
font: 'SourceHanSansTi',
font: 'SourceHanSansTiM',
key: '1'
},
{

View File

@ -1,4 +1,4 @@
let list = ['icon-py', 'icon-edit', 'icon-add', 'icon-add2', 'icon-minus', 'icon-play', 'icon-pause', 'icon-updateheight', 'icon-draw', 'icon-positions', 'icon-reset', 'icon-xj', 'icon-yj', 'icon-zj', 'icon-close', 'icon-query', 'icon-route', 'icon-copy', 'icon-load', 'icon-rubric', 'icon-pen', 'icon-cross', 'icom-confirm']
let list = ['icon-py', 'icon-edit', 'icon-add', 'icon-add2', 'icon-minus', 'icon-play', 'icon-pause', 'icon-updateheight', 'icon-draw', 'icon-positions', 'icon-reset', 'icon-xj', 'icon-yj', 'icon-zj', 'icon-close', 'icon-query', 'icon-route', 'icon-copy', 'icon-load', 'icon-rubric', 'icon-pen', 'icon-cross', 'icom-confirm', 'icon-delete', 'icon-resetView']
function setSvg() {
let svgElm = document.createElement('svg');
svgElm.xmlns = 'http://www.w3.org/2000/svg'
@ -14,7 +14,7 @@ function setSvg() {
.then(r => r.text())
.then(b => {
const xmlDoc = parser.parseFromString(b, 'text/xml').getElementsByTagName('svg')[0]
if(xmlDoc) {
if (xmlDoc) {
xmlDoc.id = 'yj-' + name
svgElm.appendChild(xmlDoc)
}

View File

@ -8,7 +8,7 @@
import md5 from 'js-md5'
import { Proj } from './proj'
import { open as projConvertOpen, close as projConvertClose } from './projConvert'
import { open as projectionConvertOpen, close as projectionConvertClose } from './projectionConvert'
import { open as projectionConvertOpen, close as projectionConvertClose, updateCoordinates } from './projectionConvert'
import { setActiveViewer, closeRotateAround, closeViewFollow } from '../Global/global'
import FlowPictureMaterialProperty from '../Obj/Materail/FlowPictureMaterialProperty'
import { syncData, get3DView } from '../Global/MultiViewportMode'
@ -709,7 +709,8 @@ class Tools {
color: color,
image: this.getSourceRootPath() + `/img/arrow/${type - 6}.png`,
space: newParam.space,
speed: newParam.speed
speed: newParam.speed,
rotate: newParam.rotate
}
param.speed = newParam.rotate ? param.speed : 0 - param.speed
@ -733,11 +734,11 @@ class Tools {
myImg.src = options.image
myImg.onload = function () {
options.space = Math.max(0.1, options.space);
if (options.speed > 0 || options.speed == 0) {
if (options.speed > 0 || (options.speed == 0 && options.rotate)) {
canvasEle.width = myImg.width * (options.space + 1)
canvasEle.height = myImg.height
ctx.drawImage(myImg, myImg.width * (options.space / 2), 0)
} else {
} else if (options.speed < 0 || (options.speed == 0 && !options.rotate)) {
ctx.clearRect(0, 0, canvasEle.width, canvasEle.height);
canvasEle.width = myImg.width * (options.space + 1)
canvasEle.height = myImg.height
@ -1220,7 +1221,7 @@ class Tools {
let pos3 = new Cesium.Cartesian3.fromDegrees(position.lng, position.lat);
let position1
try {
position1 = await this.sdk.viewer.scene.clampToHeight(pos3, objectsToExclude) || pos3
position1 = await this.sdk.viewer.scene.clampToHeight({ x: pos3.x, y: pos3.y, z: pos3.z }, objectsToExclude) || pos3
} catch (error) {
position1 = pos3
}
@ -1297,6 +1298,9 @@ class Tools {
projectionConvertClose()
}
}
updateCoordinates(date1, date2) {
updateCoordinates(date1, date2)
}
/**
* @desc 导出excel
@ -1541,10 +1545,111 @@ class Tools {
/**两点之间的距离 */
pointDistance(p1, p2) {
let centerDegress = Cesium.Cartesian3.fromDegrees(p1.lng, p1.lat)
let point = Cesium.Cartesian3.fromDegrees(p2, p2)
let point = Cesium.Cartesian3.fromDegrees(p2.lng, p2.lat)
let distance = Cesium.Cartesian3.distance(point, centerDegress)
return distance
}
/**
* Web墨卡托坐标转WGS84经纬度
* @param {number} x - 墨卡托X坐标
* @param {number} y - 墨卡托Y坐标
* @returns {Array} [经度, 纬度]
*/
mercatorToWGS84(x, y) {
// 地球周长的一半
const earthHalfCircumference = 20037508.34
// 计算经度
const lon = (x / earthHalfCircumference) * 180
// 计算纬度(包含反双曲正切变换)
let lat = (y / earthHalfCircumference) * 180
lat = (180 / Math.PI) * (2 * Math.atan(Math.exp((lat * Math.PI) / 180)) - Math.PI / 2)
return [lon, lat]
}
/**
* CGCS2000 3度带坐标转WGS84经纬度
* @param {number} x - CGCS2000 X坐标不含带号
* @param {number} y - CGCS2000 Y坐标
* @param {number} centralMeridian - 中央经线如120
* @returns {Array} [经度, 纬度]
*/
convertCGCStoWGS84(x, y, centralMeridian) {
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
const cgcs2000 =
'+proj=tmerc +lat_0=0 +lon_0=' +
centralMeridian +
' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs'
// 执行坐标转换
const point = proj4(cgcs2000, wgs84, [x, y]);
return point;
}
/**
* 提取带号并转换CGCS2000坐标到WGS84
* @param {number} xWithZone - 带代号的X坐标如40543210
* @param {number} y - Y坐标
* @returns {Array} [经度, 纬度]
*/
convertCGCSToWGS84WithZone(xWithZone, y) {
// 将X坐标转为字符串以提取带号
const xStr = xWithZone.toString();
// 提取带号前2位和实际X坐标
const zoneNumber = parseInt(xStr.substring(0, 2));
const actualX = parseInt(xStr.substring(2));
// 计算中央经线× 带号
const centralMeridian = zoneNumber * 3;
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000 = `+proj=tmerc +lat_0=0 +lon_0=${centralMeridian} +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;
// 执行坐标转换
const point = proj4(cgcs2000, wgs84, [actualX, y]);
return point;
}
/**
* CGCS2000六度带坐标转WGS84经纬度
* @param {number} x - CGCS2000 X坐标无带号
* @param {number} y - CGCS2000 Y坐标
* @param {number} centralMeridian - 中央经线如117
* @returns {Array} [经度, 纬度]
*/
convertCGCS2000_6ToWGS84(x, y, centralMeridian) {
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000_6 = '+proj=tmerc +lat_0=0 +lon_0=' + centralMeridian + ' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs';
// 执行坐标转换
const point = proj4(cgcs2000_6, wgs84, [x, y]);
return point;
}
convertCGCS2000_6ToWGS84WithZone(xWithZone, y) {
// 将X坐标转为字符串以提取带号
const xStr = xWithZone.toString();
// 提取带号前2位
const zoneNumber = parseInt(xStr.substring(0, 2));
// 计算中央经线:六度带中央经线 = 带号 × 6 - 3
const centralMeridian = zoneNumber * 6 - 3;
// 实际X坐标去除带号
const actualX = parseInt(xStr.substring(2));
// 定义坐标系参数
const wgs84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
const cgcs2000_6 = '+proj=tmerc +lat_0=0 +lon_0=' + centralMeridian + ' +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs';
// 执行坐标转换
const point = proj4(cgcs2000_6, wgs84, [actualX, y]);
return point;
}
}
export default Tools

View File

@ -1021,18 +1021,26 @@ class Proj {
function tenToThePowerOfN(n) {
return Math.pow(10, n);
}
let isF = false
if(degrees<0) {
isF = true
}
degrees = Math.abs(degrees)
let d = Math.floor(degrees); // 获取整度
let pow1 = tenToThePowerOfN(getDecimalPlaces(degrees))
let x = Math.floor((degrees - d) * pow1 * 60) / pow1; // 获取秒3600分之一度
let m = Math.floor(x);
if(isF) {
d = -d
}
let pow = tenToThePowerOfN(getDecimalPlaces(x))
let s = Math.floor((x - m) * pow) / pow * 60; // 获取秒3600分之一度
if (isDM) {
return d + "°" + Number(x.toFixed(4)) + "'"; // 返回度分格式
return d + "°" + (Math.floor(x * 10000) / 10000) + "'"; // 返回度分格式
}
else {
return d + "°" + m + "'" + s.toFixed(2) + '"'; // 返回度分秒格式
return d + "°" + m + "'" + Math.floor(s * 100) / 100 + '"'; // 返回度分秒格式
}
}

View File

@ -3,6 +3,7 @@ import { Proj } from './proj'
import { legp } from '../Obj/Element/datalist';
import Tools from "../Tools";
let _DialogObject
let Draw
const open = async (sdk, closeCallBack) => {
let proj = new Proj()
let tools = new Tools(sdk)
@ -139,6 +140,7 @@ const open = async (sdk, closeCallBack) => {
for (let i = 0; i < items.length; i++) {
let type = items[i].getAttribute('data-type')
let convertElm = items[i].getElementsByClassName('convert')[0]
let pickUpElm = items[i].getElementsByClassName('pickUp')[0]
let copyElm = items[i].getElementsByClassName('icon-copy-box')[0]
let clipboard = new ClipboardJS(copyElm, {
text: (trigger) => {
@ -191,6 +193,54 @@ const open = async (sdk, closeCallBack) => {
clipboard.on('error', function (e) {
tools.message({ type: 'warning', text: '复制失败' })
});
let DrawPoint = require('../Draw/drawPoint').default
pickUpElm.addEventListener('click', () => {
Draw = new DrawPoint(sdk)
Draw.start((a, positions) => {
switch (type * 1) {
case 0:
items[i].getElementsByClassName('lng')[0].value = positions.lng
items[i].getElementsByClassName('lat')[0].value = positions.lat
break;
case 1:
let lngDM = proj.degreesToDMS(positions.lng, true)
let latDM = proj.degreesToDMS(positions.lat, true)
let lngdnArr1 = lngDM.split('°')
let lngdnArr2 = lngdnArr1[1].split("'")
let latdnArr1 = latDM.split('°')
let latdnArr2 = latdnArr1[1].split("'")
contentElm.getElementsByClassName('lng-dm-d')[0].value = lngdnArr1[0]
contentElm.getElementsByClassName('lng-dm-m')[0].value = lngdnArr2[0]
contentElm.getElementsByClassName('lat-dm-d')[0].value = latdnArr1[0]
contentElm.getElementsByClassName('lat-dm-m')[0].value = latdnArr2[0]
break
case 2:
let lngDMS = proj.degreesToDMS(positions.lng)
let latDMS = proj.degreesToDMS(positions.lat)
let lngdnsArr1 = lngDMS.split('°')
let lngdnsArr2 = lngdnsArr1[1].split("'")
let lngdnsArr3 = lngdnsArr2[1].split('"')
let latdnsArr1 = latDMS.split('°')
let latdnsArr2 = latdnsArr1[1].split("'")
let latdnsArr3 = latdnsArr2[1].split('"')
contentElm.getElementsByClassName('lng-dms-d')[0].value =
lngdnsArr1[0]
contentElm.getElementsByClassName('lng-dms-m')[0].value =
lngdnsArr2[0]
contentElm.getElementsByClassName('lng-dms-s')[0].value =
lngdnsArr3[0]
contentElm.getElementsByClassName('lat-dms-d')[0].value =
latdnsArr1[0]
contentElm.getElementsByClassName('lat-dms-m')[0].value =
latdnsArr2[0]
contentElm.getElementsByClassName('lat-dms-s')[0].value =
latdnsArr3[0]
break
default:
break;
}
})
})
convertElm.addEventListener('click', () => {
// let a = proj.degreesToDMS(100.345546743)
let lng,
@ -319,10 +369,12 @@ const open = async (sdk, closeCallBack) => {
items[i].style.order = 0
items[i].style.display = 'block'
convertElm.style.display = 'inline-block'
pickUpElm.style.display = 'inline-block'
} else {
items[i].style.order = 1
items[i].style.display = 'none'
convertElm.style.display = 'none'
pickUpElm.style.display = 'none'
}
}
@ -370,10 +422,12 @@ const open = async (sdk, closeCallBack) => {
if (selectData[i].value === selectDataLegpElm.value) {
for (let m = 0; m < items.length; m++) {
let convertElm = items[m].getElementsByClassName('convert')[0]
let pickUpElm = items[m].getElementsByClassName('pickUp')[0]
if (m == selectData[i].key) {
items[m].style.order = 0
items[m].style.display = 'block'
convertElm.style.display = 'inline-block'
pickUpElm.style.display = 'inline-block'
} else {
if (m === 0) {
items[m].style.order = 2
@ -383,6 +437,7 @@ const open = async (sdk, closeCallBack) => {
}
items[m].style.display = 'none'
convertElm.style.display = 'none'
pickUpElm.style.display = 'none'
}
}
break
@ -397,6 +452,7 @@ const close = () => {
_DialogObject.close()
_DialogObject = null
}
Draw && Draw.end()
}
export { open, close }

View File

@ -7,6 +7,7 @@ import Tools from '../Tools'
let _DialogObject
let tip
let event
let datalistLeftInput, datalistRightInput
const open = async (sdk, closeCallBack) => {
let topls = new Tools()
let proj = new Proj()
@ -89,23 +90,23 @@ const open = async (sdk, closeCallBack) => {
}
)
})
let legpObjectLeft = legp(contentElm.getElementsByClassName('left')[0], ".datalist_left")
legpObjectLeft.legp_search(tagData, true)
let legpObjectRight = legp(contentElm.getElementsByClassName('right')[0], ".datalist_right")
legpObjectRight.legp_search(tagData, true)
// let legpObjectLeft = legp(contentElm.getElementsByClassName('left')[0], ".datalist_left")
// legpObjectLeft.legp_search(tagData, true)
// let legpObjectRight = legp(contentElm.getElementsByClassName('right')[0], ".datalist_right")
// legpObjectRight.legp_search(tagData, true)
let pickElm = contentElm.getElementsByClassName('pick')[0]
let copyElm = contentElm.getElementsByClassName('copy')[0]
let sourceCopyElm = contentElm.getElementsByClassName('sourceCopy')[0]
let datalistLeftInput = contentElm.getElementsByClassName('datalist_left')[0].getElementsByTagName('input')[0]
datalistLeftInput.value = tagData[0].value
legpObjectLeft.legp_searchActive(tagData[0].value)
// let datalistLeftInput = contentElm.getElementsByClassName('datalist_left')[0].getElementsByTagName('input')[0]
// datalistLeftInput.value = tagData[0].value
// legpObjectLeft.legp_searchActive(tagData[0].value)
let datalistRightInput = contentElm.getElementsByClassName('datalist_right')[0].getElementsByTagName('input')[0]
datalistRightInput.value = tagData[0].value
legpObjectRight.legp_searchActive(tagData[0].value)
// let datalistRightInput = contentElm.getElementsByClassName('datalist_right')[0].getElementsByTagName('input')[0]
// datalistRightInput.value = tagData[0].value
// legpObjectRight.legp_searchActive(tagData[0].value)
@ -119,35 +120,35 @@ const open = async (sdk, closeCallBack) => {
let beforeleftVal = 'EPSG:4326'
let beforerightVal = 'EPSG:4326'
// 监听输入事件(实时触发)
datalistLeftInput.addEventListener('input', (e) => {
const newValue = e.target.value;
if (leftXElm.value && leftYElm.value) {
let result = proj.convert([{ x: Number(leftXElm.value), y: Number(leftYElm.value) }], beforeleftVal, newValue)
if (result.code === 0) {
leftXElm.value = result.points[0].x
leftYElm.value = result.points[0].y
}
}
beforeleftVal = newValue
// datalistLeftInput.addEventListener('input', (e) => {
// const newValue = e.target.value;
// if (leftXElm.value && leftYElm.value) {
// let result = proj.convert([{ x: Number(leftXElm.value), y: Number(leftYElm.value) }], beforeleftVal, newValue)
// if (result.code === 0) {
// leftXElm.value = result.points[0].x
// leftYElm.value = result.points[0].y
// }
// }
// beforeleftVal = newValue
// 可以在这里调用legp_searchActive方法
legpObjectLeft.legp_searchActive(newValue);
});
// // 可以在这里调用legp_searchActive方法
// // legpObjectLeft.legp_searchActive(newValue);
// });
datalistRightInput.addEventListener('input', (e) => {
const newValue = e.target.value;
if (rightXElm.value && rightYElm.value) {
let result = proj.convert([{ x: Number(rightXElm.value), y: Number(rightYElm.value) }], beforerightVal, newValue)
if (result.code === 0) {
rightXElm.value = result.points[0].x
rightYElm.value = result.points[0].y
}
}
// datalistRightInput.addEventListener('input', (e) => {
// const newValue = e.target.value;
// if (rightXElm.value && rightYElm.value) {
// let result = proj.convert([{ x: Number(rightXElm.value), y: Number(rightYElm.value) }], beforerightVal, newValue)
// if (result.code === 0) {
// rightXElm.value = result.points[0].x
// rightYElm.value = result.points[0].y
// }
// }
beforerightVal = datalistRightInput.value
// 可以在这里调用legp_searchActive方法
legpObjectRight.legp_searchActive(newValue);
});
// beforerightVal = datalistRightInput.value
// // 可以在这里调用legp_searchActive方法
// // legpObjectRight.legp_searchActive(newValue);
// });
pickElm.addEventListener('click', () => {
tip && tip.destroy()
@ -165,7 +166,7 @@ const open = async (sdk, closeCallBack) => {
let pos84 = topls.cartesian3Towgs84(cartesian, sdk.viewer)
tip && tip.destroy()
event && event.destroy()
let result = proj.convert([{ x: Number(pos84.lng), y: Number(pos84.lat) }], 'EPSG:4326', datalistLeftInput.value)
let result = proj.convert([{ x: Number(pos84.lng), y: Number(pos84.lat) }], 'EPSG:4326', datalistLeftInput)
if (result.code === 0) {
leftXElm.value = result.points[0].x
leftYElm.value = result.points[0].y
@ -183,7 +184,7 @@ const open = async (sdk, closeCallBack) => {
topls.message({ type: 'warning', text: '请输入源坐标' })
return
}
let result = proj.convert([{ x: Number(leftXElm.value), y: Number(leftYElm.value) }], datalistLeftInput.value, datalistRightInput.value)
let result = proj.convert([{ x: Number(leftXElm.value), y: Number(leftYElm.value) }], datalistLeftInput, datalistRightInput)
if (result.code === 0) {
rightXElm.value = result.points[0].x
rightYElm.value = result.points[0].y
@ -240,4 +241,9 @@ const close = () => {
event && event.destroy()
}
export { open, close }
const updateCoordinates = (select1, select2) => {
datalistLeftInput = select1
datalistRightInput = select2
}
export { open, close, updateCoordinates }

View File

@ -27,6 +27,7 @@ import {
import { syncSplitData, setActiveId } from '../Global/SplitScreen'
import { apiQueryGoodsList } from '../Tools/getGoodsList'
import YJColorPicker from "../Obj/Element/yj-color-picker";
import { destroy as mapxDestroy } from "../Global/MapX";
// window.check = check
class YJEarth {
@ -168,6 +169,7 @@ class YJEarth {
this.viewer = new Cesium.Viewer(this.div_id, this.options)
this.viewer.scene.imageryLayers._layers[0].notes = 'default-base-map'
this.viewer._shadows = this.viewer.shadows
this.viewer._container.style.display = 'flex'
this.viewer.scene.screenSpaceCameraController.maximumZoomDistance = 50000000
@ -198,7 +200,7 @@ class YJEarth {
let fontData = [
{
name: '思源黑体',
value: 'SourceHanSansTi',
value: 'SourceHanSansTiM',
url: tools.getSourceRootPath() + '/custom/fonts/SourceHanSansCN-Medium.otf',
format: 'opentype'
},
@ -571,6 +573,7 @@ class YJEarth {
}
if (this.viewer) {
mapxDestroy(this)
if (this.viewer.entities) {
this.viewer.entities.removeAll()
}

View File

@ -17,7 +17,8 @@ function on(
hls: false,
host: '',
username: '',
password: ''
password: '',
token: ''
}
) {
// window.THREE = THREE
@ -126,6 +127,7 @@ function on(
resolve()
})
} else {
setToken(options.token)
resolve()
}
}

View File

@ -20096,8 +20096,8 @@
var testing =
'<div class="compass" title="拖动外圈:旋转视图,' +
'拖动内陀螺仪:自由轨道,' +
'双击:重置视图' +
'提示您还可以按住CTRL键并拖动地图来释放轨道." data-bind="visible: showCompass, event: { mousedown: handleMouseDown, dblclick: handleDoubleClick }">' +
'双击:重置视图' +
'" data-bind="visible: showCompass, event: { mousedown: handleMouseDown, dblclick: handleDoubleClick }">' +
'<div class="compass-outer-ring-background"></div>' +
" <div class=\"compass-rotation-marker\" data-bind=\"visible: isOrbiting, style: { transform: 'rotate(-' + orbitCursorAngle + 'rad)', '-webkit-transform': 'rotate(-' + orbitCursorAngle + 'rad)', opacity: orbitCursorOpacity }, cesiumSvgPath: { path: svgCompassRotationMarker, width: 145, height: 145 }\"></div>" +
" <div class=\"compass-outer-ring\" title=\"单击并拖动以旋转相机\" data-bind=\"style: { transform: 'rotate(-' + heading + 'rad)', '-webkit-transform': 'rotate(-' + heading + 'rad)' }, cesiumSvgPath: { path: svgCompassOuterRing, width: 145, height: 145 }\"></div>" +

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.65869140625" height="16" viewBox="0 0 15.65869140625 16" fill="none"><path d="M14.9742 4.33334L0.682905 4.33334C0.308133 4.33334 0 4.03334 0 3.66666C0 3.3 0.308133 3 0.682905 3L14.9742 3C15.349 3 15.6571 3.3 15.6571 3.66666C15.6571 4.03334 15.349 4.33334 14.9742 4.33334Z" fill="#FFFFFF" ></path><path d="M6.02972 3.48334C6.01307 3.38334 6.00474 3.275 6.00474 3.16666C6.00474 2.15834 6.82924 1.33334 7.83697 1.33334C8.84469 1.33334 9.66919 2.15834 9.66919 3.16666C9.66919 3.275 9.66086 3.375 9.64421 3.48334L10.9851 3.48334C10.9934 3.38334 11.0017 3.275 11.0017 3.16666C11.0017 1.41666 9.5859 0 7.83697 0C6.08803 0 4.67223 1.41666 4.67223 3.16666C4.67223 3.275 4.68054 3.375 4.68888 3.48334L6.02972 3.48334ZM12.4925 3.64166L12.4925 14.6667L3.16481 14.6667L3.16481 3.64166L1.83228 3.64166L1.83228 14.9583C1.83228 15.5333 2.29867 16 2.87332 16L12.784 16C13.3586 16 13.825 15.5333 13.825 14.9583L13.825 3.64166L12.4925 3.64166Z" fill="#FFFFFF" ></path><path d="M5.50491 12.4834L5.48826 12.4834C5.12182 12.4834 4.83032 12.1917 4.83032 11.8251L4.83032 7.14172C4.83032 6.77506 5.12182 6.4834 5.48826 6.4834L5.50491 6.4834C5.87137 6.4834 6.16285 6.77506 6.16285 7.14172L6.16285 11.8334C6.16285 12.1917 5.87137 12.4834 5.50491 12.4834ZM7.83683 12.4834L7.82018 12.4834C7.45373 12.4834 7.16224 12.1917 7.16224 11.8251L7.16224 7.14172C7.16224 6.77506 7.45373 6.4834 7.82018 6.4834L7.83683 6.4834C8.20327 6.4834 8.49477 6.77506 8.49477 7.14172L8.49477 11.8334C8.49477 12.1917 8.20327 12.4834 7.83683 12.4834ZM10.1688 12.4834L10.1521 12.4834C9.78565 12.4834 9.49417 12.1917 9.49417 11.8251L9.49417 7.14172C9.49417 6.77506 9.78565 6.4834 10.1521 6.4834L10.1688 6.4834C10.5352 6.4834 10.8267 6.77506 10.8267 7.14172L10.8267 11.8334C10.8267 12.1917 10.5352 12.4834 10.1688 12.4834Z" fill="#FFFFFF" ></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
static/img/cross_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -15,7 +15,7 @@ function resolve(dir) {
// let buildPath = 'F:\\workspace\\code\\electronic-sand-table-3.0\\static\\lib'
// let buildPath = 'E:\\sourceCode\\单机版-网络版共享后台\\gisWeb4.0\\static\\lib'
let buildPath = 'D:\\project\\sdk4_demo - 副本\\sdk4_demo\\sdk'
let buildPath = 'D:\\project\\4.0_new\\sdk4_demo_new\\sdk'
// let buildPath = 'G:\\fs2\\yj\\4.0\\static\\sdk'
// let buildPath = 'D:\\project\\sdk_vue2\\public\\sdk'
// let buildPath = 'D:\\ProgramFiles\\dazugaj_platform\\resources\\app\\dist\\electron\\static\\lib'