366c70d992
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
45 lines
921 B
Go
45 lines
921 B
Go
package maps
|
|
|
|
import (
|
|
"github.com/golang/geo/s2"
|
|
)
|
|
|
|
var S2Level = 16
|
|
|
|
func ID(lat, lng float64) string {
|
|
return S2TokenLevel(lat, lng, S2Level)
|
|
}
|
|
|
|
func S2TokenLevel(lat, lng float64, level int) string {
|
|
if lat < -90 || lat > 90 {
|
|
log.Warnf("olc: latitude out of range (%f)", lat)
|
|
return ""
|
|
}
|
|
|
|
if lng < -180 || lng > 180 {
|
|
log.Warnf("olc: longitude out of range (%f)", lat)
|
|
return ""
|
|
}
|
|
|
|
l := s2.LatLngFromDegrees(lat, lng)
|
|
return s2.CellIDFromLatLng(l).Parent(level).ToToken()
|
|
}
|
|
|
|
func S2Encode(lat, lng float64) uint64 {
|
|
return S2EncodeLevel(lat, lng, S2Level)
|
|
}
|
|
|
|
func S2EncodeLevel(lat, lng float64, level int) uint64 {
|
|
if lat < -90 || lat > 90 {
|
|
log.Warnf("olc: latitude out of range (%f)", lat)
|
|
return 0
|
|
}
|
|
|
|
if lng < -180 || lng > 180 {
|
|
log.Warnf("olc: longitude out of range (%f)", lat)
|
|
return 0
|
|
}
|
|
|
|
l := s2.LatLngFromDegrees(lat, lng)
|
|
return s2.CellIDFromLatLng(l).Parent(level).Pos()
|
|
}
|