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); }
/// <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); }
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); }
//--------------------------------------------------------------------- // 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); }
/// <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(); } }
/// <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); }
/// <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; } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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);
/// <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);