photoprism/pkg/pluscode/pluscode.go
Michael Mayer c31470dafb Initial code for new Places UI
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2020-01-15 04:04:33 +01:00

56 lines
1.2 KiB
Go

package pluscode
import (
"fmt"
olc "github.com/google/open-location-code/go"
"github.com/photoprism/photoprism/pkg/s2"
)
var defaultLen = 8
// Encode returns the plus code for the given coordinates using the default length.
func Encode(lat, lng float64) string {
result, _ := EncodeLength(lat, lng, defaultLen)
return result
}
// EncodeLength returns the plus code for the given coordinates.
func EncodeLength(lat, lng float64, length int) (plusCode string, err error) {
if lat < -90 || lat > 90 {
return "", fmt.Errorf("latitude out of range (%f)", lat)
}
if lng < -180 || lng > 180 {
return "", fmt.Errorf("longitude out of range (%f)", lng)
}
return olc.Encode(lat, lng, length), nil
}
// LatLng returns the coordinates for a plus code token.
func LatLng(token string) (lat, lng float64) {
if token == "" || token == "-" {
return lat, lng
}
c, err := olc.Decode(token)
if err != nil {
return lat, lng
}
lat, lng = c.Center()
return lat, lng
}
// S2 returns the S2 cell token for the plus code using the default cell level.
func S2(plusCode string) string {
lat, lng := LatLng(plusCode)
s2Token := s2.Token(lat, lng)
return s2Token
}