zoukankan      html  css  js  c++  java
  • 基于.Net Core的Redis:实现查询附近的地理信息

    1、使用的Redis客户端为:ServiceStack.Redis

    2、Redis 中的 GEO
    Redis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库来使用,大部分项目都会用到它。从3.2版本开始它开始提供了GEO能力,用来实现诸如附近位置(e.g.某小区附近的篮球场 )、计算距离等这类依赖于地理位置信息的功能。
    本次实例Demo中用到的GEO命令有:

    Redis命令 描述
    GEOADD key longitude latitude member [longitude latitude member …] 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中
    GEODIST key member1 member2 [unit] 返回两个给定位置之间的距离
    GEORADIUS key longitude latitude radius 以给定的经纬度为中心, 找出某一半径内的元素

    3、实例Demo

     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
  • 相关阅读:
    实验3 简单的分支与循环结构 2.利用循环计算n个圆柱体体积。
    实验 3 简单的分支与循环结构 第一题 编写求圆面积的程序,要求当输入的半径r<=0时,提示输入错误,要求r为浮点型,r的数值是动态的由键盘输入
    心得3
    作业 3 应用分支与循环结构解决问题
    实验5 函数
    实验1 题目2
    第三,四章学习心得
    第2章学习心得
    第一章学习心得
    5-3
  • 原文地址:https://www.cnblogs.com/Er-mao/p/13371619.html
Copyright © 2011-2022 走看看