侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

go语言使用Haversine公式计算两个坐标之间的距离

Go  /  管理员 发布于 2星期前   202

根据坐标计算当前位置到附近一个点或多个点的距离,我们就可以使用Haversine公式了。

下面是一个使用Haversine公式计算两个坐标之间距离功能的代码示例:


package controllers

import (
"fmt"
"math"

)

// TestController  is a test control
type TestController struct {
//beego.Controller
BaseController
}

//坐标-经纬度
type Coordinates struct {
Latitude  float64
Longitude float64
}

//地球的平均半径以千米为单位
const radius = 6371

//度数转弧度公式
func degrees2radians(degrees float64) float64 {
return degrees * math.Pi / 180
}

//Haversine公式(半正矢公式):计算两点之间的直线距离
func (origin Coordinates) Distance(destination Coordinates) float64 {
degreesLat := degrees2radians(destination.Latitude - origin.Latitude)
degreesLong := degrees2radians(destination.Longitude - origin.Longitude)
a := (math.Sin(degreesLat/2)*math.Sin(degreesLat/2) +
math.Cos(degrees2radians(origin.Latitude))*
math.Cos(degrees2radians(destination.Latitude))*math.Sin(degreesLong/2)*
math.Sin(degreesLong/2))
c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
d := radius * c

return d
}

func (c *TestController) Aaa() {

//广州 - 天河公园
pointA := Coordinates{23.127613278533207, 113.36619463562009}
//广州 - 骏唐购物广场
pointB := Coordinates{23.125876748465735, 113.38340368865964}

fmt.Println("广州-天河公园 A : ", pointA)
fmt.Println("广州-骏唐购物广场 B : ", pointB)

distance := pointA.Distance(pointB)
fmt.Printf("广州-天河公园到广州-骏唐购物广场的距离是 %.2f 公里.\n", distance)
}

效果图:

Haversine.png


  • 上一条:
    Laravel 9.22版本发布
    下一条:
    go判断slice中是否有元素及查找和删除切片中元素
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • go语言中Pat多路复用器路由功能示例代码(0个评论)
    • go语言中HttpRouter多路复用器路由功能示例代码(0个评论)
    • go语言中回收make()占用的内存代码示例(0个评论)
    • go语言中什么时候使用make或者new(0个评论)
    • go语言实现招商银行支付签名验证功能流程步骤(0个评论)
    • 近期文章
    • GnuPG(GPG)生成用于替代SSH密钥的子密钥:签名、加密、鉴权及SSH验证(0个评论)
    • GnuPG(GPG)密钥创建的流程步骤(0个评论)
    • Laravel 9.24版本发布(0个评论)
    • windows系统phpstudy环境中安装amqp拓展流程步骤(0个评论)
    • windows10+docker desktop使用docker compose编排多容器构建dnmp环境(0个评论)
    • windows10+docker desktop运行laravel项目报错:could not find driver...(0个评论)
    • windows10+docker desktop报错:docker: Error response from daemon: user declined directory sharing(0个评论)
    • go语言中Pat多路复用器路由功能示例代码(0个评论)
    • go语言中HttpRouter多路复用器路由功能示例代码(0个评论)
    • js中使用Push.js通知库将通知推送到浏览器(0个评论)
    • 近期评论
    • nkt 在

      阿里云香港服务器搭建自用vpn:Shadowsocks使用流程步骤中评论 用了三分钟就被禁了,直接阿里云服务器22端口都禁了..
    • 熊丽 在

      安装docker + locust + boomer压测环境实现对接口的压测中评论 试试水..
    • 博主 在

      阿里云香港服务器搭建自用vpn:Shadowsocks使用流程步骤中评论 @test  也可能是国内大环境所至,也是好事,督促你该研究学习新技术..
    • test 在

      阿里云香港服务器搭建自用vpn:Shadowsocks使用流程步骤中评论 打了一次网页,然后再也打不开了。。是阿里云的缘故吗?..
    • 博主 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 @鹿   执行以下命令看看你的2.27版本是否存在strin..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客