public static GenericTraveltimeSegment MergeDocuments(TraveltimeSegmentStatic staticData, TraveltimeSegment dynamicData) { if (staticData.Id != dynamicData.Id) { throw new InvalidOperationException("Documents do not match"); } GenericTraveltimeSegment _new = new GenericTraveltimeSegment { Source = "Be-Mobile", Timestamp = new DocumentDate((DateTime)dynamicData.Timestamp), SegmentName = staticData.Id, FromLatitude = staticData.beginnodelatitude, ToLatitude = staticData.endnodelatitude, FromLongitude = staticData.beginnodelongitude, ToLongitude = staticData.endnodelongitude, Length = staticData.lengthmm / 1000.0, Duration = dynamicData.durationInMs / 1000, OptimalSpeed = staticData.optimalspeedkph }; _new.SetSpeed(); _new.SetId(); _new = FillLocationInfo(staticData, _new); return(_new); }
public static int[] ProcessMerges(List <TraveltimeSegment> input, Verification verifyType, QueryManager <TraveltimeStatic> staticInfoQuerier) { int[] resultCount = { 0, 0, 0 }; //Success, Failed, Skipped foreach (TraveltimeSegment segment in input) { TraveltimeSegmentStatic merged = GetStaticData(segment.Id, staticInfoQuerier); GenericTraveltimeSegment result = MergeDocuments(merged, segment); if (verifyType == Verification.CheckExisting) { try { PersistDocuments.Get(result.Id).Wait(); resultCount[2]++; // Console.WriteLine($"Merged document {result.Id} not persisted in the database, conflict found."); } catch (Exception ex) { resultCount[0]++; PersistResultDocuments(result); //Console.WriteLine($"Merged document {result.Id} persisted in the database"); } } else { resultCount[0]++; PersistResultDocuments(result); //Console.WriteLine($"Merged document {result.Id} persisted in the database"); } } return(resultCount); }
public static List <GenericTraveltimeSegment> Transform(QueryManager <TraveltimeStatic> staticInfoQuerier, List <TraveltimeSegment> input) { List <GenericTraveltimeSegment> _new = new List <GenericTraveltimeSegment>(); foreach (TraveltimeSegment segment in input) { TraveltimeSegmentStatic merged = staticInfoQuerier.GetAllResults($"SELECT c.Merged FROM c where c.Merged.TrajectID = '{segment.Id}'")[0].Merged; _new.Add(MergeDocuments(merged, segment)); } Console.WriteLine($"Transformed {_new.Count} Be-Mobile documents to generic traveltimes"); return(_new); }
/// <summary> /// Fills Location info /// </summary> /// <param name="staticData"></param> /// <param name="dynamicData"></param> /// <returns></returns> private static GenericTraveltimeSegment FillLocationInfo(TraveltimeSegmentStatic staticData, GenericTraveltimeSegment dynamicData) { List <LocationInfoModel.AddressComponent> components = staticData.googleLocationInfo[0].result.address_components; LocationInfoModel.AddressComponent routeComponent = components[1]; int index = 0; while (!routeComponent.types.Contains("route") && index < components.Count) { routeComponent = components[index]; } dynamicData.FromPoint = routeComponent.long_name; dynamicData.ToPoint = routeComponent.long_name; return(dynamicData); }