public void GetLineNodeByDataRow(DataRow dataRow, ref LineNodeSimple lineNode, bool bReverse) { if (dataRow != null) { EntityNode entityNode = lineNode as EntityNode; base.GetEntityNodeByDataRow(dataRow, ref entityNode); lineNode.IndexID = dataRow[FieldName_LineNodeID] == System.DBNull.Value ? -1 : Convert.ToInt32(dataRow[FieldName_LineNodeID]); //lineNode.EntityID = dataRow[FieldName_EntityID] == null ? -1 : Convert.ToInt32(dataRow[FieldName_EntityID]); //lineNode.FeatureCode = dataRow[FieldName_FeatureCode] == null ? "" : dataRow[FieldName_FeatureCode].ToString(); lineNode.LineType = dataRow[FieldName_LineType] == System.DBNull.Value ? -1 : Convert.ToInt32(dataRow[FieldName_LineType]); //lineNode.Representation = dataRow[FieldName_Representation] == null ? "" : dataRow[FieldName_Representation].ToString(); if (entityNode.EntityID != 0) { //SegmentNodes segmentNodes = new SegmentNodes(); //BrokenLineNode brokenLineNode = new BrokenLineNode(); //PointInfoNodes pointInfoNodes = new PointInfoNodes(); //double dX1 = //double dY1 = //PointInfoNode pointInfoNode1 = new PointInfoNode(dX1, dY1); //double dX2 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); //double dY2 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //PointInfoNode pointInfoNode2 = new PointInfoNode(dX2, dY2); if (bReverse == true) { lineNode.X2 = dataRow[FieldName_X1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X1]); lineNode.Y2 = dataRow[FieldName_Y1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y1]); lineNode.X1 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); lineNode.Y1 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //pointInfoNodes.Add(pointInfoNode2); //pointInfoNodes.Add(pointInfoNode1); } else { lineNode.X1 = dataRow[FieldName_X1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X1]); lineNode.Y1 = dataRow[FieldName_Y1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y1]); lineNode.X2 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); lineNode.Y2 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //pointInfoNodes.Add(pointInfoNode1); //pointInfoNodes.Add(pointInfoNode2); } //brokenLineNode.PointInfoNodes = pointInfoNodes; //segmentNodes.Add(brokenLineNode); //lineNode.SegmentNodes = segmentNodes; } } }
public void GetLineNodeByDataRow(DataRow dataRow, ref LineNodeSimple lineNode, bool bReverse) { if (dataRow != null) { EntityNode entityNode = lineNode as EntityNode; base.GetEntityNodeByDataRow(dataRow, ref entityNode); lineNode.IndexID = dataRow[FieldName_LineNodeID] == System.DBNull.Value ? -1 : Convert.ToInt32(dataRow[FieldName_LineNodeID]); //lineNode.EntityID = dataRow[FieldName_EntityID] == null ? -1 : Convert.ToInt32(dataRow[FieldName_EntityID]); //lineNode.FeatureCode = dataRow[FieldName_FeatureCode] == null ? "" : dataRow[FieldName_FeatureCode].ToString(); lineNode.LineType = dataRow[FieldName_LineType] == System.DBNull.Value ? -1 : Convert.ToInt32(dataRow[FieldName_LineType]); //lineNode.Representation = dataRow[FieldName_Representation] == null ? "" : dataRow[FieldName_Representation].ToString(); if (entityNode.EntityID != 0) { //SegmentNodes segmentNodes = new SegmentNodes(); //BrokenLineNode brokenLineNode = new BrokenLineNode(); //PointInfoNodes pointInfoNodes = new PointInfoNodes(); //double dX1 = //double dY1 = //PointInfoNode pointInfoNode1 = new PointInfoNode(dX1, dY1); //double dX2 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); //double dY2 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //PointInfoNode pointInfoNode2 = new PointInfoNode(dX2, dY2); if (bReverse == true) { lineNode.X2 = dataRow[FieldName_X1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X1]); lineNode.Y2 = dataRow[FieldName_Y1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y1]); lineNode.X1 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); lineNode.Y1 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //pointInfoNodes.Add(pointInfoNode2); //pointInfoNodes.Add(pointInfoNode1); } else { lineNode.X1 = dataRow[FieldName_X1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X1]); lineNode.Y1 = dataRow[FieldName_Y1] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y1]); lineNode.X2 = dataRow[FieldName_X2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X2]); lineNode.Y2 = dataRow[FieldName_Y2] == DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y2]); //pointInfoNodes.Add(pointInfoNode1); //pointInfoNodes.Add(pointInfoNode2); } //brokenLineNode.PointInfoNodes = pointInfoNodes; //segmentNodes.Add(brokenLineNode); //lineNode.SegmentNodes = segmentNodes; } } }
/// <summary> /// 处理面图层中构面线与线图层(与面图层关联)中的线对象之间的关系 /// </summary> public void MatchPolygonToLine() { /* string strCommand =""; strCommand = "Update LineNodeEx,LineNode Set LineNodeEx.EntityID=LineNode.EntityID,LineNodeEx.IsFromLine='1' Where" +" (LineNodeEx.X1-LineNode.X1)<0.000001 and (LineNodeEx.X1-LineNode.X1)>-0.000001 " +"and (LineNodeEx.Y1-LineNode.Y1)<0.000001 and (LineNodeEx.Y1-LineNode.Y1)>-0.000001 " +"and (LineNodeEx.X2-LineNode.X2)<0.000001 and (LineNodeEx.X2-LineNode.X2)>-0.000001 " +"and (LineNodeEx.Y2-LineNode.Y2)<0.000001 and (LineNodeEx.Y2-LineNode.Y2)>-0.000001 and LineNodeEx.EntityID=-1"; pLineNodeExTable.ExecuteNonQuery(strCommand); strCommand = "Update LineNodeEx,LineNode Set LineNodeEx.EntityID=LineNode.EntityID,LineNodeEx.IsFromLine='1' Where" + "(LineNodeEx.X2-LineNode.X1)<0.000001 and (LineNodeEx.X2-LineNode.X1)>-0.000001 " + "and (LineNodeEx.Y2-LineNode.Y1)<0.000001 and (LineNodeEx.Y2-LineNode.Y1)>-0.000001 " + "and (LineNodeEx.X1-LineNode.X2)<0.000001 and (LineNodeEx.X1-LineNode.X2)>-0.000001 " + "and (LineNodeEx.Y1-LineNode.Y2)<0.000001 and (LineNodeEx.Y1-LineNode.Y2)>-0.000001 and LineNodeEx.EntityID=-1"; pLineNodeExTable.ExecuteNonQuery(strCommand); */ if (this.m_pOleDbConnection != null && m_pOleDbConnection.State == ConnectionState.Open) { LineNodeTable pLineNodeTable = new LineNodeTable(m_pOleDbConnection); //pLineNodeTable.MaxRecordCount = 500000; LineNodeExTable pLineNodeExTable = new LineNodeExTable(m_pOleDbConnection); //pLineNodeExTable.MaxRecordCount = 500000; MatchLineNodeTable pMatchLineNodeTable = new MatchLineNodeTable(m_pOleDbConnection, true, this.IsFirst); string strLineNodeExWhere = pLineNodeExTable.FieldName_EntityID + "=-1"; string strLineNodeExOrderBy = pLineNodeExTable.FieldName_X1 + "," + pLineNodeExTable.FieldName_Y1 + "," + pLineNodeExTable.FieldName_X2 + "," + pLineNodeExTable.FieldName_Y2 + "," + pLineNodeExTable.FieldName_EntityID; string strLineNodeWhere = pLineNodeTable.FieldName_EntityID + ">0"; string strLineNodeOrderBy = pLineNodeTable.FieldName_X1 + "," + pLineNodeTable.FieldName_Y1 + "," + pLineNodeTable.FieldName_X2 + "," + pLineNodeTable.FieldName_Y2 + "," + pLineNodeTable.FieldName_EntityID; DataTable dataTableLineNodeEx = pLineNodeExTable.GetRecords(strLineNodeExWhere, "", strLineNodeExOrderBy); DataTable dataTableLineNode = pLineNodeTable.GetRecords(strLineNodeWhere, "", strLineNodeOrderBy); if (dataTableLineNode.Rows.Count == 0 || dataTableLineNodeEx.Rows.Count == 0) return; //更新构面线的标识码 bool bNeedSave = false; int j = 0; int i = 0; int n = 0; while (dataTableLineNode.Rows.Count > 0) { for (i = 0; i < dataTableLineNode.Rows.Count; i++) { if (j == dataTableLineNodeEx.Rows.Count) break; LineNodeSimple lineNode = new LineNodeSimple(); pLineNodeTable.GetLineNodeByDataRow(dataTableLineNode.Rows[i], ref lineNode, false); while (dataTableLineNodeEx.Rows.Count > 0) { for (; j < dataTableLineNodeEx.Rows.Count; j++) { LineNodeSimple lineNodeEx = new LineNodeSimple(); pLineNodeExTable.GetLineNodeByDataRow(dataTableLineNodeEx.Rows[j], ref lineNodeEx, false); if (lineNode == lineNodeEx) { pMatchLineNodeTable.AddRow(lineNode.IndexID, lineNodeEx.IndexID, lineNode.EntityID); n++; //pLineNodeExTable.SetLineNodeFromLine(dataTableLineNodeEx.Rows[j], lineNode.EntityID, false); //if (bNeedSave == false) // bNeedSave = true; } else if (lineNode > lineNodeEx) { } else { break; } } if (j == dataTableLineNodeEx.Rows.Count) { if (dataTableLineNodeEx.Rows.Count < pLineNodeExTable.MaxRecordCount) break; dataTableLineNodeEx = pLineNodeExTable.GetNextRecords(); j = 0; } else break; } } if (n >= pMatchLineNodeTable.MaxRecordCount) { bNeedSave = true; pMatchLineNodeTable.Save(true); n = 0; } if (i == dataTableLineNode.Rows.Count) { if (dataTableLineNode.Rows.Count < pLineNodeTable.MaxRecordCount) break; dataTableLineNode = pLineNodeTable.GetNextRecords(); } else break; } if (n > 0) { bNeedSave = true; pMatchLineNodeTable.Save(true); n = 0; } if (bNeedSave == true) { string strCommand = "Update " + pLineNodeExTable.TableName_TempTable + "," + pMatchLineNodeTable.TableName_TempTable + " Set " + pLineNodeExTable.TableName_TempTable + "." + pLineNodeExTable.FieldName_EntityID + "=" + pMatchLineNodeTable.TableName_TempTable+"." + pMatchLineNodeTable.FieldName_EntityID + "," + pLineNodeExTable.FieldName_IsReverse + "=-1," + pLineNodeExTable.FieldName_IsFromLine + "=1" + " Where " + pLineNodeExTable.TableName_TempTable + "." + pLineNodeExTable.FieldName_LineNodeID + "=" + pMatchLineNodeTable.TableName_TempTable + "." + pMatchLineNodeTable.FieldName_LineExIndexID; pLineNodeExTable.ExecuteNonQuery(strCommand); bNeedSave = false; pMatchLineNodeTable = new MatchLineNodeTable(m_pOleDbConnection, true, false); } //反向 strLineNodeExOrderBy = pLineNodeExTable.FieldName_X2 + "," + pLineNodeExTable.FieldName_Y2 + "," + pLineNodeExTable.FieldName_X1 + "," + pLineNodeExTable.FieldName_Y1 + "," + pLineNodeExTable.FieldName_EntityID; //必须是未找到标识码的 strLineNodeExWhere = pLineNodeExTable.FieldName_EntityID + "=-1"; dataTableLineNodeEx = pLineNodeExTable.GetRecords(strLineNodeExWhere, "", strLineNodeExOrderBy); dataTableLineNode = pLineNodeTable.GetRecords(strLineNodeWhere, "", strLineNodeOrderBy); j = 0; while (dataTableLineNode.Rows.Count > 0) { for (i = 0; i < dataTableLineNode.Rows.Count; i++) { if (j == dataTableLineNodeEx.Rows.Count) break; LineNodeSimple lineNode = new LineNodeSimple(); pLineNodeTable.GetLineNodeByDataRow(dataTableLineNode.Rows[i], ref lineNode, false); while (dataTableLineNodeEx.Rows.Count > 0) { for (; j < dataTableLineNodeEx.Rows.Count; j++) { LineNodeSimple lineNodeEx = new LineNodeSimple(); pLineNodeExTable.GetLineNodeByDataRow(dataTableLineNodeEx.Rows[j], ref lineNodeEx, true); if (lineNodeEx.EntityID != -1) continue; if (lineNode == lineNodeEx) { pMatchLineNodeTable.AddRow(lineNode.IndexID, lineNodeEx.IndexID, lineNode.EntityID); n++; //pLineNodeExTable.SetLineNodeEntityID(dataTableLineNodeEx.Rows[j], lineNode.EntityID, true); //if (bNeedSave == false) // bNeedSave = true; } else if (lineNode > lineNodeEx) { } else { break; } } if (j == dataTableLineNodeEx.Rows.Count) { //if (bNeedSave == true) //{ // pLineNodeExTable.Save(false); //} if (dataTableLineNodeEx.Rows.Count < pLineNodeExTable.MaxRecordCount) break; //else // bNeedSave = false; dataTableLineNodeEx = pLineNodeExTable.GetNextRecords(); j = 0; } else break; } } if (n >= pMatchLineNodeTable.MaxRecordCount) { bNeedSave = true; pMatchLineNodeTable.Save(true); n = 0; } if (i == dataTableLineNode.Rows.Count) { if (dataTableLineNode.Rows.Count < pLineNodeTable.MaxRecordCount) break; dataTableLineNode = pLineNodeTable.GetNextRecords(); } else break; } if (n > 0) { bNeedSave = true; pMatchLineNodeTable.Save(true); } if (bNeedSave == true) { string strCommand = "Update " + pLineNodeExTable.TableName_TempTable + "," + pMatchLineNodeTable.TableName_TempTable + " Set " + pLineNodeExTable.TableName_TempTable + "." + pLineNodeExTable.FieldName_EntityID + "=" + pMatchLineNodeTable.TableName_TempTable + "." + pMatchLineNodeTable.FieldName_EntityID + "," + pLineNodeExTable.FieldName_IsReverse + "=1," + pLineNodeExTable.FieldName_IsFromLine + "=1" + " Where " + pLineNodeExTable.TableName_TempTable + "." + pLineNodeExTable.FieldName_LineNodeID + "=" + pMatchLineNodeTable.TableName_TempTable + "." + pMatchLineNodeTable.FieldName_LineExIndexID; pLineNodeExTable.ExecuteNonQuery(strCommand); } /* * 匹配条件不正确,FieldName_EntityID重复 //更新成对索引 strCommand = "Update " + pLineNodeExTable.TableName_TempTable + " As a," + pLineNodeExTable.TableName_TempTable + " As b Set a." + pLineNodeExTable.FieldName_OrtherLineNodeID + "=b." + pLineNodeExTable.FieldName_LineNodeID //+ ",b." + pLineNodeExTable.FieldName_OrtherLineNodeID + "=a." + pLineNodeExTable.FieldName_LineNodeID + " Where a." + pLineNodeExTable.FieldName_EntityID + ">0 And a." + pLineNodeExTable.FieldName_EntityID + "=b." + pLineNodeExTable.FieldName_EntityID; pLineNodeExTable.ExecuteNonQuery(strCommand); * */ } }