private void ReadBox(IGeoBoundingBoxFilter filter, JsonReader reader)
        {
            reader.Read();
            if (reader.TokenType != JsonToken.StartObject)
            {
                return;
            }
            reader.Read();
            var firstProperty = reader.Value as string;

            if (firstProperty == "top_left")
            {
                reader.Read();
                if (reader.ValueType == typeof(string))
                {
                    filter.TopLeft = reader.Value as string;
                    reader.Read();
                    reader.Read();
                    filter.BottomRight = reader.Value as string;
                }
                else if (reader.TokenType == JsonToken.StartArray)
                {
                    var values = JArray.Load(reader).Values <double>();
                    filter.TopLeft = string.Join(", ", values);
                    reader.Read();
                    reader.Read();
                    values             = JArray.Load(reader).Values <double>();
                    filter.BottomRight = string.Join(", ", values);
                }
                else if (reader.TokenType == JsonToken.StartObject)
                {
                    var latlon = JObject.Load(reader).ToObject <LatLon>();
                    filter.TopLeft = "{0}, {1}".F(latlon.Lon, latlon.Lat);
                    reader.Read();
                    reader.Read();
                    latlon             = JObject.Load(reader).ToObject <LatLon>();
                    filter.BottomRight = "{0}, {1}".F(latlon.Lon, latlon.Lat);
                }
            }
            //vertices
            else if (firstProperty == "top")
            {
                reader.Read();
                var top = reader.Value as double?;
                reader.Read();
                reader.Read();
                var left = reader.Value as double?;
                reader.Read();
                reader.Read();
                var bottom = reader.Value as double?;
                reader.Read();
                reader.Read();
                var right = reader.Value as double?;

                filter.TopLeft     = "{0}, {1}".F(top, left);
                filter.BottomRight = "{0}, {1}".F(bottom, right);
            }
            reader.Read();
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var filter = new GeoBoundingBoxFilterDescriptor();
            IGeoBoundingBoxFilter f = filter;

            if (reader.TokenType != JsonToken.StartObject)
            {
                return(null);
            }

            var depth = reader.Depth;

            while (reader.Read() && reader.Depth >= depth && reader.Value != null)
            {
                var property = reader.Value as string;
                switch (property)
                {
                case "_cache":
                    reader.Read();
                    f.Cache = reader.Value as bool?;
                    break;

                case "_name":
                    reader.Read();
                    f.FilterName = reader.Value as string;
                    break;

                case "_cache_key":
                    reader.Read();
                    f.CacheKey = reader.Value as string;
                    break;

                case "type":
                    reader.Read();
                    f.GeoExecution = (reader.Value as string).ToEnum <GeoExecution>();
                    break;

                default:
                    f.Field = property;
                    ReadBox(f, reader);
                    break;
                }
            }
            return(filter);
        }
 public virtual void Visit(IGeoBoundingBoxFilter filter)
 {
     Write("geo_bounding_box");
 }
Exemplo n.º 4
0
 public virtual void Visit(IGeoBoundingBoxFilter filter)
 {
     Write("geo_bounding_box");
 }
Exemplo n.º 5
0
 public virtual void Visit(IGeoBoundingBoxFilter customFiltersScore)
 {
 }
		private void ReadBox(IGeoBoundingBoxFilter filter, JsonReader reader)
		{
			var c = CultureInfo.InvariantCulture;
			reader.Read();
			if (reader.TokenType != JsonToken.StartObject)
				return;
			reader.Read();
			var firstProperty = reader.Value as string;
			if (firstProperty == "top_left")
			{
				reader.Read();
				if (reader.ValueType == typeof(string))
				{
					filter.TopLeft = reader.Value as string;
					reader.Read();
					reader.Read();
					filter.BottomRight = reader.Value as string;
				}
				else if (reader.TokenType == JsonToken.StartArray)
				{
					var values = JArray.Load(reader).Values<double>();
					filter.TopLeft = string.Join(", ", values.Select(v=>v.ToString(c)));
					reader.Read();
					reader.Read();
					values = JArray.Load(reader).Values<double>();
					filter.BottomRight =string.Join(", ", values.Select(v=>v.ToString(c))); 
				}
				else if (reader.TokenType == JsonToken.StartObject)
				{
					var latlon = JObject.Load(reader).ToObject<LatLon>();
					filter.TopLeft = "{0}, {1}".F(latlon.Lon, latlon.Lat); 
					reader.Read();
					reader.Read();
					latlon = JObject.Load(reader).ToObject<LatLon>();
					filter.BottomRight = "{0}, {1}".F(latlon.Lon, latlon.Lat); 
				}
			}
			//vertices
			else if (firstProperty == "top")
			{
				reader.Read();
				var top = reader.Value as double?;
				reader.Read();
				reader.Read();
				var left = reader.Value as double?;
				reader.Read();
				reader.Read();
				var bottom = reader.Value as double?;
				reader.Read();
				reader.Read();
				var right = reader.Value as double?;

				filter.TopLeft = "{0}, {1}".F(top, left);
				filter.BottomRight = "{0}, {1}".F(bottom, right);

			}
			reader.Read();
		}
Exemplo n.º 7
0
		public virtual void Visit(IGeoBoundingBoxFilter customFiltersScore)
		{
		}