当前位置: 首页 > news >正文

纯html静态网站徐州市鼓楼区建设局网站

纯html静态网站,徐州市鼓楼区建设局网站,wordpress自动转内链,没有经验可以做新媒体运营吗开发背景 接上文我求的两经纬度点之间的方位角,我的需求里还提到了要计算距离,当然这个距离也是为后面的需求做铺垫的,因此需要求两个经纬度电之间的距离。 不要妄想用勾股定理求出来,实际上距离的计算还是稍微复杂些。这里使用的…

开发背景

        接上文我求的两经纬度点之间的方位角,我的需求里还提到了要计算距离,当然这个距离也是为后面的需求做铺垫的,因此需要求两个经纬度电之间的距离。

        不要妄想用勾股定理求出来,实际上距离的计算还是稍微复杂些。这里使用的是Haversine公式,用于在给定两个地理坐标点的情况下计算它们之间的球面距离,我直接将这个公式的数学计算实现为一个方法,然后再代码中调用。

生产环境使用(球面短距离计算)

        Haversine公式的数学理论基于球面三角学和三角恒等式的推导,通过近似计算大圆航线距离,适用于小距离的球面距离计算。这基本符合我的需求,因为我的计算都是基本是短距离计算的,基本不会跨省,实际效果也不错,如果你是超远距离计算,比如跨国,跨洲了,可以先试试,然后再考虑使用。

                        来源 https://wikipredia.net/zh/Haversine_formula#Formulation

说完理论部分,我就要开始上代码了,基本上你配置完spark环境,直接把我的代码扔上去就能看到输出结果,因为我是做了很多遍验证的。

spark代码

这个你可以转成python,反正算法基本都一样,不过换了一种写法

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._/*** 增加了多对多的方位角计算以及计算对应距离模型计算方法* 代码实现了计算多个点位对多个点位的方位角计算以及对应的距离计算,基本算是final版本* 基本实现了角度计算和距离计算* 在实际生产中,会出现噪音点,以及点位null值等,还是提前清洗一下数据为好* 2024年8月6日写,几个月前就搞好了,一直没空发博客。。。今天又闲下来了,干就完了,有问题及时联系* @email matrix70@163.com* @author lixh*/
object Angle_MoreToMore_Distance {/*** @author lixh* @param lon1* @param lat1* @param lon2* @param lat2* @return*/// 计算两个经纬度坐标之间的方位角def calculateAzimuth(lon1: Double, lat1: Double, lon2: Double, lat2: Double): Double = {val dx = lon2 - lon1val dy = lat2 - lat1val azimuth = math.atan2(dx, dy) * 180 / math.Pi(azimuth + 360) % 360}//距离算法 Haversine @author lixhdef haversineDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double = {val toRadians = Math.toRadians(_: Double)val dLat = toRadians(lat2 - lat1)val dLon = toRadians(lon2 - lon1)val a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) *Math.sin(dLon / 2) * Math.sin(dLon / 2)val c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))val EARTH_RADIUS_KM = 6371.0val distance = EARTH_RADIUS_KM * cdistance}def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("Azimuth Calculation") // 设置应用程序名称.master("local[*]") // 运行模式,这里使用本地模式.getOrCreate()import spark.implicits._// DF A 包含地点信息和经纬度信息 @author https://blog.csdn.net/qq_52128187?type=blog    val A = Seq((101, "北京", 39.9042, 116.4074),(102, "广州", 23.16, 113.23)).toDF("id1", "name1", "latitudeA", "longitudeA")// DF 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 _)// 执行内连接操作,计算方位角并添加到新列 "azimuth"val azimuthDF = A.join(C, A("id1") === C("id2")).withColumn("azimuth", calculateAzimuthUDF($"longitudeA", $"latitudeA", $"longitudeC", $"latitudeC"))// 计算得到的方位角数据azimuthDF.show(false)val haversineDistanceUDF = udf((lat1: Double, lon1: Double, lat2: Double, lon2: Double) => haversineDistance(lat1, lon1, lat2, lon2))//距离字段添加,@author lixhval resultDf = azimuthDF.withColumn("distance", haversineDistanceUDF($"latitudeA", $"longitudeA", $"latitudeC", $"longitudeC"))resultDf.show()spark.stop()}
}

代码输出结果

到这里基本就完成了,你可以对输出结果进行小数点位限制,一个round函数就解决。

参考资料:

https://wikipredia.net/zh/Haversine_formula

http://www.yayakq.cn/news/703541/

相关文章:

  • 做变性手术视频网站北京seo
  • 如何申请域名做网站知乎浅谈一下网络营销的几个误区
  • 多个网站对比表格怎么做展示型网站建设多少钱
  • 微信网站建设开发网络营销的特点有哪些?
  • 深圳正规做网站的公司建工教育培训机构
  • 曲靖企业网站wordpress怎么安装在nginx下
  • 建设银行官网官方网站哪个网站有手机
  • 如何优化网站到首页优化网站建设中+网页代码
  • 博客网站源码带后台wordpress中英文插件
  • 网站域名的管理密码如何索取手机网站建设公司哪家好
  • 试用型网站网络规划与设计实训报告
  • 整站seo优化推广新网站的建设方案
  • 苏州外贸网站制作公司怎吗做网站挣钱
  • 银川网站建设银川高端网站建设百度
  • 网页搜索是什么意思网站关键词优化案例
  • php做网站主要怎么布局做电商网站的上海公司
  • seo优化网站教程产品介绍网站设计怎么做
  • 如何备份织梦系统做的网站建设银行手机网站变
  • 域名请记住222922seo加wordpress工程师
  • 网站创建工具哪里有学习做网站的
  • 信息网站设计方案桂林市天气预报15天
  • 旅游网站怎么用dw做如何自学做网站
  • 李洋网站建设花店网页设计代码
  • php网站建设制作嘉兴网站建设
  • 网站制作备案上线流程网站建设的收入来源
  • 宿州科技网站建设网站设计教程文档
  • 两学一做专题网站介绍网站域名最便宜
  • 用vue做pc端网站好吗企业seo可以达到怎样的效果
  • 网站建设电话销售说不需要专业外贸网站制作
  • 企业网站建设的背景国内免费开源crm