Пример #1
0
        /// <summary>创建河网,同时还记录了Tocpt2,计算了河流的层次和等级</summary>
        /// <param name="CAllRiverLt">河流数据</param>
        /// <returns>河网列</returns>
        private List <CRiverNet> CreateRiverNetLt(List <CRiver> CAllRiverLt, double dblVerySmall)
        {
            List <CRiver> CMasterRiverLt = new List <CRiver>();

            //找到各主干流
            for (int i = 0; i < CAllRiverLt.Count; i++)
            {
                if (CAllRiverLt[i].CMainStream == null)
                {
                    //没有干流的河流即为主干流
                    CMasterRiverLt.Add(CAllRiverLt[i]);
                }
            }

            //建立河网列
            List <CRiverNet> pRiverNetLt = new List <CRiverNet>();

            for (int i = 0; i < CMasterRiverLt.Count; i++)
            {
                CRiverNet pRiverNet = new CRiverNet(i, CMasterRiverLt[i]); //新建河网并添加主干流
                RecursiveSettleRiver(ref pRiverNet, CMasterRiverLt[i]);    //递归添加属于该河网的河流
                //RecursiveFindTocpt2(CMasterRiverLt[i], dblVerySmall);      //找到当前河流与其各支流的相交点(属于当前河流),并记录在支流河流数据中
                CalLeverAndOrder(CMasterRiverLt[i]);
                pRiverNetLt.Add(pRiverNet);
            }

            return(pRiverNetLt);
        }
Пример #2
0
        /// <summary>递归添加属于该河网的河流</summary>
        /// <param name="pRiverNet">河网</param>
        /// <param name="CurrentRiver">当前河流</param>
        private void RecursiveSettleRiver(ref CRiverNet pRiverNet, CRiver CurrentRiver)
        {
            if (CurrentRiver.CTributaryLt.Count == 0)
            {
                return;
            }

            for (int i = 0; i < CurrentRiver.CTributaryLt.Count; i++)
            {
                pRiverNet.CRiverLt.Add(CurrentRiver.CTributaryLt[i]);
                RecursiveSettleRiver(ref pRiverNet, CurrentRiver.CTributaryLt[i]);
            }
        }
Пример #3
0
        /// <summary>建立河网间的对应河流的对应特征点关系(不包括没有对应河流的情况)</summary>
        /// <param name="pCorrespondRiverNet">对应河网数据</param>
        /// <param name="pParameterThreshold">阈值参数</param>
        /// <remarks>判断方法:相交缓冲区多边形面积的两倍除以两缓冲区面积之和</remarks>
        private void BuildCorrespondence(CCorrespondRiverNet pCorrespondRiverNet, CParameterThreshold pParameterThreshold)
        {
            CRiverNet pBSRiverNet = pCorrespondRiverNet.CBSRiverNet;
            CRiverNet pSSRiverNet = pCorrespondRiverNet.CSSRiverNet;

            pCorrespondRiverNet.CResultPtLtLt = new List <List <CPoint> >();

            double dblLengthSumRatio = pBSRiverNet.CMasterStream.pPolyline.Length / pSSRiverNet.CMasterStream.pPolyline.Length;

            pParameterThreshold.dblLengthSumRatio = dblLengthSumRatio;
            //注意:不管主干流存不存在对应河流,都从此处开始,因为不存在对应河流则在此函数中自动不作处理
            RecursiveDWExistCorrCut(pCorrespondRiverNet, pParameterThreshold, pBSRiverNet.CMasterStream);
        }
 public CCorrespondRiverNet(CRiverNet pCBSRiverNet, CRiverNet pCToRiverNet)
 {
     _CBSRiverNet = pCBSRiverNet;
     _CSSRiverNet = pCToRiverNet;
 }