コード例 #1
0
        public static async Task <GeoAddress> GetGeoAddressAsync(string apiKey, string originAddress,
                                                                 GeoUnit geoUnit = GeoUnit.Metric, RequestOutputFormat outputFormat = RequestOutputFormat.Json)
        {
            if (apiKey.IsNotNullOrEmpty() && originAddress.IsNotNullOrEmpty())
            {
                var path = $"{(outputFormat == RequestOutputFormat.Json ? "json" : "xml")}?key={apiKey}";
                if (geoUnit != GeoUnit.Metric)
                {
                    path += "&units=imperial";
                }

                path += $"&address={originAddress}";
                using (var rest = new Rest(new Uri(RequestUrl)))
                {
                    var result = await rest.GetAsync <string>(path);

                    if (result.IsNotNullOrEmpty())
                    {
                        var jobject = JObject.Parse(result);
                        if (jobject.ContainsKey("results"))
                        {
                            var valueResult = jobject["results"].ToObject <GeoAddress[]>();
                            if (valueResult?.Length > 0)
                            {
                                return(valueResult[0]);
                            }
                        }
                    }
                }
            }

            return(null);
        }
コード例 #2
0
 public GeoFilter(string property, double lon, double lat, double radius, GeoUnit unit) : base(property)
 {
     this.lon    = lon;
     this.lat    = lat;
     this.radius = radius;
     this.unit   = unit;
 }
コード例 #3
0
 public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
 {
     this._FromDistance = From;
     this._ToDistance   = To;
     this._GeoUnit      = Enum.GetName(typeof(GeoUnit), Unit);
     return(this);
 }
コード例 #4
0
 public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
 {
     this._FromDistance = From;
     this._ToDistance = To;
     this._GeoUnit = Enum.GetName(typeof(GeoUnit), Unit);
     return this;
 }
コード例 #5
0
 private GeoTerm(double longitude, double latitude, double distance, GeoUnit unit)
 {
     Longitude = longitude;
     Latitude  = latitude;
     Distance  = distance;
     Unit      = unit;
 }
コード例 #6
0
 public GeoValue(double lon, double lat, double radius, GeoUnit unit)
 {
     _lon    = lon;
     _lat    = lat;
     _radius = radius;
     _unit   = unit;
 }
コード例 #7
0
        /// <summary>
        /// GEODIST : https://redis.io/commands/geodist
        /// </summary>
        public Task <double?> DistanceAsync(T member1, T member2, GeoUnit unit = GeoUnit.Meters, CommandFlags flags = CommandFlags.None)
        {
            var value1 = this.Connection.Converter.Serialize(member1);
            var value2 = this.Connection.Converter.Serialize(member2);

            return(this.Connection.Database.GeoDistanceAsync(this.Key, value1, value2, unit, flags));
        }
コード例 #8
0
        /// <summary>
        /// 返回两个给定位置之间的距离
        /// </summary>
        /// <param name="key"></param>
        /// <param name="member1"></param>
        /// <param name="member2"></param>
        /// <param name="geoUnit"></param>
        /// <returns></returns>
        public double GeoDist(string key, string member1, string member2, GeoUnit geoUnit = GeoUnit.m)
        {
            double result = 0D;

            double.TryParse(RedisConnection.DoWithMutiParams(RequestType.GEODIST, key, member1, member2, geoUnit.ToString()).Data, out result);

            return(result);
        }
コード例 #9
0
 public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
 {
     _.From = From;
     _.To   = To;
     _.Unit = Unit;
     this.IsValidDistance = true;
     return(this);
 }
コード例 #10
0
ファイル: GeoRadius.cs プロジェクト: ITDreamOs/Study
 /// <summary>
 /// Creates a new GeoRadius
 /// </summary>
 public GeoRadius(RedisKey key, GeoPosition geoPosition, double radius, int maxReturnCount = -1, GeoUnit unit = GeoUnit.Meters, GeoRadiusOptions geoRadiusOptions = (GeoRadiusOptions.WithCoordinates | GeoRadiusOptions.WithDistance))
 {
     Key              = key;
     GeoPosition      = geoPosition;
     Radius           = radius;
     Unit             = unit;
     GeoRadiusOptions = geoRadiusOptions;
     MaxReturnCount   = maxReturnCount;
 }
コード例 #11
0
 public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
 {
     From.ThrowIfNull("From");
     To.ThrowIfNull("To");
     this._FromDistance = From;
     this._ToDistance   = To;
     this._GeoUnit      = Enum.GetName(typeof(GeoUnit), Unit);
     return(this);
 }
コード例 #12
0
 public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
 {
     From.ThrowIfNull("From");
     To.ThrowIfNull("To");
     this._FromDistance = From;
     this._ToDistance = To;
     this._GeoUnit = Enum.GetName(typeof(GeoUnit), Unit);
     return this;
 }
コード例 #13
0
 protected FilterContainer GeoDistanceFilter <TFilterOnDocument>(
     Expression <Func <TFilterOnDocument, object> > field, double latitude, double longitude, double distance,
     GeoUnit unit = GeoUnit.Miles, GeoOptimizeBBox optimize = GeoOptimizeBBox.None)
     where TFilterOnDocument : class
 {
     return(Filter <TFilterOnDocument> .GeoDistance(field, geo => geo
                                                    .Location(latitude, longitude)
                                                    .Optimize(optimize)
                                                    .Distance(distance, unit)));
 }
コード例 #14
0
ファイル: Geo.cs プロジェクト: CuiYuXi/FreeRedis
 public object GeoRadiusByMember(string key, string member, decimal radius, GeoUnit unit, bool withdoord, bool withdist, bool withhash, long count, Collation?collation, string storekey, string storedistkey) => Call <object>("GEORADIUSBYMEMBER"
                                                                                                                                                                                                                                .Input(key, member, radius)
                                                                                                                                                                                                                                .InputRaw(unit)
                                                                                                                                                                                                                                .InputIf(withdoord, "WITHCOORD")
                                                                                                                                                                                                                                .InputIf(withdist, "WITHDIST")
                                                                                                                                                                                                                                .InputIf(withhash, "WITHHASH")
                                                                                                                                                                                                                                .InputIf(count != 0, "COUNT", count)
                                                                                                                                                                                                                                .InputIf(collation != null, collation)
                                                                                                                                                                                                                                .InputIf(!string.IsNullOrWhiteSpace(storekey), "STORE", storekey)
                                                                                                                                                                                                                                .InputIf(!string.IsNullOrWhiteSpace(storedistkey), "STOREDIST", storedistkey)
                                                                                                                                                                                                                                .FlagKey(key), rt => rt.ThrowOrValue());
コード例 #15
0
ファイル: RedisContext.cs プロジェクト: lshsuper/redis-helper
        public GeoRadiusResult[] GeoRedius(string key,
                                           double lng,
                                           double lat,
                                           double radius,
                                           GeoUnit unit = GeoUnit.Miles,
                                           int count    = -1, Order order = Order.Ascending, int db = -1)
        {
            var server = GetDataBase(db);

            return(server.GeoRadius(key, lng, lat, radius, unit, count, order));
        }
コード例 #16
0
        internal static string AsRedisString(this GeoUnit value)
        {
            switch (value)
            {
            case GeoUnit.Feet: return("ft");

            case GeoUnit.Kilometers: return("km");

            case GeoUnit.Meters: return("m");

            case GeoUnit.Miles: return("mi");

            default: throw new InvalidOperationException($"Unknown unit: {value}");
            }
        }
コード例 #17
0
        internal static string GetRedisUnit(GeoUnit unit)
        {
            switch (unit)
            {
            case GeoUnit.Meters: return("m");

            case GeoUnit.Kilometers: return("km");

            case GeoUnit.Miles: return("mi");

            case GeoUnit.Feet: return("ft");

            default:
                throw new ArgumentOutOfRangeException(nameof(unit));
            }
        }
コード例 #18
0
        public static Task <DistanceMatrixResponse> GetDistanceAsync(string apiKey, List <string> originAddresses,
                                                                     List <string> destinationAddresses,
                                                                     GeoUnit geoUnit = GeoUnit.Metric, RequestOutputFormat outputFormat = RequestOutputFormat.Json)
        {
            if (apiKey.IsNotNullOrEmpty() && originAddresses?.Count > 0 &&
                destinationAddresses?.Count() > 0)
            {
                var path = $"{(outputFormat == RequestOutputFormat.Json ? "json" : "xml")}?key={apiKey}";
                if (geoUnit != GeoUnit.Metric)
                {
                    path += "&units=imperial";
                }
                var origins      = string.Join("|", originAddresses.Select(item => item.Trim()));
                var destinations = string.Join("|", destinationAddresses.Select(item => item.Trim()));

                path += $"&origins={origins}&destinations={destinations}";
                using (var rest = new Rest(new Uri(RequestUrl)))
                {
                    return(rest.GetAsync <DistanceMatrixResponse>(path));
                }
            }

            return(Task.FromResult(default(DistanceMatrixResponse)));
        }
コード例 #19
0
 public GeoDistanceFilterDescriptor Distance(double distance, GeoUnit unit)
 {
     this._Distance = distance;
     this._GeoUnit  = Enum.GetName(typeof(GeoUnit), unit);
     return(this);
 }
コード例 #20
0
        public static async Task <List <DistanceMatrixDistance> > GetDistancesAsync(string apiKey, string originAddress,
                                                                                    List <string> destinationAddresses, GeoUnit geoUnit = GeoUnit.Metric,
                                                                                    RequestOutputFormat outputFormat = RequestOutputFormat.Json)
        {
            var result = await GetDistanceAsync(apiKey, new List <string> {
                originAddress
            },
                                                destinationAddresses,
                                                geoUnit, outputFormat);

            if (result?.Status == "OK" && result.Rows?.Length > 0 && result.Rows[0].Elements?.Length > 0)
            {
                return(result.Rows[0].Elements?.ToList());
            }

            return(null);
        }
コード例 #21
0
 public SortGeoDistanceDescriptor <T> Unit(GeoUnit unit)
 {
     unit.ThrowIfNull("unit");
     Self.GeoUnit = unit;
     return(this);
 }
コード例 #22
0
 public GeoDistanceFilterDescriptor Distance(double distance, GeoUnit unit)
 {
     this._Distance = distance;
     this._GeoUnit = Enum.GetName(typeof(GeoUnit), unit);
     return this;
 }
コード例 #23
0
		public GeoDistanceFilterDescriptor Distance(double distance, GeoUnit unit)
		{
			((IGeoDistanceFilter)this).Distance = distance;
			((IGeoDistanceFilter)this).Unit = unit;
			return this;
		}
コード例 #24
0
        /// <summary>
        /// 找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
        /// </summary>
        /// <param name="timeSpan"></param>
        /// <param name="key"></param>
        /// <param name="member"></param>
        /// <param name="dist"></param>
        /// <param name="geoUnit"></param>
        /// <param name="asc"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public async Task <List <GeoDistInfo> > GeoRandiusByMemberAsync(TimeSpan timeSpan, string key, string member, double dist, GeoUnit geoUnit = GeoUnit.m, bool asc = true, int count = 20)
        {
            var data = await _cnn.DoWithMutiParamsAsync(RequestType.GEORADIUSBYMEMBER, timeSpan, key, member, dist.ToString(), geoUnit.ToString(), "WITHDIST", "WITHCOORD", (asc ? "ASC" : "DESC"), "COUNT", count.ToString());

            return(data.ToGeoDistInfos());
        }
コード例 #25
0
		public GeoDistanceRangeFilterDescriptor Distance(double From, double To, GeoUnit Unit)
		{
			_.From = From;
			_.To = To;
			_.Unit = Unit;
			this.IsValidDistance = true;
			return this;
		}
コード例 #26
0
        /// <summary>
        /// 返回两个给定位置之间的距离
        /// </summary>
        /// <param name="timeSpan"></param>
        /// <param name="key"></param>
        /// <param name="member1"></param>
        /// <param name="member2"></param>
        /// <param name="geoUnit"></param>
        /// <returns></returns>
        public async Task <double> GeoDistAsync(TimeSpan timeSpan, string key, string member1, string member2, GeoUnit geoUnit = GeoUnit.m)
        {
            double result;

            var data = await _cnn.DoWithMutiParamsAsync(RequestType.GEODIST, timeSpan, key, member1, member2, geoUnit.ToString());

            double.TryParse(data.Data, out result);

            return(result);
        }
コード例 #27
0
 public GeoHashCellFilterDescriptor Distance(double distance, GeoUnit unit)
 {
     ((IGeoHashCellFilter)this).Precision = distance;
     ((IGeoHashCellFilter)this).Unit = unit;
     return this;
 }
コード例 #28
0
 public Task <GeoRadiusResult[]> GeoRadiusAsync(RedisKey key, double longitude, double latitude, double radius, GeoUnit unit = GeoUnit.Meters, int count = -1, Order?order = null, GeoRadiusOptions options = GeoRadiusOptions.Default, CommandFlags flags = CommandFlags.None)
 => Inner.GeoRadiusAsync(ToInner(key), longitude, latitude, radius, unit, count, order, options, flags);
コード例 #29
0
 public double?GeoDistance(RedisKey key, RedisValue member1, RedisValue member2, GeoUnit unit = GeoUnit.Meters, CommandFlags flags = CommandFlags.None)
 {
     return(Inner.GeoDistance(ToInner(key), member1, member2, unit, flags));
 }
コード例 #30
0
 public GeoDistanceFilterDescriptor Distance(double distance, GeoUnit unit)
 {
     ((IGeoDistanceFilter)this).Distance = distance;
     ((IGeoDistanceFilter)this).Unit     = unit;
     return(this);
 }
コード例 #31
0
 public GeoRadiusResult[] GeoRadius(RedisKey key, RedisValue member, double radius, GeoUnit unit = GeoUnit.Meters, int count = -1, Order?order = null, GeoRadiusOptions options = GeoRadiusOptions.Default, CommandFlags flags = CommandFlags.None)
 {
     return(Inner.GeoRadius(ToInner(key), member, radius, unit, count, order, options, flags));
 }
コード例 #32
0
 /// <summary>
 /// 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
 /// </summary>
 /// <param name="key"></param>
 /// <param name="lng"></param>
 /// <param name="lat"></param>
 /// <param name="dist"></param>
 /// <param name="geoUnit"></param>
 /// <param name="asc"></param>
 /// <param name="count"></param>
 /// <returns></returns>
 public List <GeoDistInfo> GeoRandius(string key, double lng, double lat, double dist, GeoUnit geoUnit = GeoUnit.m, bool asc = true, int count = 20)
 {
     return(RedisConnection.DoWithMutiParams(RequestType.GEORADIUS, key, lng.ToString(), lat.ToString(), dist.ToString(), geoUnit.ToString(), "WITHDIST", "WITHCOORD", (asc ? "ASC" : "DESC"), "COUNT", count.ToString()).ToGeoDistInfos());
 }
コード例 #33
0
 public Task <double?> GeoDistanceAsync(RedisKey key, RedisValue member1, RedisValue member2, GeoUnit unit = GeoUnit.Meters, CommandFlags flags = CommandFlags.None)
 => Inner.GeoDistanceAsync(ToInner(key), member1, member2, unit, flags);
コード例 #34
0
ファイル: Batch.cs プロジェクト: zouhunter/SAEA
        public void GeoDistAsync(string key, string member1, string member2, GeoUnit geoUnit = GeoUnit.m)
        {
            var cmd = _redisCode.Coder(RequestType.GEODIST, key, member1, member2, geoUnit.ToString());

            _batchData.Add(new BatchItem(RequestType.GEODIST, cmd));
        }
コード例 #35
0
 public GeoDistanceAggregationDescriptor <T> Unit(GeoUnit unit)
 {
     this._Unit = unit;
     return(this);
 }
コード例 #36
0
        /// <summary>
        /// GEORADIUSBYMEMBER : https://redis.io/commands/georadiusbymember
        /// </summary>
        public async Task <RedisGeoRadiusResult <T>[]> RadiusAsync(T member, double radius, GeoUnit unit = GeoUnit.Meters, int count = -1, Order?order = null, GeoRadiusOptions options = GeoRadiusOptions.Default, CommandFlags flags = CommandFlags.None)
        {
            var value   = this.Connection.Converter.Serialize(member);
            var results = await this.Connection.Database.GeoRadiusAsync(this.Key, value, radius, unit, count, order, options, flags).ConfigureAwait(false);

            return(results.Select(this.Connection.Converter, (x, c) => x.ToGenerics <T>(c)).ToArray());
        }