AGF规范

本节使用类似于OGC规范的格式描述了简单几何(Simple Geometry)类型的内存布局,它建立在C++结构体内存布局之上,所有的数组是inline的,具有可计算的大小,不指向内存中不同的位置,这样的格式允许将几何数据转换为一个二进制流。

double类型数据是8个字节,使用了IEEE双精度数据编码方式,int类型数据是4字节。

enum GeometryType : int

{

None = 0,

Point = 1,

LineString = 2,

Polygon = 3,

MultiPoint = 4,

MultiLineString = 5,

MultiPolygon = 6,

MultiGeometry = 7,

CurveString = 10,

CurvePolygon = 11,

MultiCurveString = 12,

MultiCurvePolygon = 13

}

1)   坐标类型(Coordinate Types

enum CoordinateDimensionality : FdoInt32

{

XY = 0,

Z = 1,

M = 2

}

2)   基本几何图形(Basic Geometry

struct Geometry

{

int geomType;

CoordinateDimensionality type;

}

3)   符号定义(Notation Definition

// Define a notation within this specification

// int PositionSize(geometry)

// {

//     if (geometry.type == CoordinateDimensionality.XY | CoordinateDimensionality.M ||

//       geometry.type == CoordinateDimensionality.XY | CoordinateDimensionality.Z)

//         return 3;

//     if (geometry.type == CoordinateDimensionality.XY |CoordinateDimensionality.M |

//       CoordinateDimensionality.Z)

//         return 4;

//     return 2;

// }

struct Point // : Geometry

{

int geomType; // == GeometryType.Point;

CoordinateDimensionality type; // all types allowed

double[] coords; // size = PositionSize(this)

}

struct LineString

{

int geomType;

CoordinateDimensionality type;

int numPts; // >0

double[] coords; // size = numPts* PositionSize(this)

}

struct MultiPoint

{

int geomType;

int numPoints; // > 0

Point[] points; // size = numPoints

}

struct MultiLineString

{

int geomType;

int numLineStrings; // >= 0

LineString[] lineStrings; // size = numLineStrings

}

// building block for polygons, not geometry by itself

struct LinearRing

{

int numPts; // >0

double[] coords; // size = numPts* PositionSize(polygon)

}

struct Polygon

{

int geomType;

CoordinateDimensionality type;

int numRings; // >= 1 as there has to be at least one ring

LinearRing[] lineStrings; // size = numRings

}

struct MultiPolygon

{

int geomType;

int numPolygons; // >= 0

Polygon[] polygons; // size = numPolygons

}

struct MultiGeometry

{

int geomType;

int numGeom; // >= 0

Geometry[] geometry; // size = numGeom

}

enum CurveElementType : int

{

LineString = 1,

CircularArc = 2

}

struct CurveStringElement

{

int CurveElementType;

}

struct LinearCurveStringElement

{

int CurveElementType;

int length;

double[] coords; // size = this.length * PositionSize (this)

}

struct CircularArcCurveStringElement

{

int CurveElementType; // == CurveElmentType.Arc

double[] coords; // size = 2 * PositionSize(this)

}

struct CurveString

{

int geomType;

CoordinateDimensionality type; // all types allowed

double[] startPoint; // size = PositionSize(this)

int numElements; // >=0

CurveStringElement[] elements; // size = numElements

}

struct Ring

{

double[] startPoint; // size = PositionSize(this)

int numElements; // >=0

CurveStringElement[] elements; // size = numElements

}

struct MultiCurveString

{

int geomType;

int numCurveStrings; // >= 0

CurveString[] curveStrings; // size = numCurveStrings

}

struct CurvePolygon

{

int geomType; ;

CoordinateDimensionality type;

int numRings; // >=1 as there has to be at least one ring

Ring[] rings; // size = numRings

}

struct MultiCurvePolygon

{

int geomType;

int numPolygons; // >=0

CurvePolygon[] polygons; // size = numElements

}

AGF Memory Layout

 

1 按照FGF格式存储的多边形

 

1以字节数组的方式显示了一个按照FGF规范存储的多边形,其中

l  T=3表示GeometryType == GeometryType.Polygon

l  CT = 0代表CoordinateDimensionality == CoordinateDimensionality.XY

l  NR = 2代表ring的数目为2

l  NP = 3代表点的数目为3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值