微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Golang

如何解决使用 Golang

我无法从特定半径的给定位置生成随机地理位置。我在我完成的实施中得到了不正确的坐标。我如何才能实现所需的功能

type Location struct{
   Latitude     float64
   Longitude    float64
}

const EarthRadius = 6371000 /* meters  */
const DegToRad =  math.Pi / 180.0
const ThreePi = math.Pi*3
const TwoPi float64 = math.Pi*2


func pointAtdistance(location Location,radius float64) Location{
// Convert degrees to radians
    loc := toradians(location)

    sinLat := math.Sin(loc.Latitude)
    cosLat := math.Cos(loc.Latitude)

    bearing := rand.Float64() * TwoPi
    theta := radius / EarthRadius
    sinbearing := math.Sin(bearing)
    cosbearing := math.Cos(bearing)
    sinTheta   := math.Sin(theta)
    cosTheta   := math.Cos(theta)

   latitude := math.Asin(sinLat * cosTheta + cosLat*sinTheta*cosbearing)
    longitude := location.Longitude +
    math.atan2(sinbearing * sinTheta*cosLat,(cosTheta-sinLat) * math.Sin(latitude))


    /* normalize -PI -> +PI radians */
    longitude = math.Mod(longitude+ThreePi,TwoPi) - math.Pi

     locs := todegrees(Location{
        Latitude: latitude,Longitude: longitude,})

    return Location{
         Latitude: locs.Latitude,Longitude: locs.Longitude,}
}

 func GenerateLocations(location Location,radius float64) Location{
    rnd := rand.Float64()
    randist := math.Sqrt(rnd) * radius
     return pointAtdistance(location,randist)
}

 func toradians(location Location) Location{
     lat := location.Latitude * DegToRad
     lon := location.Longitude * DegToRad

    return Location{
        Latitude: lat,Longitude: lon,}
}

func todegrees(location Location) Location{
    lat := location.Latitude / DegToRad
    lon := location.Longitude / DegToRad

    return Location{
       Latitude: lat,}
}

编辑:

输入

func main(){
    location:= GenerateLocations(Location{
        Latitude: 6.981106276681917,Longitude: 79.87749937315392,},100)
     fmt.Println(location)
}

输出

{6.981757300245991 -103.35666511967649}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。