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