Exemple #1
0
        public void GeoQuery_GeoHeatmapQueryOptions()
        {
            GeoHeatmapQueryOptions options;
            GeoQueryMsg            queryMsg;

            // Test default options

            options = new GeoHeatmapQueryOptions();
            Assert.IsTrue(options.MapBounds.IsEmpty);
            Assert.IsNull(options.ResolutionMiles);
            Assert.IsNull(options.ResolutionKilometers);

            options.MapBounds       = new GeoRectangle(10, 10, -10, -10);
            options.ResolutionMiles = 10;

            Assert.AreEqual(new GeoRectangle(10, 10, -10, -10), options.MapBounds);
            Assert.AreEqual(10.0, options.ResolutionMiles);
            Assert.IsTrue(Math.Abs(10.0 / 0.621371192 - options.ResolutionKilometers.Value) < 0.001);

            // Test serialization and rehydration from a query message.

            queryMsg = new GeoQueryMsg();
            options.SaveTo(queryMsg, Stub.Param);

            options = new GeoHeatmapQueryOptions();
            options.LoadFrom(queryMsg, Stub.Param);

            Assert.AreEqual(new GeoRectangle(10, 10, -10, -10), options.MapBounds);
            Assert.AreEqual(10.0, options.ResolutionMiles);
            Assert.IsTrue(Math.Abs(10.0 / 0.621371192 - options.ResolutionKilometers.Value) < 0.001);
        }
Exemple #2
0
        /// <summary>
        /// Deserializes the query options from a <see cref="GeoQueryMsg" /> if any options
        /// are present.
        /// </summary>
        /// <param name="queryMsg">The source message.</param>
        /// <returns>The deserialized options or <c>null</c> if none are present.</returns>
        internal static GeoQueryOptions Load(GeoQueryMsg queryMsg)
        {
            string          queryType = queryMsg._Get("QueryType", (string)null);
            GeoQueryOptions options;

            switch (queryType)
            {
            case EntityQueryKey:

                options = new GeoEntityQueryOptions();
                break;

            case HeatmapQueryKey:

                options = new GeoHeatmapQueryOptions();
                break;

            default:

                return(null);
            }

            options.LoadFrom(queryMsg);
            return(options);
        }
Exemple #3
0
        public void GeoQuery_GeoEntityQueryOptions()
        {
            GeoEntityQueryOptions options;
            GeoQueryMsg           queryMsg;

            // Test default options

            options = new GeoEntityQueryOptions();
            Assert.AreEqual(1, options.FixCount);
            Assert.AreEqual(DateTime.MinValue, options.MinFixTimeUtc);
            Assert.AreEqual(GeoFixField.All, options.FixFields);

            options.FixCount      = 2;
            options.MinFixTimeUtc = new DateTime(2011, 5, 2);
            options.FixFields     = GeoFixField.Latitude | GeoFixField.Longitude;

            // Test serialization and rehydration from a query message.

            queryMsg = new GeoQueryMsg();
            options.SaveTo(queryMsg, Stub.Param);

            options = new GeoEntityQueryOptions();
            options.LoadFrom(queryMsg, Stub.Param);

            Assert.AreEqual(2, options.FixCount);
            Assert.AreEqual(new DateTime(2011, 5, 2), options.MinFixTimeUtc);
            Assert.AreEqual(GeoFixField.Latitude | GeoFixField.Longitude, options.FixFields);
        }
Exemple #4
0
        //---------------------------------------------------------------------
        // Static members

        internal static GeoQuery FromMessage(GeoQueryMsg queryMsg)
        {
            GeoQuery query = new GeoQuery();
            string   value;

            query.Options       = GeoQueryOptions.Load(queryMsg);
            query.EntityFilters = queryMsg._GetArray("EntityFilter");
            query.GroupFilters  = queryMsg._GetArray("QueryFilter");

            value = queryMsg._Get("Region", (string)null);
            if (!string.IsNullOrWhiteSpace(value))
            {
                query.Region = GeoRegion.Parse(value);
            }

            if (!string.IsNullOrWhiteSpace(queryMsg["MinTimeUtc"]))
            {
                query.MinTimeUtc = queryMsg._Get("MinTimeUtc", DateTime.MinValue);
            }

            if (!string.IsNullOrWhiteSpace(queryMsg["MaxTimeUtc"]))
            {
                query.MaxTimeUtc = queryMsg._Get("MaxTimeUtc", DateTime.MaxValue);
            }

            return(query);
        }
Exemple #5
0
        /// <summary>
        /// Derived classes must implement this to save the option fields to the
        /// query message passed.
        /// </summary>
        /// <param name="queryMsg">The target message.</param>
        /// <remarks>
        /// The derived class must store its values as <see cref="PropertyMsg" /> fields
        /// using <b>"Option."</b> as the key prefix for each value's property name.
        /// </remarks>
        protected override void SaveTo(GeoQueryMsg queryMsg)
        {
            if (!MapBounds.IsEmpty)
            {
                queryMsg["Option.MapBounds"] = MapBounds.ToString();
            }

            if (ResolutionMiles.HasValue)
            {
                queryMsg["Option.ResolutionMiles"] = ResolutionMiles.Value.ToString();
            }
        }
Exemple #6
0
        /// <summary>
        /// Generates a <see cref="GeoQueryMsg" /> from the instance.
        /// </summary>
        /// <returns>The query message.</returns>
        internal GeoQueryMsg ToMessage()
        {
            var queryMsg = new GeoQueryMsg();
            var options  = Options;

            if (options == null)
            {
                options = new GeoEntityQueryOptions();
            }

            options.Save(queryMsg);

            if (EntityFilters != null)
            {
                for (int i = 0; i < EntityFilters.Length; i++)
                {
                    queryMsg[string.Format("EntityFilter[{0}]", i)] = EntityFilters[i];
                }
            }

            if (GroupFilters != null)
            {
                for (int i = 0; i < GroupFilters.Length; i++)
                {
                    queryMsg[string.Format("GroupFilter[{0}]", i)] = GroupFilters[i];
                }
            }

            if (Region != null)
            {
                queryMsg["Region"] = Region.ToString();
            }

            if (MinTimeUtc.HasValue)
            {
                queryMsg._Set("MinTimeUtc", MinTimeUtc.Value);
            }

            if (MaxTimeUtc.HasValue)
            {
                queryMsg._Set("MaxTimeUtc", MaxTimeUtc.Value);
            }

            return(queryMsg);
        }
Exemple #7
0
        /// <summary>
        /// Derived classes must implement this to load the option fields from the
        /// query passed.
        /// </summary>
        /// <param name="queryMsg">The source message.</param>
        /// <remarks>
        /// The derived class must store its values as <see cref="PropertyMsg" /> fields
        /// using <b>"Option."</b> as the key prefix for each value's property name.
        /// </remarks>
        protected override void LoadFrom(GeoQueryMsg queryMsg)
        {
            string value;
            double d;

            value = queryMsg._Get("Option.MapBounds", (string)null);
            if (!string.IsNullOrWhiteSpace(value))
            {
                MapBounds = (GeoRectangle)GeoRegion.Parse(value);
            }

            value = queryMsg._Get("Option.ResolutionMiles", (string)null);
            if (!string.IsNullOrWhiteSpace(value))
            {
                if (double.TryParse(value, out d))
                {
                    ResolutionMiles = d;
                }
            }
        }
Exemple #8
0
 /// <summary>
 /// Derived classes must implement this to load the option fields from the
 /// query passed.
 /// </summary>
 /// <param name="queryMsg">The source message.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 protected override void LoadFrom(GeoQueryMsg queryMsg)
 {
     this.FixCount      = queryMsg._Get("Option.FixCount", this.FixCount);
     this.MinFixTimeUtc = queryMsg._Get("Option.MinFixTimeUtc", this.MinFixTimeUtc);
     this.FixFields     = (GeoFixField)queryMsg._Get("Option.FixFields", (int)this.FixFields);
 }
Exemple #9
0
 /// <summary>
 /// Derived classes must implement this to save the option fields to the
 /// query message passed.
 /// </summary>
 /// <param name="queryMsg">The target message.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 protected override void SaveTo(GeoQueryMsg queryMsg)
 {
     queryMsg._Set("Option.FixCount", this.FixCount);
     queryMsg._Set("Option.MinFixTimeUtc", this.MinFixTimeUtc);
     queryMsg._Set("Option.FixFields", (int)this.FixFields);
 }
Exemple #10
0
 /// <summary>
 /// Used by unit tests to load the option fields from the query passed.
 /// </summary>
 /// <param name="queryMsg">The source message.</param>
 /// <param name="stub">Pass a <see cref="Stub"/> value.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 internal void LoadFrom(GeoQueryMsg queryMsg, Stub stub)
 {
     LoadFrom(queryMsg);
 }
Exemple #11
0
 /// <summary>
 /// Used by unit tests to save the option fields to the query message passed.
 /// </summary>
 /// <param name="queryMsg">The target message.</param>
 /// <param name="stub">Pass a <see cref="Stub"/> value.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 internal void SaveTo(GeoQueryMsg queryMsg, Stub stub)
 {
     SaveTo(queryMsg);
 }
Exemple #12
0
 /// <summary>
 /// Serializes the query options to a <see cref="GeoQueryMsg" />.
 /// </summary>
 /// <param name="queryMsg">The target message.</param>
 internal void Save(GeoQueryMsg queryMsg)
 {
     queryMsg["QueryType"] = this.QueryKey;
     this.SaveTo(queryMsg);
 }
Exemple #13
0
 /// <summary>
 /// Derived classes must implement this to load the option fields from the
 /// query passed.
 /// </summary>
 /// <param name="queryMsg">The source message.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 protected abstract void LoadFrom(GeoQueryMsg queryMsg);
Exemple #14
0
 /// <summary>
 /// Derived classes must implement this to save the option fields to the
 /// query message passed.
 /// </summary>
 /// <param name="queryMsg">The target message.</param>
 /// <remarks>
 /// The derived class must store its values as <see cref="PropertyMsg" /> fields
 /// using <b>"Option."</b> as the key prefix for each value's property name.
 /// </remarks>
 protected abstract void SaveTo(GeoQueryMsg queryMsg);