/// <summary> /// Query the airport statistics: top destinations and airline share /// </summary> /// <param name="dataSrc">The data source for the query: T100, TwData, KrData, etc.</param> public static string QueryAirportStat(string dataSrc, string year, string airport, string locale) { // Get the meta data of specific data source ADataSourceMetaData metaData = null; if (!DataSourceRegister.Register.TryGetValue(dataSrc, out metaData)) { return(""); } NpgsqlConnection conn = null; string res = ""; try { conn = new NpgsqlConnection(ASTDatabase.connStr2); conn.Open(); string[] fields = new string[] { Utils.DoubleQuoteStr("AIRLINE"), Utils.DoubleQuoteStr("DEST"), Utils.DoubleQuoteStr("PAX"), Utils.DoubleQuoteStr("FREIGHT") }; string fieldStr = String.Join(",", fields); string sql = String.Format(@"SELECT {0} FROM ""{1}"" WHERE {2}", fieldStr, metaData.SummaryTableName, ASTDatabase.MakeWhere(year, "", airport, "")); NpgsqlCommand command = new NpgsqlCommand(sql, conn); NpgsqlDataReader dr = command.ExecuteReader(); List <RouteStat> routes = new List <RouteStat>(); while (dr.Read()) { RouteStat route = new RouteStat(); route.Airline = dr["AIRLINE"].ToString(); route.Dest = dr["DEST"].ToString(); route.Pax = metaData.HasPaxData ? Convert.ToInt32(dr["PAX"]) : 0; route.Freight = metaData.HasFreightData ? Convert.ToInt32(dr["FREIGHT"]) : 0; routes.Add(route); } string[] regions = new string[] { "All", "International", "Domestic" }; foreach (string region in regions) { if (res != "") { res += ","; } res += Utils.DoubleQuoteStr(region) + ":" + CreateRankByRegion(routes, region, metaData, locale); } return("{" + res + "}"); } finally { conn.Close(); } return(""); }
private static void AddFlowToDict(Dictionary <string, int> dictDest, Dictionary <string, int> dictAirline, RouteStat route, Func <RouteStat, int> getFlow) { if (getFlow(route) > 0) { if (!dictDest.ContainsKey(route.Dest)) { dictDest[route.Dest] = 0; } dictDest[route.Dest] += getFlow(route); if (!dictAirline.ContainsKey(route.Airline)) { dictAirline[route.Airline] = 0; } dictAirline[route.Airline] += getFlow(route); } }