/*
         * 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());
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }