public void CrimeControllerTest_CrimesByCoordinate() { CrimeController controller = new CrimeController(); CrimeByCoordinateModel crimeByCoordinateModel = controller.CrimesByCoordinate(-33.9112549, 151.1743105); Assert.IsNotNull(crimeByCoordinateModel); }
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); }