Formato binario (WKB) ben noto

La specifica OpenGIS Consortium Simple Features for SQL definisce il formato binario noto. Questo formato è definito anche dall'International Organization for Standardization (ISO) SQL/MM Part: 3 Spatial standard.

Il blocco di base per i formati binari ben noti è il flusso di byte per un punto, che consiste in due valori di virgola mobile a doppia precisione. I flussi di byte per altre geometrie sono costruiti utilizzando i flussi di byte per le geometrie già definite.

Il seguente esempio illustra il blocco di base per i formati binari ben noti.


// Basic Type definitions
// byte : 1 byte
// uint32 : 32 bit unsigned integer  (4 bytes)
// double : double precision number (8 bytes)
 
// Building Blocks : Point, LinearRing
 
Point {
  double x;
  double y;
};

LinearRing   {
  uint32  numPoints;
  Point   points[numPoints];
};

enum wkbGeometryType {
  wkbPoint = 1,
  wkbLineString = 2,
  wkbPolygon = 3,
  wkbMultiPoint = 4,
  wkbMultiLineString = 5,
  wkbMultiPolygon = 6
};

enum wkbByteOrder {
  wkbXDR = 0,     // Big Endian
  wkbNDR = 1      // Little Endian
};

WKBPoint {
  byte     byteOrder;
  uint32   wkbType;              // 1=wkbPoint
  Point    point;
};

WKBLineString {
  byte     byteOrder;
  uint32   wkbType;              // 2=wkbLineString
  uint32   numPoints;
  Point    points[numPoints];
}; 

WKBPolygon    {
  byte              byteOrder;
  uint32            wkbType;     // 3=wkbPolygon
  uint32            numRings;
  LinearRing        rings[numRings];
};

WKBMultiPoint    {
  byte              byteOrder;
  uint32            wkbType;     // 4=wkbMultipoint
  uint32            num_wkbPoints;
  WKBPoint          WKBPoints[num_wkbPoints];
};

WKBMultiLineString    {
  byte              byteOrder;
  uint32            wkbType;     // 5=wkbMultiLineString
  uint32            num_wkbLineStrings;
  WKBLineString     WKBLineStrings[num_wkbLineStrings];
};
 
wkbMultiPolygon {
  byte              byteOrder;
  uint32            wkbType;     // 6=wkbMultiPolygon
  uint32            num_wkbPolygons;
  WKBPolygon        wkbPolygons[num_wkbPolygons];
};
 
WKBGeometry  {
  union {
    WKBPoint                 point;
    WKBLineString            linestring;
    WKBPolygon               polygon;
    WKBMultiPoint            mpoint;
    WKBMultiLineString       mlinestring;
    WKBMultiPolygon          mpolygon;
  }
};

La seguente figura mostra un esempio di geometria in formato binario ben noto.

Figura 1. Dati territoriali in formato WKB. (B=1) di tipo poligono (T=3) con 2 lineari (NR=2), dove ogni anello ha 3 punti (NP=3).
Dati territoriali in formato WKB.