/* * This method assumes that the memberLocations collection only * applies to members applicable for proximity detection. In other words, * non-team-mates must be filtered out before using this method. * distance threshold is in Kilometers. */ public ICollection <ProximityDetectedEvent> DetectProximityEvents( MemberLocationRecordedEvent memberLocationEvent, ICollection <MemberLocation> memberLocations, double distanceThreshold) { GpsUtility gpsUtility = new GpsUtility(); GpsCoordinate sourceCoordinate = new GpsCoordinate() { Latitude = memberLocationEvent.Latitude, Longitude = memberLocationEvent.Longitude }; return(memberLocations.Where( ml => ml.MemberID != memberLocationEvent.MemberID && gpsUtility.DistanceBetweenPoints(sourceCoordinate, ml.Location) < distanceThreshold) .Select(ml => { return new ProximityDetectedEvent() { SourceMemberID = memberLocationEvent.MemberID, TargetMemberID = ml.MemberID, TeamID = memberLocationEvent.TeamID, DetectionTime = DateTime.UtcNow.Ticks, SourceMemberLocation = sourceCoordinate, TargetMemberLocation = ml.Location, MemberDistance = gpsUtility.DistanceBetweenPoints(sourceCoordinate, ml.Location) }; }).ToList()); }
public void ProducesAccurateDistanceMeasurements() { GpsUtility gpsUtility = new GpsUtility(); double distance = gpsUtility.DistanceBetweenPoints(LosAngeles, NewYorkCity); Assert.Equal(3933, Math.Round(distance)); // 3,933 km Assert.Equal(0, gpsUtility.DistanceBetweenPoints(LosAngeles, LosAngeles)); }
public void ProducesAccurateDistanceMeasurements() { var gpsUtility = new GpsUtility(); var losAngelesCoordinate = new GpsCoordinate{ Latitude = 34.0522222, Longitude = -118.2427778 }; var newYorkCoordinate = new GpsCoordinate{ Latitude = 40.7141667, Longitude = -74.0063889 }; var distance = gpsUtility.DistanceBetweenPoints(losAngelesCoordinate, newYorkCoordinate); Assert.Equal(3933, Math.Round(distance)); Assert.Equal(0, gpsUtility.DistanceBetweenPoints(losAngelesCoordinate, losAngelesCoordinate)); }