免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1974|回复: 3
收起左侧

[求助] 用C#制作shape文件时.dbf文件生成的问题

[复制链接]

3

主题

538

铜板

4

好友

技术员

Rank: 3Rank: 3

积分
52
发表于 2016-11-28 16:36 | 显示全部楼层 |阅读模式

    求指导在制作shape文件过程中,如何在.dbf文件中存储数据,以上是我在arcmap中打开的结果,以下是程序代码:
//写入dbf文件
            FileStream fd = new FileStream(@"..\polygon.dbf", FileMode.OpenOrCreate, FileAccess.Write);  
            BinaryWriter bd = new BinaryWriter(fd);

            byte dbf_version = 3;
            bd.Write(dbf_version);
            System.DateTime today = System.DateTime.Now;
            byte[] date = new byte[3];
            date[0] = Convert.ToByte(today.Year - 1900);
            date[1] = Convert.ToByte(today.Month);
            date[2] = Convert.ToByte(today.Day);

            for (int i = 0; i < 3; i++)
            {
                bd.Write(date);
            }
            int recordnumb = RecorderNumber;               //文件中的记录数
            bd.Write(recordnumb);
            short HeaderByteNum;          //文件头中的字节数
            HeaderByteNum = Convert.ToInt16(33 + 13 * 32);   //记录项个数,默认为1
            bd.Write(HeaderByteNum);
            short RecordByteNum = 8;          //一条记录中的字节数
            bd.Write(RecordByteNum);

            short Reservd1 = 0;               //保留字节
            bd.Write(Reservd1);

            byte Flag4s = 0;                  //表示未完成的操作
            bd.Write(Flag4s);

            byte EncrypteFlag = 0;            //编密码标记
            bd.Write(EncrypteFlag);

            int Unused1 = 0;
            for (int i = 0; i < 3; i++)   //保留字节,用于多用户处理时使用
            {
                bd.Write(Unused1);
            }
            byte MDXFlag = 0;          //DBF文件的MDX标志
            bd.Write(MDXFlag);

            byte LDriID = 77;           //Language driver ID
            bd.Write(LDriID);

            short Reserved2 = 0;       //保留字节
            bd.Write(Reserved2);
            for (int i1 = 0; i1 < 10; i1++)    //创建10个记录项
            {
                byte[] name = new byte[11];       //记录项名称,是ASCII码值
                name[0] = 84;    // 'I'
                byte[] nameTemp = new byte[4];
                nameTemp = BitConverter.GetBytes(48 + i1);
                for (int i = 0; i < 4; i++)
                {
                    name[1 + i] = nameTemp;
                }
                for (int i = 5; i < 11; i++)
                {
                    name = 0;
                }
                for (int i = 0; i < 11; i++)
                {
                    bd.Write(name);
                }

                byte fieldType = 70;      
                bd.Write(fieldType);

                int reserved3 = 0;                    //保留字节
                bd.Write(reserved3);

                byte fieldLength = 20;                 //记录项长度,二进制型
                bd.Write(fieldLength);

                byte decimalCount = 6;                //记录项精度,二进制型
                bd.Write(decimalCount);

                short reserved4 = 0;                  //保留字节
                bd.Write(reserved4);

                byte workID = 0;                      //工作区ID
                bd.Write(workID);

                short[] Reserved5 = new short[5];   //保留字节
                for (int i = 0; i < 5; i++)
                {
                    Reserved5 = 0;
                    bd.Write(Reserved5);
                }

                byte mDXFlag1 = 0;                     //MDX标识
                bd.Write(mDXFlag1);

            }

            byte terminator = 13; //记录项终止标志      
            bd.Write(terminator);
            for (int ii = 0; ii <10; ii++)
            {
                for (int i = 0; i < RecorderNumber; i++)
                {
                    bd.Write(elementDepth[ii]);//写入已知数据
                }
            }
            bd.Close();
            fd.Close();

            Console.WriteLine("写入完成!!");
            Console.ReadKey();



0

主题

1万

铜板

4

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
842

爱心勋章灌水勋章荣誉会员勋章活跃勋章贡献勋章

发表于 2016-11-29 07:37 | 显示全部楼层
进来学习。
回复

使用道具 举报

49

主题

1万

铜板

45

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2338

爱心勋章地信元老灌水勋章荣誉会员勋章活跃勋章地信专家组贡献勋章

发表于 2016-11-29 14:20 | 显示全部楼层
很牛的样子
回复 支持 反对

使用道具 举报

0

主题

203

铜板

1

好友

实习生

Rank: 1

积分
9
发表于 2016-12-2 12:40 | 显示全部楼层
牛逼技术,给楼主赞一个。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表