阅读:1095回复:0
[求助]求助:生成shape文件的三个文件的程序代码
<P>求助各位大侠:<BR> 本人在GIS中要将数据转换成shape文件格式,自己写的shape文件的三个文件不能用CMoClassBreaksRenderer标准偏差分级法正确生成图像,即用这种方法生成的图像是空白,不知是不是.dbf文件程序有问题,下面是我的程序代码,希望各位大侠看看,提出意见,或能给出源代码!<BR>void CBoyView::ChangeFileSHP()<BR>{ ofstream ofs;<BR> int a;<BR> int i=0;<BR> double f_temp;<BR> ofs.open("c:\\temp.shp",ios::out|ios::binary);<BR> a=9994; <BR> Write_Big((const char*);a,ofs); //文件代码<BR> a=14*n+50;<BR> ofs.seekp(24,ios::beg); <BR> Write_Big((const char*);a,ofs); //文件长度<BR>a=1000;<BR>ofs.write((const char*);a,sizeof(int));//文件版本<BR> a=1;<BR> ofs.write((const char*);a,sizeof(int));//shape类型<BR> <BR> ofs.write((const char*);Xmin,sizeof(double));//Xmin<BR> ofs.write((const char*);Ymin,sizeof(double));//Ymin<BR> ofs.write((const char*);Xmax,sizeof(double));//Xmax<BR> ofs.write((const char*);Ymax,sizeof(double));//Ymax<BR> ofs.seekp(100,ios::beg);//记录头<BR> for(i=0;i<n;i++)<BR> {<BR> a=i+1;<BR> Write_Big((const char*);a,ofs);//记录数目<BR> a=10;<BR> Write_Big((const char*);a,ofs);//记录长度<BR> a=1;<BR> ofs.write((const char*);a,sizeof(int));//记录点类型<BR> f_temp=x;<BR> ofs.write((const char*);f_temp,sizeof(double));//x<BR> f_temp=y;<BR> ofs.write((const char*);f_temp,sizeof(double));//y<BR> } <BR>ofs.close();<BR>}</P>
<P>void CBoyView::ChangeFileSHX()<BR>{<BR> ofstream ofs;<BR> int a;<BR> int i;<BR> ofs.open("c:\\temp.shx",ios::out|ios::binary);<BR> a=9994; //文件代码<BR> Write_Big((const char*);a,ofs);<BR> a=14*n+50; <BR> ofs.seekp(24,ios::beg); //文件长度<BR> Write_Big((const char*);a,ofs);<BR>a=1000;<BR>ofs.write((const char*);a,sizeof(int));//文件版本<BR> a=1;<BR> ofs.write((const char*);a,sizeof(int));//shape类型<BR> <BR> ofs.write((const char*);Xmin,sizeof(double));//Xmin<BR> ofs.write((const char*);Ymin,sizeof(double));//Ymin<BR> ofs.write((const char*);Xmax,sizeof(double));//Xmax<BR> ofs.write((const char*);Ymax,sizeof(double));//Ymax<BR> ofs.seekp(100,ios::beg);//记录头<BR> for(i=0;i<n;i++)<BR> {<BR> a=50+14*i;<BR> Write_Big((const char*);a,ofs);//坐标信息偏移<BR> a=10;<BR> Write_Big((const char*);a,ofs);//坐标记录长度<BR> }<BR> ofs.close();<BR>}<BR>void CBoyView::ChangeFileDBF()<BR>{<BR> <BR> ofstream ofs;<BR> SYSTEMTIME st;<BR>// fstream fs_2; **************************测试几个数据<BR> char temp_char;<BR> char name[11];<BR> short int temp_short;<BR> int i,j;<BR> ofs.open("c:\\temp.dbf",ios::out|ios::binary);<BR> temp_char=3; //文件版本<BR> ofs.write((const char*);temp_char,sizeof(char));<BR> GetSystemTime(;st);<BR> st.wYear=st.wYear-1900;<BR> ofs.write((const char*);st.wYear,sizeof(char));//创建年<BR> ofs.write((const char*);st.wMonth,sizeof(char));//创建月<BR> ofs.write((const char*);st.wDay,sizeof(char));//创建日<BR> ofs.write((const char*);n,sizeof(int));//记录条数<BR> temp_short=32+32*3+1; //32*n个记录空间。n为记录数据种类<BR> ofs.write((const char*);temp_short,sizeof(short int));//文件头字节数<BR> temp_short=8; //每条记录数据的字节数<BR> ofs.write((const char*);temp_short,sizeof(short int));<BR> ofs.seekp(32,ios::beg); //第一个记录项说明<BR> strcpy(name, "As"); //记录项名称 <BR> ofs<<name;<BR> ofs.seekp(43,ios::beg);<BR> temp_char='N'; //记录种类<BR> ofs<<temp_char;<BR> ofs.seekp(4,ios::cur); //记录项长度??<BR> temp_char=7;<BR> ofs.write((const char*);temp_char,sizeof(char));<BR> temp_char=0; //记录项精度??<BR> ofs.write((const char*);temp_char,sizeof(char));<BR> ofs.seekp(14,ios::cur); <BR> temp_char=13;//文件头结束标志<BR> ofs.write((const char*);temp_char,sizeof(char));</P> <P> for(j=0;j<3;j++) //记录数据实体信息<BR> { <BR> for(i=0;i<n;i++) <BR> ofs<<" "<<setw(7)<<setiosflags(ios::right)<<m[0]; //删除标记空格不删除*号删除<BR> }<BR> temp_char=26; //DBF文件结束<BR> ofs.write((const char*);temp_char,sizeof(char));<BR> ofs.close();<BR>}<BR></P> |
|