photoprism/internal/maps/s2.go
Michael Mayer 366c70d992 Optimize performance and data structures
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2019-12-27 05:18:52 +01:00

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()
}