Go语言计算两个经度和纬度之间距离的方法

本文实例讲述了Go语言计算两个经度和纬度之间距离的方法。分享给大家供大家参考。具体实现方法如下:

代码如下:

package main
      
import (
    "fmt"
    "math"
)
      
func main() {
    lat1 := 29.490295
    lng1 := 106.486654
      
    lat2 := 29.615467
    lng2 := 106.581515
    fmt.Println(EarthDistance(lat1, lng1, lat2, lng2))
}
      
func EarthDistance(lat1, lng1, lat2, lng2 float64) float64 {
    radius := 6371000 // 6378137
    rad := math.Pi/180.0
          
    lat1 = lat1 * rad
    lng1 = lng1 * rad
    lat2 = lat2 * rad
    lng2 = lng2 * rad
          
    theta := lng2 - lng1
    dist := math.Acos(math.Sin(lat1) * math.Sin(lat2) + math.Cos(lat1) * math.Cos(lat2) * math.Cos(theta))
          
    return dist * radius
}

希望本文所述对大家的Go语言程序设计有所帮助。

(0)

相关推荐

  • golang模板template自定义函数用法示例

    本文实例讲述了golang模板template自定义函数用法.分享给大家供大家参考,具体如下: golang的模板十分强大,其中的unix管道风格函数调用很是喜欢. 模板中有很多内置可以参看pkg文档, 另外还可以实现自定义函数. 例子如下: 复制代码 代码如下: package main import (     "text/template"     "time"     "os" ) type User struct {     Usern

  • golang简单位运算示例

    本文实例讲述了golang简单位运算.分享给大家供大家参考,具体如下: 复制代码 代码如下: // http://play.golang.org/p/idG7Ri_krU package main import "fmt" func main() {     var n uint8 = 6     fmt.Printf("%s\n%08b\n%08b\n\n", "6<<1 左移1位", n, n<<1)     fmt.

  • golang与php实现计算两个经纬度之间距离的方法

    本文实例讲述了golang与php实现计算两个经纬度之间距离的方法.分享给大家供大家参考,具体如下: golang版本: 复制代码 代码如下: package main import (     "fmt"     "math" ) func main() {     lat1 := 29.490295     lng1 := 106.486654     lat2 := 29.615467     lng2 := 106.581515     fmt.Printl

  • Go语言计算指定年月天数的方法

    本文实例讲述了Go语言计算指定年月天数的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "fmt"     "bufio"     "os"     "regexp"     "strconv" ) func main() {     year := input("year", "^[0-9]{1}[0-

  • golang实现http服务器处理静态文件示例

    本文实例讲述了golang实现http服务器处理静态文件的方法.分享给大家供大家参考,具体如下: 新版本更精简: 复制代码 代码如下: package main import (     "flag"     "log"     "net/http"     "os"     "io"     "path"     "strconv" ) var dir string

  • go语言计算两个时间的时间差方法

    本文实例讲述了go语言计算两个时间的时间差方法.分享给大家供大家参考.具体分析如下: go语言计算两个时间的时间差,代码很简单,返回1天前.1周前还是1月前的时间 package main import ( "fmt" "time" ) func main() { //Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 k := time.Now() //一天之前 d, _ := time.ParseDu

  • golang简单tls协议用法完整示例

    本文实例讲述了golang简单tls协议用法.分享给大家供大家参考,具体如下: 生成私钥: openssl genrsa -out key.pem 2048 生成证书: openssl req -new -x509 -key key.pem -out cert.pem -days 3650 https: 复制代码 代码如下: package main import (     "io"     "net/http"     "log" ) fun

  • golang解析xml的方法

    本文实例讲述了golang解析xml的方法.分享给大家供大家参考,具体如下: golang解析xml真是好用,特别是struct属性的tag让程序简单了许多,其他变成语言需要特殊类型的在golang里直接使用tag舒服 xml文件点击此处本站下载. 完整示例代码: 复制代码 代码如下: package main import (     "os"     "encoding/xml"     // "encoding/json"     &quo

  • golang的HTTP基本认证机制实例详解

    本文实例讲述了golang的HTTP基本认证机制.分享给大家供大家参考,具体如下: 看了<<http权威指南>>第12章HTTP基本认证机制(本站下载地址:http://www.jb51.net/books/93254.html),感觉讲的蛮详细的,写了一个小小例子测试. 请求响应过程: 复制代码 代码如下: ==> GET /hello HTTP/1.1 Host: 127.0.0.1:12345 <== HTTP/1.1 401 Unauthorized WWW-A

  • Golang记录、计算函数执行耗时、运行时间的一个简单方法

    先写一个公共函数, 比如在 common 包下有这么一个方法: // 写超时警告日志 通用方法 func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) { dis := time.Now().Sub(start).Seconds() if dis > timeLimit { log.Warning(log.CENTER_COMMON_WARNING, tag, " detailed:&quo

随机推荐