区块链技术博客
www.b2bchain.cn

Cesium 测量功能求职学习资料

本文介绍了Cesium 测量功能求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

测量是一个基本功能,网上有很多关于 Cesium 测量的技术文章,原理都差不多,每个人都可以写出有自己风格的测量小工具。

测量是一个交互过程,需要监听地图事件,可以通过 ScreenSpaceEventHandler 来注册事件。交互应该有一些反馈信息,需要在地图动态添加一些元素 (如:线),利用 CallbackProperty 来实现。

下面介绍下距离测量的实现思路(步骤):
1、开始测量,监听鼠标点击事件( LEFT_CLICK ),记录起点坐标;
2、监听鼠标移动事件( MOUSE_MOVE ),记录其坐标值,绘制起点与移动点间的连线,计算两点之间的距离;
3、监听鼠标右击事件( RIGHT_CLICK ),测量结束,销毁事件句柄(ScreenSpaceEventHandler);

具体实现代码如下:
“`javascript
import * as Cesium from ‘cesium’
import * as MapUtil from ‘./utils/common’

export default class MeasureMangner {
constructor (viewer) {
this.viewer = viewer
}

distance () {
const viewer = this.viewer
// 存储点
const positions = []
// 存储标签
let label = null
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
// 注册鼠标左击事件
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.position, viewer)
if (!cartesian) return
positions.push(cartesian.clone())
if (positions.length >= 2) {
handler.destroy()
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.endPosition, viewer)
if (!cartesian) return
if (positions.length >= 2) {
positions.pop()
positions.push(cartesian.clone())
} else if (positions.length === 1) {
positions.push(cartesian.clone())
this.addLine(positions)
label = this.addLabel(positions[0], this.getLength(positions))
}
if (label) {
label.label.text.setValue(this.getLength(positions))
label.position.setValue(positions[1])
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
handler.setInputAction(evt => {
handler.destroy()

测量是一个基本功能,网上有很多关于 Cesium 测量的技术文章,原理都差不多,每个人都可以写出有自己风格的测量小工具。

测量是一个交互过程,需要监听地图事件,可以通过 ScreenSpaceEventHandler 来注册事件。交互应该有一些反馈信息,需要在地图动态添加一些元素 (如:线),利用 CallbackProperty 来实现。

下面介绍下距离测量的实现思路(步骤):
1、开始测量,监听鼠标点击事件( LEFT_CLICK ),记录起点坐标;
2、监听鼠标移动事件( MOUSE_MOVE ),记录其坐标值,绘制起点与移动点间的连线,计算两点之间的距离;
3、监听鼠标右击事件( RIGHT_CLICK ),测量结束,销毁事件句柄(ScreenSpaceEventHandler);

具体实现代码如下:
“`javascript
import * as Cesium from ‘cesium’
import * as MapUtil from ‘./utils/common’

export default class MeasureMangner {
constructor (viewer) {
this.viewer = viewer
}

distance () {
const viewer = this.viewer
// 存储点
const positions = []
// 存储标签
let label = null
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
// 注册鼠标左击事件
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.position, viewer)
if (!cartesian) return
positions.push(cartesian.clone())
if (positions.length >= 2) {
handler.destroy()
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.endPosition, viewer)
if (!cartesian) return
if (positions.length >= 2) {
positions.pop()
positions.push(cartesian.clone())
} else if (positions.length === 1) {
positions.push(cartesian.clone())
this.addLine(positions)
label = this.addLabel(positions[0], this.getLength(positions))
}
if (label) {
label.label.text.setValue(this.getLength(positions))
label.position.setValue(positions[1])
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
handler.setInputAction(evt => {
handler.destroy()

测量是一个基本功能,网上有很多关于 Cesium 测量的技术文章,原理都差不多,每个人都可以写出有自己风格的测量小工具。

测量是一个交互过程,需要监听地图事件,可以通过 ScreenSpaceEventHandler 来注册事件。交互应该有一些反馈信息,需要在地图动态添加一些元素 (如:线),利用 CallbackProperty 来实现。

下面介绍下距离测量的实现思路(步骤):
1、开始测量,监听鼠标点击事件( LEFT_CLICK ),记录起点坐标;
2、监听鼠标移动事件( MOUSE_MOVE ),记录其坐标值,绘制起点与移动点间的连线,计算两点之间的距离;
3、监听鼠标右击事件( RIGHT_CLICK ),测量结束,销毁事件句柄(ScreenSpaceEventHandler);

具体实现代码如下:
“`javascript
import * as Cesium from ‘cesium’
import * as MapUtil from ‘./utils/common’

export default class MeasureMangner {
constructor (viewer) {
this.viewer = viewer
}

distance () {
const viewer = this.viewer
// 存储点
const positions = []
// 存储标签
let label = null
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
// 注册鼠标左击事件
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.position, viewer)
if (!cartesian) return
positions.push(cartesian.clone())
if (positions.length >= 2) {
handler.destroy()
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
handler.setInputAction(evt => {
var cartesian = MapUtil.getCatesian3FromPX(evt.endPosition, viewer)
if (!cartesian) return
if (positions.length >= 2) {
positions.pop()
positions.push(cartesian.clone())
} else if (positions.length === 1) {
positions.push(cartesian.clone())
this.addLine(positions)
label = this.addLabel(positions[0], this.getLength(positions))
}
if (label) {
label.label.text.setValue(this.getLength(positions))
label.position.setValue(positions[1])
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
handler.setInputAction(evt => {
handler.destroy()

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Cesium 测量功能求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们