daiqt1999
路人甲
路人甲
  • 注册日期2007-07-24
  • 发帖数4
  • QQ
  • 铜币121枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1099回复:0

[求助]求助:生成shape文件的三个文件的程序代码

楼主#
更多 发布于:2007-09-09 14:24
<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>
喜欢0 评分0
游客

返回顶部