コード例 #1
0
        public void CrimeControllerTest_CrimesByCoordinate()
        {
            CrimeController controller = new CrimeController();

            CrimeByCoordinateModel crimeByCoordinateModel = controller.CrimesByCoordinate(-33.9112549, 151.1743105);

            Assert.IsNotNull(crimeByCoordinateModel);
        }
コード例 #2
0
ファイル: CrimeController.cs プロジェクト: s3494110/CPT331
        public CrimeByCoordinateModel CrimesByCoordinate(double latitude, double longitude, int count = DefaultNumberOfCrimeRecords, string sortBy = "", SortDirection?sortDirection = null)
        {
            CrimeByCoordinateModel   crimeByCoordinateModel = null;
            List <CrimeByCoordinate> crimeByCoordinates     = DataProvider.CrimeRepository.GetCrimesByCoordinate(latitude, longitude);

            if ((String.IsNullOrEmpty(sortBy) == false) && (sortDirection.HasValue == true))
            {
                crimeByCoordinates = SortCrimeByCoordinates(crimeByCoordinates, sortBy, sortDirection).ToList();
            }

            Dictionary <string, double> offenceValues = new Dictionary <string, double>();

            if (crimeByCoordinates.Count > 0)
            {
                crimeByCoordinates.ForEach(m => offenceValues.Add(m.OffenceName, m.OffenceCount));

                int    beginYear = crimeByCoordinates.Min(m => (m.BeginYear));
                int    endYear   = crimeByCoordinates.Max(m => (m.EndYear));
                string localGovernmentAreaName = crimeByCoordinates.Select(m => (m.LocalGovernmentAreaName)).FirstOrDefault();
                double total = offenceValues.Sum(m => (m.Value));

                for (int i = 0; i < offenceValues.Count; i++)
                {
                    string key = offenceValues.Keys.ElementAt(i);

                    offenceValues[key] /= total;
                }

                List <OffenceModel> offenceModels = offenceValues
                                                    .OrderByDescending(m => (m.Value))
                                                    .Take(count)
                                                    .Select(m => new OffenceModel(m.Key, m.Value)).ToList();

                total = offenceModels.Sum(m => (m.Value));
                offenceModels.Add(new OffenceModel(OtherCrimesName, (1 - total)));

                crimeByCoordinateModel = new CrimeByCoordinateModel(beginYear, endYear, localGovernmentAreaName, offenceModels);
            }
            return(crimeByCoordinateModel);
        }