Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
        /// <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);
                 * */
            }
        }