首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎样将矢量图转换成Shpfile?该怎么解决

2012-01-21 
怎样将矢量图转换成Shpfile?一个Shpfile文件由三个文件组成,.shp,.dbf,.shx。转换成Shpfile时,三部分都要有

怎样将矢量图转换成Shpfile?
一个Shpfile文件由三个文件组成,.shp,.dbf,.shx。
转换成Shpfile时,三部分都要有。
提供代码

[解决办法]
对于Point , PolyLine , Polygon ,PointZ ,PolyLineZ, PolygonZ我比较熟,但是其他类型的就不太清楚了~

PointZ:

C# code
//写shp文件FileStream ShpFileStream = new FileStream(outFilePath + PointFile.m_FileName + ".shp", FileMode.Create, FileAccess.Write);                        BinaryWriter BShpW = new BinaryWriter(ShpFileStream, Encoding.Default);                        //////////////////////////////////////////////////////////////////////////                        //开始写.shp头文件                        //////// fileCode 部分 位序 big                        int fileCode = 170328064; //fileCode部分的总是为9994 且其位序为big故需要转换位序                        BShpW.Write(fileCode);                        /////// Unused 部分 位序 big,但其总是为0,故不用再进行换位                              int[] Unused = new Int32[5];                        for (int i = 0; i < 5; BShpW.Write(Unused[i]), i++) ;                        /////// fileLength 部分 位序 big    ChangeOnBig是将高低位调转的函数                                     byte[] fileLength = ChangeOnBig(((44 *PointFile.Points.Count) + 100) / 2);                        BShpW.Write(fileLength);                        ////// versionNumber  部分 位序 little                        int versionNumber = 1000;                        BShpW.Write(versionNumber);                        ////// shapeType 部分 位序 little                        int shapeType = EssentialType;                        BShpW.Write(shapeType);  //如果是点Z则是11                                                                         BShpW.Write(Xmin);                        BShpW.Write(Ymin);                        BShpW.Write(Xmax);                        BShpW.Write(Ymax);                                                //写入Zmin                        BShpW.Write(PointFile.Hmin);                        //写入Zmax                        BShpW.Write(PointFile.Hmax);                        double Mmin = 0.0;                        BShpW.Write(Mmin);                        double Mmax = 0.0;                        BShpW.Write(Mmax);                        ///关于一个点的头文件已记录完毕,下面是点的shp实体文件:                        byte[] BRecordNumber = new byte[4];                        int ID = 0;                        for (int i = 0; i < PointCounts; i++, ID++)                        {                            ////// 写入 RecordNumber  部分 位序 big                                                             BRecordNumber = ChangeOnBig(Convert.ToInt32(ID + 1));                            BShpW.Write(BRecordNumber);                            ////// 写入 Content  部分 位序 big                             byte[] BContentLength = new byte[4];                            BContentLength = ChangeOnBig(18);                            BShpW.Write(BContentLength);                                                                        //写入要素类型                            BShpW.Write(11);                            PerPoint thisPoint = PointFile.Points[i];                            tx = thisPoint.m_Coor.x;  //X坐标                            ty = thisPoint.m_Coor.y;  //Y坐标                                                      BShpW.Write(tx); BShpW.Write(ty);                                                        double Zcord = Convert.ToDouble(thisPoint.m_Coor.H);                            BShpW.Write(Zcord);                                                        //Measure的值在此处对于每个点都是固定的                            byte[] Measure = new byte[8] { 255, 255, 255, 255, 255, 255, 239, 255 };                            BShpW.Write(Measure);                        }                        BShpW.Close();                        DBFFileWrite(outFilePath, EssentialType);  //写dbf文件 

热点排行