public List <ResponseCity> GetScore(RequestCity requestCity) { mSuggestedCities = new List <ResponseCity>(); IEnumerable <City> suggestions = sTrie.Retrieve(requestCity.q.ToLower()); GetScoreInternal(requestCity, suggestions); Normalize(); return(mSuggestedCities); }
protected virtual void GetScoreInternal(RequestCity requestCity, IEnumerable <City> suggestions) { foreach (City city in suggestions) { var suggestedCity = new ResponseCity { name = city.ascii, latitude = city.lat, longitude = city.@long, score = GetScoreOneCity(city, requestCity.q, requestCity.latitude, requestCity.longitude) }; mSuggestedCities.Add(suggestedCity); } }
protected override void GetScoreInternal(RequestCity requestCity, IEnumerable <City> suggestions) { GetPopulationNorm(suggestions, out double min, out double diff); foreach (City city in suggestions) { double popScore = POP_COEFF * (city.population - min) / diff; var suggestedCity = new ResponseCity { id = city.id, name = city.ascii + ", " + city.country + " (" + city.tz + ")", latitude = city.lat, longitude = city.@long, score = popScore + GetScoreOneCity(city, requestCity.q, requestCity.latitude, requestCity.longitude) }; mSuggestedCities.Add(suggestedCity); } }
// TODO make it prettier private RequestCity parseParams() { var requestParams = ControllerContext.Request.GetQueryNameValuePairs(); if (requestParams.Count() < 1 || "q" != requestParams.ElementAt(0).Key) { return(null); } var requestCity = new RequestCity(); requestCity.q = requestParams.ElementAt(0).Value; if (requestParams.Count() > 1 && Double.TryParse(requestParams.ElementAt(1).Value, out double value)) { if ("lat" == requestParams.ElementAt(1).Key || "latitude" == requestParams.ElementAt(1).Key) { requestCity.latitude = Double.Parse(requestParams.ElementAt(1).Value); } else if ("long" == requestParams.ElementAt(1).Key || "longitude" == requestParams.ElementAt(1).Key) { requestCity.latitude = Double.Parse(requestParams.ElementAt(1).Value); } } if (requestParams.Count() > 2 && Double.TryParse(requestParams.ElementAt(2).Value, out value)) { if ("lat" == requestParams.ElementAt(2).Key || "latitude" == requestParams.ElementAt(2).Key) { requestCity.latitude = Double.Parse(requestParams.ElementAt(2).Value); } else if ("long" == requestParams.ElementAt(2).Key || "longitude" == requestParams.ElementAt(2).Key) { requestCity.longitude = Double.Parse(requestParams.ElementAt(2).Value); } } return(requestCity); }