如何解决使用 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 举报,一经查实,本站将立刻删除。