diff --git a/address_utils/address_utils.go b/address_utils/address_utils.go index a1f2730a283e3d640cb7321f48ca34d4dcbd854d..b90563d946ed467dffef1b931563f8140c647c3c 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 b649cc2d75f2d1991e235b76348d6291d8998335..9b4cafe14ca1760701000f80aa1af10f5eaf6e8a 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 {