shapefile有哪几部分构成?

shapefile有哪几部分构成?,第1张

shapefile有这几部分组成,shp文件、shx文件、dbf文件三个文件才是完整的Shapefile文件,而.prj文件虽然不是必须的文件,但是岁和其中包含了几何图形的投影信息,一般也需要包括在内。Shapefile是一种矢量图形格式,其瞎雀亮能够保存几何图形的位磨宽置及其相关属性,实质上是一种存储方法。

shapefile文件中存储的数据主要有14种类型:

Null,Point,PolyLine,Polygon,MultiPoint,PointZ,PolyLineZ,PolygonZ,MultiPointZ,PointM,PolyLineM,老纳PolygonM,MultiPointM,MultiPatch,不同类型记录内容不同闷橘。

可以是 平面直角坐标,也可以是 空间直角坐标。

请见“ shp文件奥秘及C语言编蚂含团程对策”

http://hi.baidu.com/svjvcfwticdkmse/item/4cc8d6f568b2ff10d6ff8c32

Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。

一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特征属性,表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。图形数据和属性数据通过索引号建立一一对应的关系。

在了解了文件格式之后,你可以使用任何一种C++的文件读取方法来读取并解析Shapefile(OpenFile、fopen、CFile、ifstream都是可以的),但文件的格式解析需要大量的自定义代码,这里篇幅限制就不一一列举了。

另外一种方法,就是使用各个地理信息系统(GIS)的组件支持来完成Shapefile的读取,比如基于ArcGIS  Silverlight  API的WebGIS系统,就可以很方便的类似数据库一样完成信息的提取:

       //获取拖放到地图上的文件信息  

       IDataObject dataObject = e.Data as IDataObject  

       FileInfo[] files = dataObject.GetData(DataFormats.FileDrop) as FileInfo[]  

   

  御竖  液烂   //判断拖放的文件是否为.shp和.dbf  

       FileInfo shapeFile = null  

       FileInfo dbfFile = null  

       foreach (FileInfo fi in files)  

       {  

           if (fi.Extension.ToLower() == ".shp") shapeFile = fi  

           if (fi.Extension.ToLower() == ".dbf") dbfFile = fi  

       }  

   

       // 镇埋大读取Shapefile数据   

       ShapeFile shapeFileReader = new ShapeFile()  

       if (shapeFile != null && dbfFile != null)  

       {  

           shapeFileReader.Read(shapeFile, dbfFile)  

       }  

       else  

       {  

           MessageBox.Show("请将.dbf和.shp文件同时拖放到地图上!")  

           return  

       }  

   

       IList<Graphic> lstGraphics = new List<Graphic>()  

       foreach (ShapeFileRecord record in shapeFileReader.Records)  

       {  

           //将从Shapefile中读取的记录转换为Graphic  

           Graphic graphic = record.ToPointGraphic()  

           if (graphic != null) lstGraphics.Add(graphic)  

       }  

   

       // 如果空间参考不一致,可能需要投影  

       if (lstGraphics.Count > 0)  

       {  

           GeometryService projectTask = new GeometryService("http://localhost/arcgis/rest/services/Geometry/GeometryServer")  

           projectTask.ProjectCompleted += new EventHandler<GraphicsEventArgs>(projectTask_ProjectCompleted)  

           projectTask.Failed += new EventHandler<TaskFailedEventArgs>(projectTask_Failed)  

   

           //将平面坐标转换为经纬度  

           projectTask.ProjectAsync(lstGraphics, myMap.SpatialReference)  

       }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8156476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存