photoprism/internal/maps/s2.go
Michael Mayer a8a5384759 Locations: Reduce S2 level to 15
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2019-12-27 07:25:40 +01:00

46 lines
921 B
Go

package maps
import (
"github.com/golang/geo/s2"
)
var S2Level = 15
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()
}