Cesium中计算点到另一个点或直线垂足点连线上指定距离的坐标点

8 篇文章 0 订阅
4 篇文章 1 订阅

  接上篇文章“Cesium中点至直线的垂足点和距离计算”,在计算出点到直线的垂足后,就可以将定位坐标点确定到直线。但有一个问题是,由于路线是有一定宽度的,一部分点是落在路线中线上,其他的点是在中线和路线外边线中间的,所以不能简单的把所有的点都计算到路线中线上。

    同样为了效果真实,最终的想法先计算一个固定的偏移距离,然后分别计算出其他原始坐标点到路线直线的垂足,再根据偏移距离,计算原始坐标点向垂足点偏移此距离后的坐标点

    通过上篇文章我们可以计算出参考点到直线的垂足点以及参考点到垂足点的距离,把这个距离作为参考偏移距离。

    计算原理如下图,已知起始点a 和终点b 两点的坐标,偏移点c 到 起点a 的距离为len,求c点的坐标。

    1-200H21J95X10.png

    求 cy 可以根据: len / a到b距离 = a到c垂直距离 / a 到 b的垂直距离,首先求a到b的距离,公式如下:

r = sqrt((x1- x2)*(x1 - x2) +(y1 - y2)*(y1 - y2));

    然后计算cy的值

cy = (len*(y2-y1))/r + y1;

    同理,可以计算出cx的值:

cx = (len*(x2-x1))/r + x1;

    整理相关 JS 方法如下(使用经纬度坐标):

// 计算点到指定点偏移固定距离的坐标点
// a : 起始点
// b : 终点
// len : 偏移距离
function getNewRollPoint(a, b, len) {
    var r = Math.sqrt((a.Longitude - b.Longitude) * (a.Longitude - b.Longitude) + (a.Latitude - b.Latitude) * (a.Latitude - b.Latitude));
    var cx = (len * (b.Longitude - a.Longitude)) / r + a.Longitude;
    var cy = (len * (b.Latitude - a.Latitude)) / r + a.Latitude;
    return {
        Longitude: cx,
        Latitude: cy
    }
}

    通过上面的方法,可以计算点到指定点偏移固定距离的坐标点。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值