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

文章目录

前言

Scala 语言


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

scala 代码

scala 复制代码
package com.dw.process.mid

import 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.length
    var X = 0.0
    var Y = 0.0
    var Z = 0.0

    @tailrec
    def accumulate(i: Int): Unit = {
      if (i < pointNum) {
        val point = points(i).split(',')
        if (point.length == 2) {
          val lat = parseDouble(point(0)) * math.Pi / 180
          val lng = parseDouble(point(1)) * math.Pi / 180
          val x = cos(lat) * cos(lng)
          val y = cos(lat) * sin(lng)
          val z = sin(lat)

          X += x
          Y += y
          Z += z
        }
        accumulate(i + 1)
      }
    }

    accumulate(0)

    X /= pointNum
    Y /= pointNum
    Z /= pointNum

    val 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)
  }
}
  • 运行得出的中心点的经纬度
log 复制代码
Center latitude: 30.85674358236576, Center longitude: 104.40754961360216
  • 核心算法已经给出,请自行根据项目需求修改。

  • 多个经纬度组成的多边形

    得出的中心点


总结

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

如果有不对的地方请指正!!!

参考1

相关推荐
Victor3561 小时前
MongoDB(23) 如何使用条件查询文档?
后端
摸鱼的春哥1 小时前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
Victor3561 小时前
MongoDB(22)如何批量插入文档?
后端
追逐时光者8 小时前
一款使用 C# 编写专为 Windows 11 打造的文件资源管理器增强工具!
后端·.net
风象南9 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
冰_河10 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
JavaGuide13 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
桦说编程13 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读