/// <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); }
/// <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]); } }
/// <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; }