From 58ea1d59b1ec71d61a088a7b9a87da7ae28279dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?France=CC=81=20Wilke?= <francewilke@gmail.com> Date: Wed, 19 Apr 2023 12:28:23 +0200 Subject: [PATCH] Add GetDistanceInKmBetweenCoordinates and Concat functions --- address_utils/address_utils.go | 21 +++++++++++++++++++++ string_utils/string_utils.go | 14 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/address_utils/address_utils.go b/address_utils/address_utils.go index a1f2730..b90563d 100644 --- a/address_utils/address_utils.go +++ b/address_utils/address_utils.go @@ -3,6 +3,7 @@ package address_utils import ( "crypto/md5" "fmt" + "math" "regexp" "strings" @@ -275,3 +276,23 @@ func GetZoneDisplayName(zone string) string { return zone } + +func GetDistanceInKmBetweenCoordinates(lat1 float64, lng1 float64, lat2 float64, lng2 float64) float64 { + radlat1 := float64(math.Pi * lat1 / 180) + radlat2 := float64(math.Pi * lat2 / 180) + + theta := float64(lng1 - lng2) + radtheta := float64(math.Pi * theta / 180) + + dist := math.Sin(radlat1)*math.Sin(radlat2) + math.Cos(radlat1)*math.Cos(radlat2)*math.Cos(radtheta) + if dist > 1 { + dist = 1 + } + + dist = math.Acos(dist) + dist = dist * 180 / math.Pi + dist = dist * 60 * 1.1515 + + // Return in kilometers + return dist * 1.609344 +} diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go index b649cc2..9b4cafe 100644 --- a/string_utils/string_utils.go +++ b/string_utils/string_utils.go @@ -151,6 +151,20 @@ func ConcatP(args ...*string) string { return s } +// Concat concatenates all specified non-empty strings with ", " separators +func Concat(args []string, separator string) string { + s := "" + for _, arg := range args { + if arg != "" { + if s != "" { + s += separator + } + s += arg + } + } + return s +} + func ToJSONString(object interface{}) (string, error) { jsonBytes, err := json.Marshal(&object) if err != nil { -- GitLab