fixed dependencies
This commit is contained in:
97
vendor/github.com/paulmach/orb/geo/bound.go
generated
vendored
Normal file
97
vendor/github.com/paulmach/orb/geo/bound.go
generated
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
package geo
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/paulmach/orb"
|
||||
)
|
||||
|
||||
// NewBoundAroundPoint creates a new bound given a center point,
|
||||
// and a distance from the center point in meters.
|
||||
func NewBoundAroundPoint(center orb.Point, distance float64) orb.Bound {
|
||||
radDist := distance / orb.EarthRadius
|
||||
radLat := deg2rad(center[1])
|
||||
radLon := deg2rad(center[0])
|
||||
minLat := radLat - radDist
|
||||
maxLat := radLat + radDist
|
||||
|
||||
var minLon, maxLon float64
|
||||
if minLat > minLatitude && maxLat < maxLatitude {
|
||||
deltaLon := math.Asin(math.Sin(radDist) / math.Cos(radLat))
|
||||
minLon = radLon - deltaLon
|
||||
if minLon < minLongitude {
|
||||
minLon += 2 * math.Pi
|
||||
}
|
||||
maxLon = radLon + deltaLon
|
||||
if maxLon > maxLongitude {
|
||||
maxLon -= 2 * math.Pi
|
||||
}
|
||||
} else {
|
||||
minLat = math.Max(minLat, minLatitude)
|
||||
maxLat = math.Min(maxLat, maxLatitude)
|
||||
minLon = minLongitude
|
||||
maxLon = maxLongitude
|
||||
}
|
||||
|
||||
return orb.Bound{
|
||||
Min: orb.Point{rad2deg(minLon), rad2deg(minLat)},
|
||||
Max: orb.Point{rad2deg(maxLon), rad2deg(maxLat)},
|
||||
}
|
||||
}
|
||||
|
||||
// BoundPad expands the bound in all directions by the given amount of meters.
|
||||
func BoundPad(b orb.Bound, meters float64) orb.Bound {
|
||||
dy := meters / 111131.75
|
||||
dx := dy / math.Cos(deg2rad(b.Max[1]))
|
||||
dx = math.Max(dx, dy/math.Cos(deg2rad(b.Min[1])))
|
||||
|
||||
b.Min[0] -= dx
|
||||
b.Min[1] -= dy
|
||||
|
||||
b.Max[0] += dx
|
||||
b.Max[1] += dy
|
||||
|
||||
b.Min[0] = math.Max(b.Min[0], -180)
|
||||
b.Min[1] = math.Max(b.Min[1], -90)
|
||||
|
||||
b.Max[0] = math.Min(b.Max[0], 180)
|
||||
b.Max[1] = math.Min(b.Max[1], 90)
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
// BoundHeight returns the approximate height in meters.
|
||||
func BoundHeight(b orb.Bound) float64 {
|
||||
return 111131.75 * (b.Max[1] - b.Min[1])
|
||||
}
|
||||
|
||||
// BoundWidth returns the approximate width in meters
|
||||
// of the center of the bound.
|
||||
func BoundWidth(b orb.Bound) float64 {
|
||||
c := (b.Min[1] + b.Max[1]) / 2.0
|
||||
|
||||
s1 := orb.Point{b.Min[0], c}
|
||||
s2 := orb.Point{b.Max[0], c}
|
||||
|
||||
return Distance(s1, s2)
|
||||
}
|
||||
|
||||
//MinLatitude is the minimum possible latitude
|
||||
var minLatitude = deg2rad(-90)
|
||||
|
||||
//MaxLatitude is the maxiumum possible latitude
|
||||
var maxLatitude = deg2rad(90)
|
||||
|
||||
//MinLongitude is the minimum possible longitude
|
||||
var minLongitude = deg2rad(-180)
|
||||
|
||||
//MaxLongitude is the maxiumum possible longitude
|
||||
var maxLongitude = deg2rad(180)
|
||||
|
||||
func deg2rad(d float64) float64 {
|
||||
return d * math.Pi / 180.0
|
||||
}
|
||||
|
||||
func rad2deg(r float64) float64 {
|
||||
return 180.0 * r / math.Pi
|
||||
}
|
||||
Reference in New Issue
Block a user