cesium--画线

前言

我想在地球上用鼠标画线,并完成相应的业务逻辑
翻看api,找到沙盒;
关键词:Polyline

过程

找到沙盒例子,copy代码,看看效果
cesium--画线_第1张图片
js代码

//测量点击事件
    $("#start").click(function () {
        var line = parent.viewer.entities.add({
            name: 'Red line on terrain',
            polyline: {
                positions: parent.Cesium.Cartesian3.fromDegreesArray([-75, 35,-125, 35]),
                width: 5,
                material: parent.Cesium.Color.RED,
                clampToGround: true
            }
        })

    })

嗯,效果还可以,能画线了,在想想怎么测距离,百度,发现自己竟然还要知道坐标系的概念,还要会算…崩溃了;硬着头皮开始搞.

坐标系介绍

cesium里面有两种常用坐标系:
1.WGS84
2.笛卡尔(就是我们高中学的几何坐标系)
cesium--画线_第2张图片
cesium中用的坐标系及API关键字

  • 平面坐标系(Cartesian2)
  • 笛卡尔坐标(Cartesian3)
  • WGS84相关(Cargraphic弧度)

由于cesium中没有直接把笛卡尔转成经纬度的,所以要通过弧度进行中间转换
相关API操作如下:

API 说明
Cesium.Cartographic.fromCartesian(cartesian, ellipsoid, result) 笛卡尔转弧度
Cesium.Cartographic.fromDegrees(longitude, latitude, height, result) 经纬度转弧度(度单位)
Cesium.CesiumMath.toDegrees(radians) 弧度转度
Cesium.CesiumMath.toRadians(degrees) 度转弧度
Cesium.Cartographic.fromRadians(longitude, latitude, height, result) 经纬度转弧度(弧度单位)
Cesium.Cartographic.toCartesian(cartographic, ellipsoid, result) 弧度转笛卡尔
var pick1= scene.globe.pick(viewer.camera.getPickRay(pt1), scene) //其中pt1为一个二维屏幕坐标 平面坐标转三维坐标(其实都是笛卡尔坐标)
var geoPt1= scene.globe.ellipsoid.cartesianToCartographic(pick1) //其中pick1是一个Cesium.Cartesian3对象 笛卡尔三维坐标转地理坐标
var point1=[geoPt1.longitude / Math.PI * 180,geoPt1.latitude / Math.PI * 180]; //其中geoPt1是一个地理坐标 地理坐标转经纬度
var cartographic = Cesium.Cartographic.fromDegree(point) //point是经纬度值 经纬度转地理坐标(弧度)
var coord_wgs84 = Cesium.Cartographic.fromDegrees(lng, lat, alt);//单位:度,度,米 经纬度转地理坐标
var cartesian = Cesium.Cartesian3.fromDegree(point) 经纬度转笛卡尔坐标

计算两个三维坐标点之间的距离

var d=Cesium.Cartesian3.distance(Cartesian3x1,Cartesian3x2);//x1,x2都是笛卡尔坐标系

笛卡尔坐标系api

api 说明
Cesium.Cartesian3.abs(cartesian, result) 计算绝对值
Cesium.Cartesian3.add(left, right, result) 计算两个笛卡尔的分量和
Cesium.Cartesian3.angleBetween(left, right) 计算角度(弧度制)
Cesium.Cartesian3.cross(left, right, result) 计算叉积
Cesium.Cartesian3.distance(left, right) 计算两点距离
Cesium.Cartesian3.distanceSquared(left, right) 计算两点平方距离
Cesium.Cartesian3.divideByScalar(cartesian, scalar, result) 计算标量除法
Cesium.Cartesian3.divideComponents(left, right, result) 计算两点除法
Cesium.Cartesian3.dot(left, right) 计算点乘
Cesium.Cartesian3.equals(left, right) 比较两点是否相等
Cesium.Cartesian3.fromArray(array, startingIndex, result) 从数组中提取3个数构建笛卡尔坐标
Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result) 将将纬度转换为笛卡尔坐标(单位是度°)
Cesium.Cartesian3.fromDegreesArray(coordinates, ellipsoid, result) 返回给定经度和纬度值数组(以度为单位)的笛卡尔位置数组。
Cesium.Cartesian3.fromDegreesArrayHeights(coordinates, ellipsoid, result) 返回给定经度,纬度和高度的笛卡尔位置数组
Cesium.Cartesian3.fromElements(x, y, z, result) 创建一个新的笛卡尔坐标
Cesium.Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result) 返回笛卡尔坐标以弧度制的经纬度
Cesium.Cartesian3.fromRadiansArray(coordinates, ellipsoid, result) 返回笛卡尔坐标以弧度制的经纬度数组
Cesium.Cartesian3.fromRadiansArrayHeights(coordinates, ellipsoid, result) 返回笛卡尔坐标以弧度制的经纬度高度数组
Cesium.Cartesian3.fromSpherical(spherical, result) 将提供的球面转换为笛卡尔系
Cesium.Cartesian3.lerp(start, end, t, result) 使用提供的笛卡尔数来计算t处的线性插值或外推。
Cesium.Cartesian3.magnitude(cartesian) 计算笛卡尔长度
Cesium.Cartesian3.magnitudeSquared(cartesian) 计算提供的笛卡尔平方量级
Cesium.Cartesian3.maximumByComponent(first, second, result) 比较两个笛卡尔并计算包含所提供笛卡尔最大成分的笛卡尔。
Cesium.Cartesian3.maximumComponent(cartesian) 计算所提供笛卡尔坐标系的最大分量的值
Cesium.Cartesian3.midpoint(left, right, result) 计算右笛卡尔和左笛卡尔之间的中点
Cesium.Cartesian3.minimumByComponent(first, second, result) 比较两个笛卡尔并计算包含所提供笛卡尔的最小分量的笛卡尔
Cesium.Cartesian3.minimumComponent(cartesian) 计算所提供笛卡尔坐标系的最小分量的值
Cesium.Cartesian3.mostOrthogonalAxis(cartesian, result) 返回与提供的笛卡尔坐标最正交的轴
Cesium.Cartesian3.multiplyByScalar(cartesian, scalar, result) 将提供的笛卡尔分量乘以提供的标量
Cesium.Cartesian3.multiplyComponents(left, right, result) 计算两个笛卡尔的分量积
Cesium.Cartesian3.normalize(cartesian, result) 计算所提供笛卡尔的规范化形式
Cesium.Cartesian3.pack(value, array, startingIndex) 将提供的实例存储到提供的数组中
Cesium.Cartesian3.projectVector(a, b, result) 将向量a投影到向量b上
Cesium.Cartesian3.subtract(left, right, result) 计算两个笛卡尔分量差
Cesium.Cartesian3.unpack(array, startingIndex, result) 从压缩的数组中检索实例
Cesium.Cartesian3.unpackArray(array, result) 将笛卡尔分量数组解包为笛卡尔数组

翻译完了,可以看到cesium官方还是给我们搞了很多api给我们用的;
好了,继续我们的问题探讨,我现在已经能画线了,就是要计算距离了.我知道两个经纬度了,通过api,我可以把我知道的经纬度,转换为笛卡尔,然后计算距离;
在这里插入图片描述
在这里插入图片描述
嗯,这明显算出来的是直线距离;不过这个距离已经出来一个了,剩下的就是贴地距离;继续百度,然后没有百度出来啊

你可能感兴趣的:(Cesium)