Exemple #1
0
        /// <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];
        }
Exemple #2
0
        /*从 数据库 获取 小区基础信息, 并创建 小区对象数组*/
        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);
        }
Exemple #3
0
        /*从 数据库 获取 优化目标集 周边小区信息*/
        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
            //}
        }