当前位置:网站首页>.netcore redis GEO类型
.netcore redis GEO类型
2022-06-30 21:08:00 【小兜全糖(Cx)】
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
demo
using CoreRedis.Config;
using Microsoft.Extensions.Options;
using StackExchange.Redis;
namespace CoreRedis.RedisDataType
{
public class RedisGeo
{
private readonly ConnectionMultiplexer _connectionMultiplexer;
private readonly IDatabase _database;
private readonly RedisConfig _redisConfig;
public RedisGeo(IOptionsMonitor<RedisConfig> redisConfig)
{
_redisConfig = redisConfig.CurrentValue;
_connectionMultiplexer = ConnectionMultiplexer.Connect(_redisConfig.Value);
_database = _connectionMultiplexer.GetDatabase();
}
/* 1. 将位置名称以及经纬度存储到位置集合中 2. 根据给定的位置名称从位置集合中取出经纬度 3. 计算两个位置之间的直线距离 4. 根据给定的位置或者经纬度,找出指定半径内的其他位置 5. 获取指定位置的GEOHASH值 */
//将位置名称以及经纬度存储到位置集合中
//返回TRUE表示新增,FALSE表示更新
public async Task<Task<bool>> AddGeo(string name,double longitude, double latitude,string key)
{
return _database.GeoAddAsync(key, longitude, latitude,name);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="name"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Task<bool>> DeleteGeo(string name,string key)
{
return _database.GeoRemoveAsync(key, name);
}
//获取指定位置的坐标
public async Task<Task<GeoPosition?>> GEOPOS(string name,string key)
{
return _database.GeoPositionAsync(key, name);
}
/// <summary>
///
/// 计算两点间的直线距离,GeoUnit 指定单位
/// </summary>
/// <param name="position1"></param>
/// <param name="position2"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Task<double?>> GeoDistance(string position1,string position2,string key)
{
return _database.GeoDistanceAsync(key,position1 ,position2,GeoUnit.Kilometers);
}
/// <summary>
/// 根据经纬度获取指定半径内的地点,并排序,返回距离
/// </summary>
/// <param name="key"></param>
/// <param name="longitude"></param>
/// <param name="latitude"></param>
/// <param name="radius"></param>
/// <param name="order"></param>
/// <param name="count"></param>
/// <returns></returns>
public async Task<Task<GeoRadiusResult[]>> GEORADIUS(string key, double longitude, double latitude,double radius,Order order=Order.Descending,int count=-1)
{
return _database.GeoRadiusAsync(key, longitude, latitude,radius,GeoUnit.Kilometers,count,order,GeoRadiusOptions.WithDistance);
}
/// <summary>
/// 计算位置的hash , 可以根据hash反推出来经纬度
/// </summary>
/// <param name="key"></param>
/// <param name="name"></param>
/// <returns></returns>
public async Task<Task<string>> GEOHASH(string key,string name)
{
return _database.GeoHashAsync(key, name);
}
}
}
controller
using CoreRedis.RedisDataType;
using Microsoft.AspNetCore.Mvc;
using StackExchange.Redis;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace CoreRedis.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class RedisGeoController : ControllerBase
{
// GET: api/<RedisGeoController>
private readonly RedisGeo _redisGeo;
public RedisGeoController(RedisGeo redisGeo)
{
_redisGeo = redisGeo;
}
[HttpGet]
public async Task<GeoPosition?> GEOPOS(string key,string name)
{
return await _redisGeo.GEOPOS(name, key).Result;
}
// POST api/<RedisGeoController>
[HttpPost]
public async Task<bool> AddGeo([FromQuery] string key, [FromQuery] string name, [FromQuery] double longitude, [FromQuery] double latitude)
{
return await _redisGeo.AddGeo(name, longitude, latitude, key).Result;
}
// DELETE api/<RedisGeoController>/5
[HttpDelete]
public async Task<bool> Delete([FromQuery] string key, [FromQuery] string name)
{
return await _redisGeo.DeleteGeo(name,key).Result;
}
}
}
边栏推荐
猜你喜欢

Lumiprobe染料 NHS 酯丨BDP FL NHS 酯研究

BioVendor sRAGE Elisa试剂盒测试原理和注意事项

企业保护 API 安全迫在眉睫

Label Contrastive Coding based Graph Neural Network for Graph Classification

Lvalue reference and lvalue reference

Lumiprobe生物素亚磷酰胺(羟脯氨酸)说明书

偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的

Oracle 数据库表结构 Excel 导出

ICML2022 | 序列决策的效用理论

uniapp怎么上传二进制图片
随机推荐
B_QuRT_User_Guide(35)
Lumiprobe biotin phosphimide (hydroxyproline) instructions
数字货币:影响深远的创新
Qiao NPMS: search for NPM packages
Learning summary
What about degradation of text generation model? Simctg tells you the answer
Huffman tree (I) basic concept and C language implementation
Comparison between QT and other GUI Libraries
Adobe-Photoshop(PS)-脚本开发-去除文件臃肿脚本
ArcMap|用字段计算器对不同类别的id赋值
为什么vscode用久了电脑速度变慢?
Peking University ACM problems 1002:487-3279
PHP require/include differences
19.04 distributor
Study on lumiprobe modified triphosphate biotin-11-utp
What bank card do you need to open an account online? In addition, is it safe to open an account online now?
Software engineering UML drawing
uniapp-富文本编辑器
毕业五年,想当初若没有入行测试,我是否还会如这般焦虑
Et la dégradation du modèle de génération de texte? Simctg vous donne la réponse