首页 > 其他分享 >Openlayers实现角度测量

Openlayers实现角度测量

时间:2024-11-08 16:46:17浏览次数:5  
标签:const 测量 coordinates 角度 Openlayers 坐标 coordinate geom 夹角

概述

在前面介绍了如何在 Openlayers 中进行长度和面积的测量,可以参考:《Openlayers 实现长度测量》,《openlayers 实现面积测量》

那么如何在 Openlayers 中进行角度的测量呢?很遗憾ol/sphere模块中没有提供对应角度测量的 API 或方法,但是我们可以自己实现。

实践

效果展示

角度量测绘制
在这里插入图片描述

结果
在这里插入图片描述

实现思路

实现思路主要有两点:一是计算夹角的度数;二则是夹角的圆弧表示,上图中表示角度的圆弧,可以是 0 - 180° 中的任意一个角度,且它总是包裹在夹角内,连接夹角的两边。

夹角的度数计算
  • 确定夹角

数学常识可知,夹角度数的区间必定是[0°,180°],而且,夹角是由三个坐标点的位置确定大小的,如上图中的顶点ABC。因此,我们可以内定顶点 ∠ABC是我们需要测量的夹角。

  • 确定顶点坐标位置

可以在地图上随机取三个点作为顶点,但是这样并不科学,这样无法满足绘制特定角度的需求。选点还是通过ol/interaction模块的Draw API 进行拾取。

geom.getCoordinates()返回的坐标个数达到四个时,就调用this.draw.finishDrawing()方法结束绘制。因为它的返回值倒数的两个坐标都是一样的,因此即使我们只需要三个点的坐标,也需要等到它的返回值长度是4

实现代码如下:

this.draw.on(
  "drawstart",
  (evt: {
     feature: Feature<Geometry>, coordinate: Coordinate }) => {
   
    const {
    feature, coordinate } = evt;

    this.listenGeometryChange = feature.getGeometry().on("change", (evt) => {
   
      const geom = evt.target;

      let startPoint = geom.getFirstCoordinate();

      this.addMarker({
    coordinate: startPoint, symbolId: "A", anchor: [0, 0] });

      const coordinates = geom.getCoordinates().slice(0, -1);

      if (coordinates.length > 1) {
   
        this.addMarker({
   
          coordinate: coordinates[1],
          symbolId: "B",
          anchor: [1, 1],
        });
      }
      const pointscount = geom.getCoordinates();
      if (pointscount.length >= 4) {
   
        this.addMarker({
   
          coordinate: coordinates[2],
          symbolId: "C",
          anchor: [0, 0],
        });
        this.addAngleMark({
   
          coordinate: coordinates[1],
          Angles: calculateAngle(coordinates),
        });
        this.draw.finishDrawing();
      }
    });
  }
);
  • 如何计算夹角

两点的坐标位置决定了两点之间的距离,即当我们知道ABC的坐标后,就可以知道线段ABBC的长度了,然后通过数据计算就可以知道 ∠ABC的大小了。前面提到夹角的区间范围,因为在电脑中,夹角也可以是负值,这个取决于它对应的方向是顺时针还是逆时针方向,因此要保证夹角的范围在区间[0°,180°]内。

封装的计算夹角的方法calculateAngle如下:

const calculateAngle = (points: Coordinate[]) => {
   
  // 提取坐标点 A, B, C
  const [A, B, C] = points;

  // 计算向量 AB 和 BC
  const AB = {
    x: B[0] - A[0], y: B[1] - A[1] };
  const BC = {
    x: C[0] - B[0], y: C[1] - B[1] };

  // 计算点积
  const dotPr

标签:const,测量,coordinates,角度,Openlayers,坐标,coordinate,geom,夹角
From: https://blog.csdn.net/m0_46281382/article/details/143588342

相关文章

  • 风电机组产生次声的来源、测量及对健康影响的综述
    摘要:居住在风电机组附近的一些人抱怨风电机组对健康产生了一系列不利影响。包括耳鸣,血压升高,心悸,心动过速,压力,焦虑,眩晕,头晕,恶心,迷糊,视力,疲劳,认知功能障碍,头痛,耳压,加重偏头痛,运动敏感,内耳损伤和睡眠剥夺。本文首先从历史回顾的预后,如振动声疾病和风电机组综合症被提出来解释报......
  • Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    本示例在vue+openlayers中使用cluster生成聚合数据的效果。在OpenLayers中实现点聚合(clustering)是一个常见的需求,特别是在处理大量地理数据点时。聚合可以提高地图的性能并减少视觉上的混乱。一、示例效果图专栏名称内容介绍Openlayers基础实战(72篇)专栏提供73......
  • 科普文:软件架构Linux系列之【从硬件角度了解固态盘SSD】
    概叙科普文:软件架构Linux系列之【并发问题的根源:CPU缓存模型详解】-CSDN博客科普文:软件架构Linux系列之【从硬件角度了解内存DRAM和DDR5】-CSDN博客科普文:软件架构Linux系列之【读懂Linux内存管理:mmap(Memory-MappedFile)内存映射文件】-CSDN博客科普文:软件架构Linux系列之......
  • 绞尽脑汁终于搞定/天地图标注点marker旋转/任意角度旋转/无需引入其他框架
    一、前言说明在其他地图组件中,标注点marker都是可以设置旋转角度的,这个功能其实非常实用,比如飞机移动轨迹,就是需要旋转飞机头飞行,轮船轨迹移动也是,百度地图和腾讯地图是通过调用setRotation函数设置,高德地图是setAngle,唯独天地图没有提供对应接口,找遍了文档和源码,也没有找到对应......
  • CDGP|数据治理如何落地?多角度详细探讨
    数据治理是一个长期且复杂的体系化工程,它通过一系列流程规范、制度、IT能力以及持续运营等机制来保障治理工作的持续推进。落地数据治理需要从多个方面入手,本文将从组织建设、流程规范、IT平台以及持续运营等角度详细探讨。一、建立数据治理组织数据治理需要打破企业内部壁......
  • 【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,CKF滤波
    基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式为CKF),无需下载,订阅专栏后可直接复制文章目录工具箱程序简述运行结果代码程序讲解代码功能概述代码结构与关键步骤结论工具箱本程序需要在安装工具箱后使用,工具箱是开源的,链......
  • 基于【PSINS工具箱】提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航
    基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式可选EKF/UKF/CKF),无需下载,订阅专栏后可直接复制文章目录工具箱程序简述运行结果程序源代码程序讲解代码功能概述代码结构与关键步骤结论工具箱本程序需要在安装工具箱后使用,......
  • 《高频电子线路》—— 角度调制(调相、调频)
     文章内容来源于【中国大学MOOC华中科技大学通信(高频)电子线路精品公开课】,此篇文章仅作为笔记分享。目录角度调制(调相、调频)角度调制的原因调频VS调幅角度调制的分类本章重难点调相时域(表达式)时域(波形-单频调制)小结调频时域(表达式)时域(波形-单频调制)小结 调......
  • 探索水分仪的用途与水分测量方法
    水分仪:精准测量水分的得力工具在众多科学和工业领域中,水分仪是一款不可或缺的设备。它具有广泛的用途,为我们提供了准确、高效的水分测量方法。水分仪常用于农业领域,帮助农民确定土壤中的水分含量,从而合理安排灌溉,保障农作物的生长和产量。在食品加工行业,它能精准检测食品中的......
  • 梁山派入门指南4——定时器使用详解,包括定时器中断、PWM产生、输入捕获测量频率
    梁山派入门指南4——定时器使用详解,包括定时器中断、PWM产生、输入捕获测量频率1.定时器概览2.基本定时器2.1基本定时器介绍2.2梁山派上的基本定时器开发2.2.1.了解梁山派上的基本定时器资源(实际上我们以及在上面了解过了)2.2.2.配置定时器2.2.3.编写定时器中断服务......