使用 TurfJS 寻找垂直线

image.png在最近的一个项目中有个需求,我需要确定从单个点 © 到由其他两个点(A 和 B)的连线的垂直距离。通常我们可以只使用turf.nearestPointOnLine(),但是只有当C点位于前两点之间时才有效。

但是点 C 可以在任何位置,不一定在点 A 和 B 之间。因此,需要沿着垂直于由点 A 和 B 创建的假想无限延长的直线来测量距离。这可以通过其他一些 turf 函数方法来完成 - 比如turf.bearing()turf.destination()turf.lineIntersect()以及线的斜率。

获取斜率并作延长线

下面的函数会返回一条延长线,其中两个附加点分别表示两个点的 X轴 和 Y轴 截距, 坐标轴位于点 C。我们有了这条延长线,就可以确定第三个点位于两个新点之间。此时我们可以使用turf.nearestPointOnLine(),但这往往有一个小但显著的误差范围。为了提高测量的准确性,我们可以使用turf.lineIntersect()函数。

const lines = turf.featureCollection([]);
const slope = (b[1] - a[1]) / (b[0] - a[0]);
const point1 = [c[0], slope * (c[0] - a[0]) + a[1]];
const point2 = [(c[1] - a[1]) / slope + a[0], c[1]];const lineArray = [a, b, point1, point2];
lineArray.sort((a, b) => b[0] - a[0]);
lines.features.push(turf.lineString(lineArray));

创建与线 AB 垂直的线

const bearing1 = turf.bearing(a, b);
const { geometry: p90 } = turf.destination(turf.point(c),turf.distance(a, c),bearing + 90
);
const { geometry: p91 } = turf.destination(
turf.point(c),turf.distance(a, c),bearing - 90
);
const perpendicularLine = turf.lineString([p90.coordinates, p91.coordinates]);
lines.features.push(perpendicularLine);

使用 turf.bearing() 我们可以从 C 点到 A 点或 B 点的距离创建一条垂直线,然后在该方位角上加上或减去 90。我们可以使用这个距离,因为除非点 C 与点 A 或 B 正好成 90 度,否则这个距离将始终大于到延长线的垂直距离。

找到我们的目标点和距离

现在我们有了这条垂直线,就可以使用 turf.lineIntersect() 沿着延长线获取目标点,并用它来测量到 C 点的距离。

const intersectingPoint = turf.lineIntersect(lines.features[0],lines.features[1]
);const distance = turf.distance(intersectingPoint.features[0], turf.point(c), {units: "miles"
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/414897.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axios的基础使用

在阅读本篇文章之前,可以阅读一下这篇文章 json-server的基础使用 因为我们接下来需要使用到json-server 在使用axios之前我们需要导入axios 介绍2种情况: 一、在项目中使用 我们一般都是使用以下两种方法安装 npm i axios yarn add axios二、在普通学习…

HarmonyOS—开发环境诊断的功能

为了大家开发应用/服务的良好体验,DevEco Studio提供了开发环境诊断的功能,帮助大家识别开发环境是否完备。可以在欢迎界面单击Help > Diagnose Development Environment进行诊断。如果已经打开了工程开发界面,也可以在菜单栏单击Help >…

pytest文档35-Hooks函数之统计测试结果(pytest_terminal_summary)

前言 用例执行完成后,我们希望能获取到执行的结果,这样方便我们快速统计用例的执行情况。 也可以把获取到的结果当成总结报告,发邮件的时候可以先统计测试结果,再加上html的报告。 pytest_terminal_summary 关于TerminalReport…

Linux网络文件共享服务

目录 一.文件存储类型 1.直连式存储:Direct-Attached Storage,简称DAS 2.存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理) 3.网络附加存储:Network-…

马季徒孙李寅飞透露:央视春晚相声有岳云鹏、金霏陈曦、卢鑫玉浩

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文|猴哥聊娱乐 编辑|侯欢庭 在相声界,有一位备受瞩目的小天才,他就是李寅飞。他不…

多线程排序(java版)

📑前言 本文主要是【排序】——多线程排序的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#x…

寒假刷题-递归与递推

寒假刷题 92. 递归实现指数型枚举 解法1递归 使用递归对每一个坑位进行选择,每个坑位有两种选择,填或者不填,使用st数组来记录每个坑位的状态,u来记录已经有多少坑位有了选择。 每个坑位有2钟选择,n个坑位的复杂度就…

python脚本多个文件夹下多个文件中sql语句片段比对

一、需求: 日常测试授权脚本,需要检查多个行业文件夹下单独的授权脚本和汇总授权脚本,一个文件根目录下有多个子文件夹,子文件夹下有多个sql文件,人为比对较为耗时。 需要实现在文件中找到某个sql语句片段&#xff0c…

ChatGPT 和文心一言,各有优劣

目录 前言 具体比较 智能回复能力 语言准确性 知识库丰富度 生成内容风格 总结 前言 近年来,随着人工智能技术的不断进步,AI助手已成为人机交互的重要载体。其中代表性的两个AI助手系统分别是OpenAI推出的ChatGPT,以及腾讯研发的文心一言。这两个…

mysql 为大表新增字段或索引

1 问题 mysql 为大表增加或增加索引等操作时,直接操作原表可能会因为执行超时而导致失败。解决办法如下。 2 解决办法 (1)建新表-复制表A 的数据结构,不复制数据 create table B like A; (2)加字段或索…

SCSI/UFS储存架构/协议/电源管理/命令处理流程

UFS子系统架构 1.UFS协议 无论是ufs host controller部分还是ufs device部分,他们都将遵循统一的UFS规范 UFS Application Layer(UAP)应用层 1.UFS command set (UCS) UCS处理命令集,如读、写命令等,.使用的命令是简化的SCSI命令(…

枚举类型缝缝补补

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字,enum叫枚举数据类型&#…