基於.Net Core的Redis:實現查詢附近的地理信息

一、使用的Redis客戶端爲:ServiceStack.Redis

二、Redis 中的 GEO
Redis是咱們最爲熟悉的K-V數據庫,它常被拿來做爲高性能的緩存數據庫來使用,大部分項目都會用到它。從3.2版本開始它開始提供了GEO能力,用來實現諸如附近位置(e.g.某小區附近的籃球場 )、計算距離等這類依賴於地理位置信息的功能。
本次實例Demo中用到的GEO命令有:git

Redis命令 描述
GEOADD key longitude latitude member [longitude latitude member …] 將指定的地理空間位置(緯度、經度、名稱)添加到指定的 key 中
GEODIST key member1 member2 [unit] 返回兩個給定位置之間的距離
GEORADIUS key longitude latitude radius 以給定的經緯度爲中心, 找出某一半徑內的元素

 

三、實例Demoredis

 1 using ServiceStack.Redis;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Text;
 5 
 6 namespace RedisDemo
 7 {
 8     class NearByDemo
 9     {
10         public static void Start()
11         {
12             var redisMangement = new RedisManagerPool("127.0.0.1:6379");
13             var client = redisMangement.GetClient();
14 
15             //---寫入地理信息---
16             RedisGeo[] redisGeos = new RedisGeo[]
17             {
18                 new RedisGeo()
19                 {
20                     Longitude=117.12,
21                     Latitude=39.08,                    
22                     Member="tianjin"
23                 },
24                 new RedisGeo()
25                 {
26                     Longitude=114.29,
27                     Latitude=38.02,
28                     Member="beijing"
29                 }
30             };
31             //GEOADD key longitude latitude member [longitude latitude member ...]
32             //summary: Add one or more geospatial items in the geospatial index represented using a sorted set
33             client.AddGeoMembers("geo", redisGeos);
34 
35             //---獲取兩個地理位置之間的距離---
36             //GEODIST key member1 member2 [unit]
37             //summary: Returns the distance between two members of a geospatial index
38             double distance = client.CalculateDistanceBetweenGeoMembers("geo", "tianjin", "beijing", "km");
39             Console.WriteLine(distance);
40 
41             //---獲取某城市方圓多少千米內的其餘城市(狹義)---
42             //GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
43             //summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
44             List<RedisGeoResult> geoResults = client.FindGeoResultsInRadius("geo", 115.03, 38.44, 200, "km");
45             foreach (var item in geoResults)
46             {
47                 Console.WriteLine($"{item.Member}--{item.Distance}--{item.Unit}");
48             }
49         }
50     }
51 }
View Code
相關文章
相關標籤/搜索