/// <summary> /// 在全网中选择相同PCI并计算最小,最大、中位数、平均距离 /// </summary> public static void SelectSamePCIMulti(int PCI, List<Sector> Lcell, out double MinDis, out double MaxDis, out double MidDis, out double distance1) { MinDis = 0; MaxDis = 0; MidDis = 0; distance1 = 0; Sector TargetCell = new Sector("0", 0, 0, 0, 0, "0"); Sector c1 = new Sector("0", 0, 0, 0, 0, "0"); List<Sector> ResultCell = new List<Sector>();//记录下相同PCI小区 List<double> distance = new List<double>();//复用距离 double angle = 0.0;//角度 double AverDistance = 0.0;//平均复用距离 Dictionary<double, Sector> dict = new Dictionary<double, Sector>(); double distancetemp = 0; double first = 0; int count = 0; Dictionary<string, string> dic = new Dictionary<string, string>(); string s1; string s2; for (int i = 0; i < Lcell.Count; ++i) { if (PCI == Lcell[i].PCI) { ResultCell.Add(Lcell[i]); } } for (int i = 0; i < ResultCell.Count; ++i) { TargetCell = ResultCell[i]; for (int j = i + 1; j < ResultCell.Count; ++j) { c1 = ResultCell[j]; distancetemp = CJWDHelper.distance1(TargetCell.Longitude, TargetCell.Latitude, c1.Longitude, c1.Latitude, ref angle); dic[TargetCell.sectorID] = c1.sectorID; distance.Add(distancetemp); count++; } } if (count == 0) return; distance.Sort(); for (int j = 0; j < count; ++j) { AverDistance += distance[j]; } AverDistance /= count; distance1 = AverDistance; MinDis = distance[0]; MaxDis = distance[count - 1]; if (count % 2 == 0) { MidDis = (distance[count / 2] + distance[count / 2 - 1]) / 2; } else MidDis = distance[count / 2]; }
/*从 数据库 获取 小区基础信息, 并创建 小区对象数组*/ private void initializeSectorInfo(DB db, XML xml) { List<Sector> tempSec = new List<Sector>(); string sqlInitSectorInfo; xml.getSqlCommand(xmlNodeSectorInfo, out sqlInitSectorInfo); //sqlInitSectorInfo = "select distinct SECTOR_ID,ENODEBID,PHYCELLID,LONGITUDE,LATITUDE,STYLE,EARFCN,SECTOR_NAME from tbCell where LONGITUDE!=0 and LATITUDE!=0 and sector_name is not null"; SqlDataReader reader; reader = db.selectR(sqlInitSectorInfo); while (reader.Read()) { if (reader.GetDouble(3) - 0 < 1e-7 || reader.GetDouble(4) - 0 < 1e-7 || reader.GetString(5).Length == 0) continue; Sector cell = new Sector(reader.GetString(0), reader.GetInt32(1), reader.GetInt32(2), (double)reader.GetDouble(3), (double)reader.GetDouble(4), reader.GetString(5)); cell.FCN = reader.GetInt32(6); cell.sectorNAME = reader.GetString(7); //if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; //else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; //else cell.sectorType = "SPECIAL"; //if (cell.sectorType == "宏站") cell.sectorType = "OUTDOOR"; //else if (cell.sectorType == "室分") cell.sectorType = "INDOOR"; //else cell.sectorType = "SPECIAL"; //tempSec.Add(cell); sectorList.Add(cell); } reader.Close(); //string sqlInitKdist; //xml.getSqlCommand(xmlNodeKdistInfo, out sqlInitKdist); //string temSql; //for (int i = 0; i < tempSec.Count; i++) //{ // temSql = sqlInitKdist.Replace("@sectorId", tempSec[i].sectorID); // //temSql = sqlInitKdist.Replace("@sectorId", sectorList[i].sectorID); // reader = db.selectR(temSql); // while (reader.Read()) // tempSec[i].kDist = reader.GetDouble(0); // //sectorList[i].kDist = reader.GetDouble(0); // reader.Close(); //} ////按照地理关系划分象限 //KdistSectorset(tempSec, out sectorList); }
/*从 数据库 获取 优化目标集 周边小区信息*/ private void initializeOthersSectorInfo(DB db, XML xml) { //保证同频 int beOptimizedNum = sectorList.Count; string sqlInitOthers1, sqlInitOthers2, sqlInitMerge, sqlInitYiceng, sqlInitCoStation; xml.getSqlCommand(xmlNodeOtherSectors_1, out sqlInitOthers1); xml.getSqlCommand(xmlNodeOtherSectors_2, out sqlInitOthers2); xml.getSqlCommand(xmlNodeMergeSectors, out sqlInitMerge); xml.getSqlCommand(xmlNodeOtherSectors_3, out sqlInitYiceng); //xml.getSqlCommand(xmlNodeAddCostation, out sqlInitCoStation); SqlDataReader reader1, reader2, reader3, reader4, reader5; //string tempSql; //for (int i = 0; i < beOptimizedNum; i++) //{ // tempSql = sqlInitCoStation.Replace("@enodebid", sectorList[i].eNodeBID.ToString()); // reader5 = db.selectR(tempSql); // while (reader5.Read()) // { // Sector cell = new Sector(reader5.GetString(0), reader5.GetInt32(1), reader5.GetInt32(2), (double)reader5.GetDouble(3), (double)reader5.GetDouble(4), reader5.GetString(5)); // cell.FCN = reader5.GetInt32(6); // cell.sectorNAME = reader5.GetString(7); // if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; // else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; // else cell.sectorType = "SPECIAL"; // if (isInSectorList(cell.sectorID) == -1) // sectorList.Add(cell); // } // reader5.Close(); //} reader1 = db.selectR(sqlInitOthers1); while (reader1.Read()) { Sector cell = new Sector(reader1.GetString(0), reader1.GetInt32(1), reader1.GetInt32(2), (double)reader1.GetDouble(3), (double)reader1.GetDouble(4), reader1.GetString(5)); cell.FCN = reader1.GetInt32(6); cell.sectorNAME = reader1.GetString(7); if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; else cell.sectorType = "SPECIAL"; if (isInSectorList(cell.sectorID) == -1 && cell.FCN == sectorList[0].FCN) sectorList.Add(cell); } reader1.Close(); reader2 = db.selectR(sqlInitOthers2); while (reader2.Read()) { Sector cell = new Sector(reader2.GetString(0), reader2.GetInt32(1), reader2.GetInt32(2), (double)reader2.GetDouble(3), (double)reader2.GetDouble(4), reader2.GetString(5)); cell.FCN = reader2.GetInt32(6); cell.sectorNAME = reader2.GetString(7); if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; else cell.sectorType = "SPECIAL"; if (isInSectorList(cell.sectorID) == -1 && cell.FCN == sectorList[0].FCN) sectorList.Add(cell); } reader2.Close(); reader3 = db.selectR(sqlInitMerge); while (reader3.Read()) { Sector cell = new Sector(reader3.GetString(0), reader3.GetInt32(1), reader3.GetInt32(2), (double)reader3.GetDouble(3), (double)reader3.GetDouble(4), reader3.GetString(5)); cell.FCN = reader3.GetInt32(6); cell.sectorNAME = reader3.GetString(7); if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; else cell.sectorType = "SPECIAL"; if (isInSectorList(cell.sectorID) == -1 && cell.FCN == sectorList[0].FCN) sectorList.Add(cell); } reader3.Close(); reader4 = db.selectR(sqlInitYiceng); while (reader4.Read()) { Sector cell = new Sector(reader4.GetString(0), reader4.GetInt32(1), reader4.GetInt32(2), (double)reader4.GetDouble(3), (double)reader4.GetDouble(4), reader4.GetString(5)); cell.FCN = reader4.GetInt32(6); cell.sectorNAME = reader4.GetString(7); if (cell.sectorType == "室外") cell.sectorType = "OUTDOOR"; else if (cell.sectorType == "室内") cell.sectorType = "INDOOR"; else cell.sectorType = "SPECIAL"; if (isInSectorList(cell.sectorID) == -1) sectorList.Add(cell); } reader4.Close(); //for (int i = 0; i < beOptimizedNum; i++) //{ // #region ;周边一阶邻区 // tempSql1 = sqlInitOthers1.Replace("@sectorId", sectorList[i].sectorID); // reader1 = db.selectR(tempSql1); // while (reader1.Read()) // { // if (reader1.GetDouble(3) - 0 < 1e-7 || reader1.GetDouble(4) - 0 < 1e-7 || reader1.GetString(5).Length == 0) // continue; // Sector cell = new Sector(reader1.GetString(0), reader1.GetInt32(1), reader1.GetInt32(2), reader1.GetDouble(3), reader1.GetDouble(4), reader1.GetString(5)); // cell.FCN = reader1.GetInt32(6); // if (isInSectorList(cell.sectorID) == -1 && cell.FCN == sectorList[0].FCN) // sectorList.Add(cell); // } // reader1.Close(); // #endregion // #region ;周边二阶邻区 // tempSql2 = sqlInitOthers2.Replace("@sectorId", sectorList[i].sectorID); // reader2 = db.selectR(tempSql2); // while (reader2.Read()) // { // if (reader2.GetDouble(3) - 0 < 1e-7 || reader2.GetDouble(4) - 0 < 1e-7 || reader2.GetString(5).Length == 0) // continue; // Sector cell = new Sector(reader2.GetString(0), reader2.GetInt32(1), reader2.GetInt32(2), reader2.GetDouble(3), reader2.GetDouble(4), reader2.GetString(5)); // cell.FCN = reader2.GetInt32(6); // if (isInSectorList(cell.sectorID) == -1) // sectorList.Add(cell); // } // reader2.Close(); // #endregion // #region ;Merge小区 // tempSql3 = sqlInitMerge.Replace("@sectorId", sectorList[i].sectorID); // reader3 = db.selectR(tempSql3); // while (reader3.Read()) // { // Sector cell = new Sector(reader3.GetString(0), reader3.GetInt32(1), reader3.GetInt32(2), reader3.GetDouble(3), reader3.GetDouble(4), reader3.GetString(5)); // cell.FCN = reader3.GetInt32(6); // if (isInSectorList(cell.sectorID) == -1 && cell.FCN == sectorList[0].FCN) // sectorList.Add(cell); // } // reader3.Close(); // #endregion //} }