根据多个坐标经纬度获取到中心点的经纬度,scala语言

ops/2024/10/15 18:30:39/

文章目录

  • 前言
  • 总结

前言

Scala 语言


  • 通过多个经纬度坐标点, 计算出中心点, 这里使用的是 Scala 语言,其他的语言需要自行转换。
  • 求出来的并不是原有的点,而是原有点的中心位置的点。

scala__9">scala 代码

scala">package com.dw.process.midimport java.lang.Double.parseDouble
import scala.annotation.tailrec
import scala.collection.mutable
import scala.math._object GeoCalculatorTest {def getPointsCenter(points: Array[String]): (Double, Double) = {val pointNum = points.lengthvar X = 0.0var Y = 0.0var Z = 0.0@tailrecdef accumulate(i: Int): Unit = {if (i < pointNum) {val point = points(i).split(',')if (point.length == 2) {val lat = parseDouble(point(0)) * math.Pi / 180val lng = parseDouble(point(1)) * math.Pi / 180val x = cos(lat) * cos(lng)val y = cos(lat) * sin(lng)val z = sin(lat)X += xY += yZ += z}accumulate(i + 1)}}accumulate(0)X /= pointNumY /= pointNumZ /= pointNumval tmpLng = atan2(Y, X)val tmpLat = atan2(Z, sqrt(X * X + Y * Y))(tmpLat * 180 / math.Pi, tmpLng * 180 / math.Pi)}def main(args: Array[String]): Unit = {val str = "30.866603259732102,104.39074045163579;30.8619616865538,104.38696390134282;30.842287763333733,104.38807970029302;30.843761605258894,104.43202501279302;30.851572589486928,104.43545824033208;30.874265047548715,104.41202646237798"val arr = str.split(';')val tmpCenter = getPointsCenter(arr)println(s"Center latitude: ${tmpCenter._1}, Center longitude: ${tmpCenter._2}")// 如果使用腾讯地图或其他地图API,可以像下面这样创建坐标点// val defaultPoint = new qq.maps.LatLng(tmpCenter._1, tmpCenter._2)}
}
  • 运行得出的中心点的经纬度
Center latitude: 30.85674358236576, Center longitude: 104.40754961360216
  • 核心算法已经给出,请自行根据项目需求修改。

  • 多个经纬度组成的多边形
    多个经纬度组成的多边形
    得出的中心点
    在这里插入图片描述


总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

参考1


http://www.ppmy.cn/ops/42621.html

相关文章

Kubernetes(k8s) 实战集群部署Discuz x3.5 k8s使用本地私有仓库镜像 Centos 8.5 安装部署NFS

本文环境可参考: 详细教程 Centos8.5 基于 k8s v1.30.1 部署高可用集群 kubeadm 安装 kubernetes v1.30.1 docker集群搭建 延长证书有效期-CSDN博客 1 集群部署&#xff0c;需要PV&#xff0c;安装NFS #master11,slave12,slave13都安装 yum install nfs-utils rpcbind -y2 …

不靠后端,前端也能搞定接口!

嘿&#xff0c;前端开发达人们&#xff01;有个超酷的消息要告诉你们&#xff1a;MemFire Cloud来袭啦&#xff01;这个神奇的东东让你们不用依赖后端小伙伴们&#xff0c;也能妥妥地搞定 API 接口。是不是觉得有点不可思议&#xff1f;但是事实就是这样&#xff0c;让我们一起…

Vue 安装vue

1、官网安装下载安装nodejs 2、安装完成后&#xff0c;通过命令查看版本,可以查看到版本 node -v npm -v 3、安装Vue CLi npm install -g vue/cli 4、创建项目,vue create test 如果遇到报错&#xff1a; ERROR Error: spawn yarn ENOENT Error: spawn yarn ENOENT at ChildP…

力扣hot100学习记录(七)

240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题意 在二维矩阵中搜索是否存在一个目标值&#xff0c;该矩阵每一行每一列都是升序…

Flutter 中的 AnimatedPhysicalModel 小部件:全面指南

Flutter 中的 AnimatedPhysicalModel 小部件&#xff1a;全面指南 Flutter 的 AnimatedPhysicalModel 是一个功能强大的小部件&#xff0c;它允许开发者创建具有物理效果的动画形状变换。这个小部件非常适合需要展示平滑过渡和动态交互的场景&#xff0c;如按钮按下效果、卡片…

MyBatis-Plus介绍及Spring Boot 3集成指南

我们每个Java开发者都在使用springbootmybatis开发时&#xff0c;我们经常发现自己需要为每张数据库表单独编写XML文件&#xff0c;并且为每个表都需要编写一套增删改查的方法&#xff0c;较为繁琐。为了解决这一问题&#xff0c;MyBatis-Plus应运而生。在本文中&#xff0c;我…

【Linux】关于获取进程退出状态中的core dump标志补充

通过 wait/waitpid 可以获取子进程的退出状态, 从而判断其退出结果. 记录退出状态的 int 变量 status 的使用情况如下图所示: 如果是收到信号终止的话, 低 7 位为收到的终止信号, 而低第 8 位为 core dump 标志, core dump 标志有什么用呢? core dump 标志只存 0/1, 表示是否…

安卓开机启动阶段

目录 概述一、boot_progress_start二、boot_progress_preload_start三、boot_progress_preload_end四、boot_progress_system_run五、boot_progress_pms_start六、boot_progress_pms_system_scan_start七、boot_progress_pms_data_scan_start八、boot_progress_pms_scan_end九、…