Ejemplo n.º 1
0
        private void CreateShape()
        {
            if (!File.Exists(SysParam.ShapeSettingPath))
            {
                MessageBox.Show("当前行政区划导出配置不存在!");
                return;
            }
            DataTable ExportData = new DataTable();
            ExportData = AccessHelper.AccessHelper.ExecuteDataTable("select * from exportsetting where enable='1'");
            foreach (DataRow dr in ExportData.Rows)
            {
                DataTable FieldTable = AccessHelper.AccessHelper.ExecuteDataTable("select * from exportfield where shapeTable='"+dr["ShapeTable"].ToString()+"'");
                StringBuilder select = new StringBuilder();
                if (dr["Type"].ToString().ToUpper() == "POINT")
                {
                    select.Append("select ptx,pty");

                }
                else if (dr["Type"].ToString().ToUpper() == "LINE")
                {
                    select.Append("select shape");
                }
                foreach (DataRow fielddr in FieldTable.Rows)
                {
                    select.Append("," + fielddr["SQLField"].ToString() + " as " + fielddr["ShapeField"].ToString());
                }

                select.Append(" from " + dr["SQLTable"].ToString());

                if (dr["Wherestr"].ToString().Trim() != "")
                {
                    select.Append(" where " + dr["Wherestr"].ToString());
                }

                DataTable sqltable = SqlHelper.SQLHelper.ExecuteDataTable(CommandType.Text, select.ToString(), null);

                if (dr["Type"].ToString().ToUpper() == "POINT")
                {
                    SaveShapeFile.SavePointShape sp = new SaveShapeFile.SavePointShape();
                    sp.ShapePath = "D:\\";
                    sp.ShapeFileName = dr["ShapeTable"].ToString();
                    int iFieldNum = FieldTable.Rows.Count;
                    sp.SetFiledNums(iFieldNum);
                    foreach (DataRow fielddr in FieldTable.Rows)
                    {
                        string sFileName = fielddr["ShapeField"].ToString();
                        byte iFieldType; byte iFieldSize; byte iFieldDec;
                        if (fielddr["Type"].ToString().ToUpper() == "STRING")
                        {
                            iFieldType = 0x43;
                        }
                        else
                        {
                            iFieldType = 0x4e;
                        }
                        iFieldSize = byte.Parse(fielddr["Length"].ToString());
                        iFieldDec = byte.Parse(fielddr["xsdLength"].ToString());

                        sp.AddFileDefine(sFileName, iFieldType, iFieldSize, iFieldDec);
                    }

                    foreach (DataRow sqldr in sqltable.Rows)
                    {
                        foreach (DataRow fielddr in FieldTable.Rows)
                        {
                            string shapeField = fielddr["ShapeField"].ToString();
                            sp.SetFieldValue(shapeField, sqldr[shapeField].ToString());
                        }
                        if (sqldr["ptx"] == DBNull.Value || sqldr["pty"] == DBNull.Value)
                            continue;
                        //保存图形
                        sp.AddXY(Convert.ToDouble(sqldr["ptx"].ToString()), Convert.ToDouble(sqldr["pty"].ToString()));
                        sp.Update();
                    }

                    sp.Save();
                }
                else if (dr["Type"].ToString().ToUpper() == "LINE")
                {
                    SaveShapeFile.SaveLineShape sa = new SaveShapeFile.SaveLineShape();
                    sa.ShapePath = "D:\\";
                    sa.ShapeFileName = dr["ShapeTable"].ToString();
                    int iFieldNum = FieldTable.Rows.Count;
                    sa.SetFiledNums(iFieldNum);

                    foreach (DataRow fielddr in FieldTable.Rows)
                    {
                        string sFileName = fielddr["ShapeField"].ToString();
                        byte iFieldType; byte iFieldSize; byte iFieldDec;
                        if (fielddr["Type"].ToString().ToUpper() == "STRING")
                        {
                            iFieldType = 0x43;
                        }
                        else
                        {
                            iFieldType = 0x4e;
                        }
                        iFieldSize = byte.Parse(fielddr["Length"].ToString());
                        iFieldDec = byte.Parse(fielddr["xsdLength"].ToString());

                        sa.AddFileDefine(sFileName, iFieldType, iFieldSize, iFieldDec);
                    }
                    foreach (DataRow sqldr in sqltable.Rows)
                    {
                        foreach (DataRow fielddr in FieldTable.Rows)
                        {
                            string shapeField = fielddr["ShapeField"].ToString();
                            sa.SetFieldValue(shapeField, sqldr[shapeField].ToString());
                        }
                        if (sqldr["shape"] == DBNull.Value)
                            continue;

                        byte[] bytes = (byte[])sqldr["Shape"];
                        HDLine.HDMeasureLine pLine = new HDLine.HDMeasureLine();
                        pLine.BytesToLine(bytes);

                        for (int i = 0; i < pLine.Parts.Count; i++)
                        {
                            List<HDLine.HDPoint> lstPoints = pLine.Parts[i];
                            List<SaveShapeFile.XYCoordinate> lstCooridnate = new List<SaveShapeFile.XYCoordinate>();
                            for (int j = 0; j < lstPoints.Count; j++)
                            {
                                SaveShapeFile.XYCoordinate item = new SaveShapeFile.XYCoordinate();
                                item.x = lstPoints[j].X;
                                item.y = lstPoints[j].Y;
                                lstCooridnate.Add(item);
                            }
                            sa.AddParts(lstCooridnate);
                        }

                        sa.Update();
                    }
                    sa.Save();
                }

            }
        }
Ejemplo n.º 2
0
        private void CreateShape()
        {
            if (!File.Exists(SysParam.ShapeSettingPath))
            {
                MessageBox.Show("当前行政区划导出配置不存在!");
                return;
            }
            DataTable ExportData = new DataTable();

            ExportData = AccessHelper.AccessHelper.ExecuteDataTable("select * from exportsetting where enable='1'");
            foreach (DataRow dr in ExportData.Rows)
            {
                DataTable     FieldTable = AccessHelper.AccessHelper.ExecuteDataTable("select * from exportfield where shapeTable='" + dr["ShapeTable"].ToString() + "'");
                StringBuilder select     = new StringBuilder();
                if (dr["Type"].ToString().ToUpper() == "POINT")
                {
                    select.Append("select ptx,pty");
                }
                else if (dr["Type"].ToString().ToUpper() == "LINE")
                {
                    select.Append("select shape");
                }
                foreach (DataRow fielddr in FieldTable.Rows)
                {
                    select.Append("," + fielddr["SQLField"].ToString() + " as " + fielddr["ShapeField"].ToString());
                }

                select.Append(" from " + dr["SQLTable"].ToString());

                if (dr["Wherestr"].ToString().Trim() != "")
                {
                    select.Append(" where " + dr["Wherestr"].ToString());
                }

                DataTable sqltable = SqlHelper.SQLHelper.ExecuteDataTable(CommandType.Text, select.ToString(), null);

                if (dr["Type"].ToString().ToUpper() == "POINT")
                {
                    SaveShapeFile.SavePointShape sp = new SaveShapeFile.SavePointShape();
                    sp.ShapePath     = "D:\\";
                    sp.ShapeFileName = dr["ShapeTable"].ToString();
                    int iFieldNum = FieldTable.Rows.Count;
                    sp.SetFiledNums(iFieldNum);
                    foreach (DataRow fielddr in FieldTable.Rows)
                    {
                        string sFileName = fielddr["ShapeField"].ToString();
                        byte   iFieldType; byte iFieldSize; byte iFieldDec;
                        if (fielddr["Type"].ToString().ToUpper() == "STRING")
                        {
                            iFieldType = 0x43;
                        }
                        else
                        {
                            iFieldType = 0x4e;
                        }
                        iFieldSize = byte.Parse(fielddr["Length"].ToString());
                        iFieldDec  = byte.Parse(fielddr["xsdLength"].ToString());

                        sp.AddFileDefine(sFileName, iFieldType, iFieldSize, iFieldDec);
                    }

                    foreach (DataRow sqldr in sqltable.Rows)
                    {
                        foreach (DataRow fielddr in FieldTable.Rows)
                        {
                            string shapeField = fielddr["ShapeField"].ToString();
                            sp.SetFieldValue(shapeField, sqldr[shapeField].ToString());
                        }
                        if (sqldr["ptx"] == DBNull.Value || sqldr["pty"] == DBNull.Value)
                        {
                            continue;
                        }
                        //保存图形
                        sp.AddXY(Convert.ToDouble(sqldr["ptx"].ToString()), Convert.ToDouble(sqldr["pty"].ToString()));
                        sp.Update();
                    }

                    sp.Save();
                }
                else if (dr["Type"].ToString().ToUpper() == "LINE")
                {
                    SaveShapeFile.SaveLineShape sa = new SaveShapeFile.SaveLineShape();
                    sa.ShapePath     = "D:\\";
                    sa.ShapeFileName = dr["ShapeTable"].ToString();
                    int iFieldNum = FieldTable.Rows.Count;
                    sa.SetFiledNums(iFieldNum);

                    foreach (DataRow fielddr in FieldTable.Rows)
                    {
                        string sFileName = fielddr["ShapeField"].ToString();
                        byte   iFieldType; byte iFieldSize; byte iFieldDec;
                        if (fielddr["Type"].ToString().ToUpper() == "STRING")
                        {
                            iFieldType = 0x43;
                        }
                        else
                        {
                            iFieldType = 0x4e;
                        }
                        iFieldSize = byte.Parse(fielddr["Length"].ToString());
                        iFieldDec  = byte.Parse(fielddr["xsdLength"].ToString());

                        sa.AddFileDefine(sFileName, iFieldType, iFieldSize, iFieldDec);
                    }
                    foreach (DataRow sqldr in sqltable.Rows)
                    {
                        foreach (DataRow fielddr in FieldTable.Rows)
                        {
                            string shapeField = fielddr["ShapeField"].ToString();
                            sa.SetFieldValue(shapeField, sqldr[shapeField].ToString());
                        }
                        if (sqldr["shape"] == DBNull.Value)
                        {
                            continue;
                        }

                        byte[] bytes = (byte[])sqldr["Shape"];
                        HDLine.HDMeasureLine pLine = new HDLine.HDMeasureLine();
                        pLine.BytesToLine(bytes);

                        for (int i = 0; i < pLine.Parts.Count; i++)
                        {
                            List <HDLine.HDPoint>             lstPoints     = pLine.Parts[i];
                            List <SaveShapeFile.XYCoordinate> lstCooridnate = new List <SaveShapeFile.XYCoordinate>();
                            for (int j = 0; j < lstPoints.Count; j++)
                            {
                                SaveShapeFile.XYCoordinate item = new SaveShapeFile.XYCoordinate();
                                item.x = lstPoints[j].X;
                                item.y = lstPoints[j].Y;
                                lstCooridnate.Add(item);
                            }
                            sa.AddParts(lstCooridnate);
                        }

                        sa.Update();
                    }
                    sa.Save();
                }
            }
        }