Spark轨迹大数据处理_scalaSpark代码实多点对多点的GIS点(经纬度点)的方位角计算

news2024/11/27 20:37:39

计算逻辑

        1、我这个代码是基于一个简化方位角模型,忽略了地球的曲率,适用于距离相对较短的距离。因为业务相关,这个方位角两个点的距离计算不会超过1000km。

        2、我这个方位角的计算逻辑:是从一个地点指向另一个地点的方向,以度为单位,从正北方向顺时针测量的角度,具体你可以去实测一下。

        3、这个计算我是经过了生产环境的实测的,而我呈现在这里代码是我本地的测试环境,原理不变,只不过是我做的博客Demo。

        4、如有雷同,纯属巧合Matrix70-CSDN博客,图片如有侵权请及时联系我,我就是发一篇博客,共享一下知识。

先来看方位角的定义:
        方位角(azimuthangle):从某点的指北方向线起,依顺时针方向到目标方向线之间的水平夹角,叫方位角。具体实例如下图

                   

                                图片来源:方位角-数学百科

废话不多说,直接上代码

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.udf

/**
 * 增加了多堆多的方位角计算模型计算方法
 */
object Angle_MoreToMore {
  // 计算两个经纬度坐标之间的方位角
  def calculateAzimuth(lon1: Double, lat1: Double, lon2: Double, lat2: Double): Double = {
    val dx = lon2 - lon1
    val dy = lat2 - lat1
    val azimuth = math.atan2(dx, dy) * 180 / math.Pi
    (azimuth + 360) % 360
  }

  def main(args: Array[String]): Unit = {
    // 创建一个 SparkSession
    val spark = SparkSession.builder()
      .appName("Azimuth Calculation") 
      .master("local[*]") 
      .getOrCreate()

    import spark.implicits._

    // 创建 DataFrame A 包含地点信息和经纬度信息
    val A = Seq((101, "北京", 39.9042, 116.4074),
      (102, "广州", 23.16, 113.23)
    ).toDF("id1", "name1", "latitudeA", "longitudeA")

    // 创建 DataFrame C 包含地点信息和经纬度信息
    val C = Seq(
      (101, "吉林", 43.8171, 125.3235),
      (101, "黑龙江", 45.8023, 126.5350),
      (102, "江苏", 32.0603, 118.7969),
      (102, "浙江", 30.2875, 120.1536),
      (101,"新疆", 43.77, 87.68),
      (102, "台湾省", 25.05, 121.50)
    ).toDF("id2", "name2", "latitudeC", "longitudeC")

    
    val calculateAzimuthUDF = udf(calculateAzimuth _)

    // 
    val azimuthDF = A.join(C, A("id1") === C("id2"))
      .withColumn("azimuth", calculateAzimuthUDF($"longitudeA", $"latitudeA", $"longitudeC", $"latitudeC"))

    // 方位角数据
    azimuthDF.show(false)

//代码运行肯定没问题,回来给兄弟点个赞和收藏吧  https://blog.csdn.net/qq_52128187?type=blog

    spark.stop()
  }
}

爷们代码运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中小学创客室培养学生全面发展

随着时代的发展,教育也在飞速发展,教育决定着一个国家的未来,一个家庭的未来,一个人的未来,我国近年来大力鼓励科学教育,支持科学创新。因此,学校应该重视对学生的科学教育,尤其是处于思想启蒙阶…

使用Python编写文件重复检查器

在日常工作中,我们经常需要处理大量文件,但有时候会遇到文件重复的情况。为了有效管理文件并避免重复占用存储空间,我们可以编写一个简单的Python程序来检查文件夹中是否存在重复文件。 C:\pythoncode\new\getmd5offile.py 介绍 本文将介绍…

CSP 2019 第三题:纪念品

CSP 2019 第三题:纪念品 题目链接 题目: 题意: 数据给出能预测的天数,纪念品种类,持有金币。每天对金币进行买卖,求买卖后的金币最大值(如何赚得更多) 知识点考: 动态规划…

从零到一:使用低代码平台搭建设备保养管理系统,提升运维效率

设备作为企业生产线上不可或缺的“动脉”,其稳定、高效的运行状态直接关乎到产品的质量与交付速度。然而,设备在长期高负荷运作下,难免会出现磨损、故障等问题,这不仅会影响生产进度,还可能带来额外的维修成本与安全风…

微信小程序--实现地图定位---获取经纬度

(1) (2) (3) html: <view class"titleTwo" style"border: none;"><view class"fontSize30 invoiceTile">企业地址</view><view class"invoiceRight" bind:tap"tapChooseAddress" data-maptype"…

Android 在布局中tools使用

效果图 布局 <TextViewandroid:id"id/tv"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"你好&#xff0c;这是TextView"android:visibility"gone"app:layout_constraintStart_to…

tornado 下载文件,显示下载速度、已下载大小、剩余时间、进度条、文件总大小

tornado 下载文件&#xff0c;显示下载速度、已下载大小、剩余时间、进度条、文件总大小 初版解决中文文件名报错显示下载速度、已下载大小下载过程中显示文件总大小、剩余时间、进度条正常前进 初版 import asyncio import osimport aiofiles import tornado.webclass FileHa…

【算法刷题日志】1044 最长重复子串和75 颜色分类,

颜色分类 这题就是双指针法&#xff0c;指到1的时候就和p1进行交换&#xff0c;然后p1指针往前移动&#xff0c;指到0的时候就和p0指针进行交换&#xff0c;p0和p1同时往前移动&#xff0c;由于可能出现连续的0后面连续的1&#xff0c;所以为了避免1被交换到末尾&#xff0c;当…

conda-pack基于同一种操作系统的环境打包教程

打包环境总结 1.激活需要复制的虚拟环境 conda env list cd /home/ww/miniconda3/envs/ conda activate webtool 2.将虚拟环境打包&#xff0c;包名&#xff1a;webtool_test.tar.gz conda pack -n webtool -o webtool_test.tar.gz 3.创建虚拟环境文件夹&#xff0c;把打包的…

Python实现深度森林(Deep Forest)分类模型(deepforest分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着大数据时代的到来&#xff0c;机器学习技术在各个领域的应用变得越来越广泛。在许多实际问题中&am…

HCIP学习 | 广域网、OSPF基础

Days03&#xff08;24.8.4&#xff09;广域网技术 概述 广域网技术在数据链路层面针对不同的物理链路定义了不同的封装方式。‌ 对于局域网封装&#xff0c;‌主要有Ethernet 2&#xff08;‌基于TCP/IP开发&#xff09;‌和IEEE802.3&#xff08;‌基于OSI协议开发&#xff0…

红黑树的概念和模拟实现[C++]

文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…

强类型语言、弱类型语言、静态类型语言、动态类型语言

强类型和弱类型&#xff0c;并没有严格绝对的界限&#xff0c;比如C/C这种典型的强类型语言&#xff0c;实际上也允许一些隐式类型传换。

一六二、记node-sass安装失败和node切换失败问题

1. 项目install失败 2. 查询问题 在stackoverflow查询到error /node_modules/node-sass: Command failed&#xff0c;明白是node版本和node-sass版本不匹配 查询自己的node版本 应该是node版本太高的问题 3. 切换node版本 使用n切换node版本失败 原因&#xff1a;而 n 默…

2-Linux系统概述

Linux系统概述 创始人——林纳斯托瓦兹&#xff0c;Linux诞生于1991年&#xff0c;作者上大学期间实现的&#xff0c;Linux的特点&#xff1a;开源、免费、拥有最为庞大的源码贡献者&#xff1b;Linux的吉祥物是企鹅 区别开源和闭源 开源&#xff1a;开放程序源代码&#xff0…

前端(五):前端工程化

前端工程化是指在企业级的前端开发项目中&#xff0c;把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 一、环境准备 &#xff08;一&#xff09;环境准备 1、Vue-cli&#xff1a;是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个Vue的项目模板。 2、…

如何利用WMS仓储管理系统进行库存整合

在当今竞争激烈的市场环境中&#xff0c;库存管理已成为企业运营的核心环节之一。为了提高库存管理的效率&#xff0c;降低库存成本&#xff0c;并实现库存资源的有效整合&#xff0c;越来越多的企业开始转向采用WMS仓储管理系统解决方案这一智能化工具。本文将从库存整合的迫切…

矩阵获客时代,云微客布局SEO优化,提升企业搜索流量

矩阵这个词大家应该都不是第一次听了&#xff0c;毕竟现在互联网时代&#xff0c;想要在线上获客&#xff0c;矩阵就绕不过去的。现在&#xff0c;短视频已经成为了当下年轻人获取信息的重要途径&#xff0c;而对于商企来说&#xff0c;布局短视频矩阵不仅是线上获客、获取流量…

内网域森林之ProxyNotShell漏洞利用

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 在渗透测试过程&#xff0c;如果目标环境存在Exchange服务器&#xff0c;我们也需要测试是否存在已知的远程命令执行漏洞&#xff0c;这里首先介绍ProxyNotShell。 ProxyNotShell和之前…

60 函数参数——关键参数

关键参数主要指调用函数时的参数传递方式&#xff0c;与函数定义无关。 通过关键参数可以按参数名字传递值&#xff0c;明确指定哪个值传递给哪个参数&#xff0c;实参顺序可以和形参顺序不一致&#xff0c;但不影响参数值的传递结果&#xff0c;避免了用户需要牢记参数位置和…