• shape 格式标准


    Shape files是ESRI提供的一种矢量数据格式,它没有拓扑信息,一个Shape files由一组文件组成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)三个文件。

    坐标文件(.shp)用于记录空间坐标信息。它由头文件和实体信息两部分构成。

    文件头 
    记录头 记录内容 
    记录头 记录内容 
    记录头 记录内容 
    记录头 记录内容
    ……
    记录头 记录内容


    坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有9个int型和7个double型数据。

    起始位置
     名称
     数值
     类型
     位序
     
    0
     File Code
     9994
     Integer
     big
     
    4
     Unused
     0
     Integer
     big
     
    8
     Unused
     0
     Integer
     big
     
    12
     Unused
     0
     Integer
     big
     
    16
     Unused
     0
     Integer
     big
     
    20
     Unused
     0
     Integer
     big
     
    24
     文件长度
     文件的实际长度
     Integer
     big
     
    28
     版本号
     1000
     Integer
     Little
     
    32
     几何类型
     表示这个Shapefile文件所记录的空间数据的几何类型
     Integer
     Little
     
    36
     Xmin
     空间数据所占空间范围的X方向最小值
     Double
     Little
     
    44
     Ymin
     空间数据所占空间范围的Y方向最小值
     Double
     Little
     
    52
     Xmax
     空间数据所占空间范围的X方向最大值
     Double
     Little
     
    60
     Ymax
     空间数据所占空间范围的Y方向最大值
     Double
     Little
     
    68*
     Zmin
     空间数据所占空间范围的Z方向最小值
     Double
     Little
     
    76*
     Zmax
     空间数据所占空间范围的Z方向最大值
     Double
     Little
     
    84*
     Mmin
     最小Measure值
     Double
     Little
     
    92*
     Mmax
     最大Measure值
     Double
     Little
     
    注:最后4个加星号特别标示的四个数据只有当这个Shapefile文件包含Z方向坐标或者具有Measure值时才有值,否则为0.0。所谓Measure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。

    细心的读者会注意到表2.2中的数值的位序有Little和big的区别,对于位序是big的数据我们在读取时要小心。通常,数据的位序都是Little,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。一个位序为big的数据,如果我们想得到它的真实数值,需要将它的位序转换成Little即可。

    Shapefile文件所支持的几何类型如下:

    编号
     几何类型
     
    0
     Null Shape(表示这个Shapefile文件不含坐标)
     
    1
     Point(表示Shapefile文件记录的是点状目标,但不是多点)
     
    3
     PolyLine(表示Shapefile文件记录的是线状目标)
     
    5
     Polygon(表示Shapefile文件记录的是面状目标)
     
    8
     MultiPoint(表示Shapefile文件记录的是多点,即点集合)
     
    11
     PointZ(表示Shapefile文件记录的是三维点状目标)
     
    13
     PolyLineZ(表示Shapefile文件记录的是三维线状目标)
     
    15
     PolygonZ(表示Shapefile文件记录的是三维面状目标)
     
    18
     MultiPointZ(表示Shapefile文件记录的是三维点集合目标)
     
    21
     PointM(表示含有Measure值的点状目标)
     
    23
     PolyLineM(表示含有Measure值的线状目标)
     
    25
     PolygonM(表示含有Measure值的面状目标)
     
    28
     MultiPointM(表示含有Measure值的多点目标)
     
    31
     MultiPatch(表示复合目标)
     
    对于一个不是记录Null Shape 类型的Shapefile文件,它所记录的空间目标的几何类型必须一致,不能在一个Shapefile文件中同时记录两种不同类型的几何目标。

    实体信息负责记录坐标信息,它以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息,每个记录段分为记录头和记录内容两部分。

    记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length) 两个记录项。它们的位序都是big。记录号(Record Number)和坐标记录长度(Content Length) 两个记录项都是int型,并且shapefile文件中的记录号都是从1开始的。

    记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X、Y) ,记录内容因要素几何类型的不同其具体的内容及格式都有所不同。下面分别介绍点状目标(Point)、线状目标(PolyLine)和面状目标(Polygon)三种几何类型的.shp文件的记录内容:

    点状目标

    shapefile中的点状目标由一对X、Y坐标构成,坐标值为双精度型(double)。

    记录项
     数值
     数据类型
     长度
     个数
     位序
     
    几何类型(ShapeType)
     1(表示点状目标)
     int型 
     4
     1
     Little
     
    X方向坐标
     X方向坐标值
     double型
     8
     1
     Little
     
    Y方向坐标
     Y方向坐标值
     double型
     8
     1
     Little
     
    shapefile中的线状目标是由一系列点坐标串构成,一个线目标可能包括多个子线段,子线段之间可以是相离的,同时子线段之间也可以相交。Shapefile允许出现多个坐标完全相同的连续点,当读取文件时一定要注意这种情况,但是不允许出现某个退化的、长度为0的子线段出现。

    记录项
     数值
     数据类型
     长度
     个数
     位序
     
    几何类型(ShapeType)
     3(表示线状目标)
     int型 
     4
     1
     Little
     
    坐标范围(Box)
     表示当前线目标的坐标范围
     double型
     32
     4
     Little
     
    子线段个数(NumParts)
     表示构成当前线目标的子线段的个数
     int型
     4
     1
     Little
     
    坐标点数(NumPoints)
     表示构成当前线目标所包含的坐标点个数
     int型
     4
     1
     Little
     
    Parts数组
     记录了每个子线段的坐标在Points数组中的起始位置
     int型
     4×NumParts
     NumParts
     Little
     
    Points数组
     记录了所有的坐标信息
     Point型
     根据点个数来确定
     NumPoints
     Little
     
     具体的数据结构如下:

    PolyLine
    {
    Double[4]           Box         // 当前线状目标的坐标范围
    Integer             NumParts    // 当前线目标所包含的子线段的个数
    Integer             NumPoints   // 当前线目标所包含的顶点个数
    Integer[NumParts]   Parts       // 每个子线段的第一个坐标点在Points的位置
    Point[NumPoints]    Points      // 记录所有坐标点的数组
    }

    shapefile中的面状目标是由多个子环构成,每个子环是由至少四个顶点构成的封闭的、无自相交现象的环。对于含有岛的多边形,构成它的环有内外环之分,每个环的顶点的排列顺序或者方向说明了这个环到底是内环还是外环。一个内环的顶点是按照逆时针顺序排列的;而对于外环,它的顶点排列顺序是顺时针方向。如果一个多边形只由一个环构成,那么它的顶点排列顺序肯定是顺时针方向。

    每条多边形记录的数据结构与线目标的数据结构完全相同。

    记录项
     数值
     数据类型
     长度
     个数
     位序
     
    几何类型(ShapeType)
     5(表示面状目标)
     int型
     4
     1
     Little
     
    坐标范围(Box)
     表示当前面目标的坐标范围
     double型
     32
     4
     Little
     
    子线段个数(NumParts)
     表示构成当前面状目标的子环的个数
     int型
     4
     1
     Little
     
    坐标点数(NumPoints)
     表示构成当前面状目标所包含的坐标点个数
     int型
     4
     1
     Little
     
    Parts数组
     记录了每个子环的坐标在Points数组中的起始位置
     int型
     4×NumParts
     NumParts
     Little
     
    Points数组
     记录了所有的坐标信息
     Point型
     根据点个数来确定
     NumPoints
     Little
     

    Polygon
    {
    Double[4]           Box         // 当前面状目标的坐标范围
    Integer             NumParts    // 当前面目标所包含的子环的个数
    Integer             NumPoints   // 构成当前面状目标的所有顶点的个数
    Integer[NumParts]   Parts       // 每个子环的第一个坐标点在Points的位置
    Point[NumPoints]    Points      // 记录所有坐标点的数组
    }

    DBF文件见上片日志;

    索引文件(.shx)主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的文件头的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标的坐标信息。

    索引文件也是由头文件和实体信息两部分构成(如图2.5),其中文件头部分是一个长度固定(100 bytes)的记录段,其内容与坐标文件的文件头基本一致。它的实体信息以记录为基本单位,每一条记录包括偏移量(offset)和记录段长度(Content Length)两个记录项,它们的位序都是big,两个记录项都是int型。

  • 相关阅读:
    浅析项目失败的原因
    软件项目失败的五大原因
    敏捷软件开发最佳实践之Scrum站立会议
    精益原则之延迟决策
    三条常见的质量管理策略
    固定报价项目中,如何进行客户期望管理
    关于软件需求必须知道的事情
    PMP备考感触和经验
    软件开发过程中的7大浪费(译)
    精益软件开发七原则之我见
  • 原文地址:https://www.cnblogs.com/tiandi/p/3062596.html
Copyright © 2020-2023  润新知