根据多个坐标经纬度获取到中心点的经纬度,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

相关推荐
weixin_307779132 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天5 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel5 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog6 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071576 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境7 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
\光辉岁月/7 小时前
5.java-数组
java·开发语言
Java后端的Ai之路7 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang7 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人8 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试