private TrackEditModel InitEditModel(TrackEditData track) { // prepare edit model var model = new TrackEditModel(); model.File = new FileInfo(track.Source); model.Track = track; // build fake trail data var topoTrail = new TopoTrailInfo(); var first = track.Points.FirstOrDefault(); var country = Graffiti.Geo.NearestCountry(first); if (country != null) { topoTrail.Country = country; if (country.HasRegions) { var region = Graffiti.Geo.NearestRegion(first); if (region != null && topoTrail.Timezone == null) { topoTrail.Timezone = Graffiti.Geo.GuessTimezone(region); } topoTrail.Region = region; } if (topoTrail.Timezone == null) { topoTrail.Timezone = Graffiti.Geo.GuessTimezone(country); } } if (topoTrail.Timezone == null) { topoTrail.Timezone = GeoTimezoneInfo.UTC; } // start and finish places var topoTrack = new TopoTrackInfo(topoTrail, track); topoTrack.StartPlace = _cartoPlaceService.NearestPlace(topoTrack.StartPoint); topoTrack.FinishPlace = _cartoPlaceService.NearestPlace(topoTrack.FinishPoint); model.TopoTrack = topoTrack; // discover additional places var bounds = GeoPerimeter.FromPoints(track.Points); model.NearbyPlaces = _cartoPlaceService.ListPlacesContainingBounds(bounds); model.ContainedPlaces = _cartoPlaceService.ListPlacesContainedInBounds(bounds); // default filter values var filters = new TrackEditFilter(); filters.MaximumDilution = track.Points.Max(x => _trackEditService.GetMaxDOP(x)); filters.MaximumVelocity = track.Points.Max(x => x.Speed ?? 0); filters.MinimumSatellite = track.Points.Min(x => x.Sats ?? 0); model.Filters = filters; return(model); }
// ================================================== // Helpers public DateTime GetTrackDate(TrackEditData edit) { //TODO: BUG: fix this to use timezone for local time display //return edit.Timezone.FromUTC(edit.Points.First().Timestamp.Value); return(edit.Points.First().Timestamp.Value); }