文章目录
- 前言
- scala 代码
- 总结
前言
Scala 语言
- 通过多个经纬度坐标点, 计算出中心点, 这里使用的是 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