You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
4.4 KiB
158 lines
4.4 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/go-redis/redis/v9"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// 添加和获取信息
|
|
//geoAddGet()
|
|
|
|
// 搜索地点成员
|
|
geoSearch()
|
|
}
|
|
|
|
func geoSearch() {
|
|
opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
client := redis.NewClient(opt)
|
|
ctx := context.Background()
|
|
client.Del(ctx, "cities")
|
|
cities := []*redis.GeoLocation{
|
|
{Name: "changsha", Longitude: 113.00000, Latitude: 28.21667},
|
|
{Name: "beijing", Longitude: 116.41667, Latitude: 39.91667},
|
|
{Name: "shanghai", Longitude: 121.43333, Latitude: 34.50000},
|
|
{Name: "guangzhou", Longitude: 113.23333, Latitude: 23.16667},
|
|
{Name: "shenzhen", Longitude: 114.06667, Latitude: 22.61667},
|
|
{Name: "tianjin", Longitude: 117.20000, Latitude: 39.13333},
|
|
{Name: "hangzhou", Longitude: 120.20000, Latitude: 30.26667},
|
|
{Name: "chengdu", Longitude: 104.06667, Latitude: 30.66667},
|
|
{Name: "xian", Longitude: 108.95000, Latitude: 34.26667},
|
|
{Name: "changchun", Longitude: 125.35000, Latitude: 43.88333},
|
|
{Name: "wulumuqi", Longitude: 87.68333, Latitude: 43.76667},
|
|
}
|
|
client.GeoAdd(ctx, "cities", cities...).Result()
|
|
|
|
// 搜索某个距离成员距离范围的其他成员
|
|
// 一,圆的范围,使用成员确定圆心
|
|
fmt.Println(client.GeoSearch(ctx, "cities", &redis.GeoSearchQuery{
|
|
Member: "hangzhou",
|
|
Radius: 1000,
|
|
RadiusUnit: "km",
|
|
}).Result())
|
|
// 可以返回 坐标、距离和Hash
|
|
fmt.Println(client.GeoSearchLocation(ctx, "cities", &redis.GeoSearchLocationQuery{
|
|
GeoSearchQuery: redis.GeoSearchQuery{
|
|
Member: "hangzhou",
|
|
Radius: 1000,
|
|
RadiusUnit: "km",
|
|
},
|
|
WithCoord: true,
|
|
WithDist: true,
|
|
WithHash: true,
|
|
}).Result())
|
|
|
|
// 二,圆的范围,使用坐标确定圆心
|
|
fmt.Println(client.GeoSearch(ctx, "cities", &redis.GeoSearchQuery{
|
|
Longitude: 120.20000,
|
|
Latitude: 30.26667,
|
|
Radius: 1000,
|
|
RadiusUnit: "km",
|
|
}).Result())
|
|
|
|
// 三,矩形的范围,使用坐标(成员)确定中心
|
|
fmt.Println(client.GeoSearch(ctx, "cities", &redis.GeoSearchQuery{
|
|
Member: "hangzhou",
|
|
// OR
|
|
//Longitude: 120.20000,
|
|
//Latitude: 30.26667,
|
|
|
|
// 宽高
|
|
BoxWidth: 1000,
|
|
BoxHeight: 1000,
|
|
BoxUnit: "km",
|
|
}).Result())
|
|
|
|
// 四,搜素结果过滤
|
|
// 可以返回 坐标、距离和Hash
|
|
fmt.Println(client.GeoSearchLocation(ctx, "cities", &redis.GeoSearchLocationQuery{
|
|
GeoSearchQuery: redis.GeoSearchQuery{
|
|
Member: "hangzhou",
|
|
Radius: 1000,
|
|
RadiusUnit: "km",
|
|
},
|
|
WithCoord: true,
|
|
WithDist: true,
|
|
WithHash: true,
|
|
}).Result())
|
|
|
|
fmt.Println(client.GeoSearchLocation(ctx, "cities", &redis.GeoSearchLocationQuery{
|
|
GeoSearchQuery: redis.GeoSearchQuery{
|
|
Member: "hangzhou",
|
|
Radius: 1000,
|
|
RadiusUnit: "km",
|
|
|
|
//Sort: "DESC", // ASC, DESC
|
|
Count: 2,
|
|
CountAny: true,
|
|
},
|
|
WithCoord: true,
|
|
WithDist: true,
|
|
WithHash: true,
|
|
}).Result())
|
|
|
|
}
|
|
|
|
func geoAddGet() {
|
|
opt, err := redis.ParseURL("redis://default:yourPassword@192.168.157.135:6379/0?dial_timeout=1")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
client := redis.NewClient(opt)
|
|
ctx := context.Background()
|
|
|
|
//client.Del(ctx, "cities")
|
|
|
|
// 添加
|
|
fmt.Println(client.GeoAdd(ctx, "cities", &redis.GeoLocation{
|
|
Name: "changsha",
|
|
Longitude: 113.00001,
|
|
Latitude: 28.21667,
|
|
}).Result())
|
|
|
|
cities := []*redis.GeoLocation{
|
|
{Name: "changsha", Longitude: 113.00000, Latitude: 28.21667},
|
|
{Name: "beijing", Longitude: 116.41667, Latitude: 39.91667},
|
|
{Name: "shanghai", Longitude: 121.43333, Latitude: 34.50000},
|
|
{Name: "guangzhou", Longitude: 113.23333, Latitude: 23.16667},
|
|
{Name: "shenzhen", Longitude: 114.06667, Latitude: 22.61667},
|
|
{Name: "tianjin", Longitude: 117.20000, Latitude: 39.13333},
|
|
{Name: "hangzhou", Longitude: 120.20000, Latitude: 30.26667},
|
|
{Name: "chengdu", Longitude: 104.06667, Latitude: 30.66667},
|
|
{Name: "xian", Longitude: 108.95000, Latitude: 34.26667},
|
|
{Name: "changchun", Longitude: 125.35000, Latitude: 43.88333},
|
|
{Name: "wulumuqi", Longitude: 87.68333, Latitude: 43.76667},
|
|
}
|
|
fmt.Println(client.GeoAdd(ctx, "cities", cities...).Result())
|
|
|
|
// 获取信息
|
|
// 获取坐标
|
|
poses, _ := client.GeoPos(ctx, "cities", "changsha", "beijing").Result()
|
|
for _, pos := range poses {
|
|
fmt.Println(pos)
|
|
}
|
|
// 获取 geohash 位置
|
|
fmt.Println(client.GeoHash(ctx, "cities", "changsha", "beijing").Result())
|
|
|
|
// 获取距离
|
|
fmt.Println(client.GeoDist(ctx, "cities", "changsha", "beijing", "km").Result()) // m km mi ft
|
|
|
|
}
|