»ç¿ëÀÚ ¾È³» ¹× ÂüÁ¶¼­


OGC Àß ¾Ë·ÁÁø 2Áø(WKB) Ç¥Çö½Ä

Spatial Extender¿¡´Â 2Áø Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ±âÇÏÇÐÀ» »ý¼ºÇÏ´Â ¿©·¯ ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.

ST_GeomFromWKB
±âÇÏÇÐ À¯ÇüÀÇ WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ±âÇÏÇÐÀ» ÀÛ¼ºÇÕ´Ï´Ù.

ST_PointFromWKB
Á¡ WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ Á¡À» ÀÛ¼ºÇÕ´Ï´Ù.

ST_LineFromWKB
¼±½ºÆ®¸µ WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ¼±½ºÆ®¸µÀ» ÀÛ¼ºÇÕ´Ï´Ù.

ST_PolyFromWKB
´Ù°¢Çü WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ´Ù°¢ÇüÀ» ÀÛ¼ºÇÕ´Ï´Ù.

ST_MPointFromWKB
´ÙÁßÁ¡ WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ´ÙÁßÁ¡À» ÀÛ¼ºÇÕ´Ï´Ù.

ST_MLineFromWKB
´ÙÁß ¼±½ºÆ®¸µ WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ´ÙÁß ¼±½ºÆ®¸µÀ» ÀÛ¼ºÇÕ´Ï´Ù.

ST_MPolyFromWKB
´ÙÁß ´Ù°¢Çü WKB Ç¥Çö½ÄÀ¸·ÎºÎÅÍ ´ÙÁß ´Ù°¢ÇüÀ» ÀÛ¼ºÇÕ´Ï´Ù.

Àß ¾Ë·ÁÁø 2Áø Ç¥Çö½ÄÀº ¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ® ½ºÆ®¸²ÀÔ´Ï´Ù. ODBC Ŭ¶óÀÌ¾ðÆ®¿Í SQL µ¥ÀÌÅͺ£À̽º »çÀÌ¿¡ ±âÇÏÇÐÀ» 2Áø ¾ç½ÄÀ¸·Î ±³È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ±âÇÏÇÐ ÇÔ¼ö¿¡´Â 2Áø Ç¥Çö½ÄÀ» ¸ÊÆÎÇÏ´Â µ¥ C ÇÁ·Î±×·¡¹Ö ¾ð¾î ±¸Á¶ÀÇ Á¤Àǰ¡ ÇÊ¿äÇϹǷÎ, ÀÌ´Â 3¼¼´ë ¾ð¾î(3GL) ÇÁ·Î±×·¥ ³»¿¡¼­ »ç¿ëµÉ ¿¹Á¤ÀÔ´Ï´Ù. 4¼¼´ë ¾ð¾î(4GL) ȯ°æ¿¡´Â ÀûÇÕÇÏÁö ¾Ê½À´Ï´Ù. ST_AsBinary ÇÔ¼ö´Â ±âÁ¸ÀÇ ±âÇÏÇÐ °ªÀ» Àß ¾Ë·ÁÁø 2Áø Ç¥Çö½ÄÀ¸·Î º¯È¯ÇÕ´Ï´Ù.

±âÇÏÇп¡ ´ëÇÑ Àß ¾Ë·ÁÁø 2Áø Ç¥Çö½ÄÀº ±âÇÏÇÐ ÀνºÅϽº¸¦ ¼ýÀÚ À¯Çü ¼øÂ÷·Î Á÷·ÄÈ­ÇÏ¿© ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ À¯ÇüµéÀº ¼¼Æ®(ºÎÈ£ ¾ø´Â Á¤¼ö, double)·ÎºÎÅÍ µµÃâµÈ ÈÄ, °¢ ¼ýÀÚ À¯ÇüÀº ¹ÙÀÌÆ® ¼ø¼­·Î Á÷·ÄÈ­µË´Ï´Ù. À¯ÇüÀº ¼ýÀÚ À¯Çü¿¡ ´ëÇØ µÎ °¡Áö Àß Á¤ÀÇµÈ Ç¥ÁØ 2Áø Ç¥Çö½Ä(NDR, XDR) Áß Çϳª¸¦ »ç¿ëÇÏ¿© Á÷·ÄÈ­µË´Ï´Ù. Á÷·ÄÈ­µÈ ¹ÙÀÌÆ® ¾Õ¿¡ ¿À´Â 1¹ÙÀÌÆ® ű״ ±âÇÏÇÐ ¹ÙÀÌÆ® ¹®ÀÚ¿­¿¡ »ç¿ëµÇ´Â ƯÁ¤ 2Áø ¾Ïȣȭ(NDR ¶Ç´Â XDR)¸¦ ³ªÅ¸³À´Ï´Ù. µÎ ±âÇÏÇÐÀÇ ¾Ïȣȭ »çÀÌ¿¡ À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº ¹ÙÀÌÆ® ¼ø¼­ÀÔ´Ï´Ù. XDR ¾Ïȣȭ´Â Big EndianÀ̰í NDR ¾Ïȣȭ´Â Little EndianÀÔ´Ï´Ù.

¼ýÀÚ À¯Çü Á¤ÀÇ

ºÎÈ£ ¾ø´Â Á¤¼ö´Â À½¼ö°¡ ¾Æ´Ñ Á¤¼ö¸¦ ¹üÀ§ [1, 4294967295]¿¡¼­ ¾ÏȣȭÇÏ´Â 32ºñÆ®(5¹ÙÀÌÆ®) µ¥ÀÌÅÍ À¯ÇüÀÔ´Ï´Ù.

doubleÀº IEEE 754 ¹èÁ¤¹Ðµµ Çü½ÄÀ» »ç¿ëÇÏ¿© ¹èÁ¤¹Ðµµ ¼ýÀÚ¸¦ ¾ÏȣȭÇÏ´Â 64ºñÆ®(8¹ÙÀÌÆ®) ¹èÁ¤¹Ðµµ µ¥ÀÌÅÍ À¯ÇüÀÔ´Ï´Ù.

ÀÌ Á¤ÀÇ´Â XDR ¹× NDR ¸ðµÎ¿¡ °øÅëÀûÀÔ´Ï´Ù.

¼ýÀÚ À¯ÇüÀÇ XDR(Big Endian) ¾Ïȣȭ

ºÎÈ£¾ø´Â Á¤¼öÀÇ XDR Ç¥Çö½ÄÀº Big Endian(°¡Àå Áß¿äÇÑ ¹ÙÀÌÆ® ¿ì¼±)ÀÔ´Ï´Ù.

doubleÀÇ XDR Ç¥Çö½ÄÀº Big Endian(ºÎÈ£ ºñÆ®°¡ ù¹øÂ° ºñÆ®)ÀÔ´Ï´Ù.

¼ýÀÚ À¯ÇüÀÇ NDR(Little Endian) ¾Ïȣȭ

ºÎÈ£¾ø´Â Á¤¼öÀÇ NDR Ç¥Çö½ÄÀº Little Endian(ÃÖÀú Áß¿ä ¹ÙÀÌÆ® ¿ì¼±)ÀÔ´Ï´Ù.

doubleÀÇ NDR Ç¥Çö½ÄÀº Little Endian(ºÎÈ£ ºñÆ®°¡ ¸¶Áö¸· ¹ÙÀÌÆ®)ÀÔ´Ï´Ù.

NDR ¹× XDR°£ÀÇ º¯È¯

ºÎÈ£¾ø´Â Á¤¼ö¿¡ ´ëÇÑ NDR ¹× XDR µ¥ÀÌÅÍ À¯Çü °£ÀÇ º¯È¯Àº °£´ÜÇÑ ÀÛ¾÷ÀÔ´Ï´Ù. ÀÌ¿¡´Â ¹ÙÀÌÆ® ½ºÆ®¸² ÇüÅÂÀÇ °¢ ºÎÈ£¾ø´Â Á¤¼ö ¶Ç´Â Double ³»ÀÇ ¹ÙÀÌÆ® ¼ø¼­¸¦ ¿ªº¯È¯ÇÏ´Â ÀÛ¾÷µµ Æ÷ÇԵ˴ϴÙ.

WKBGeometry ¹ÙÀÌÆ® ½ºÆ®¸²ÀÇ ¼³¸í

ÀÌ Àý¿¡¼­´Â ±âÇÏÇп¡ ´ëÇÑ Àß ¾Ë·ÁÁø 2Áø Ç¥Çö½Ä¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ±âº»ÀûÀÎ ºôµù ºí·ÏÀº Á¡¿¡ ´ëÇÑ ¹ÙÀÌÆ® ½ºÆ®¸²À̸ç ÀÌ´Â µÎ Double·Î ±¸¼ºµË´Ï´Ù. ´Ù¸¥ ±âÇÏÇп¡ ´ëÇÑ ¹ÙÀÌÆ® ½ºÆ®¸²Àº ÀÌ¹Ì Á¤ÀÇµÈ ±âÇÏÇп¡ ´ëÇÑ ¹ÙÀÌÆ® ½ºÆ®¸²À» »ç¿ëÇÏ¿© ºôµåµË´Ï´Ù.

// 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
  Point    point;
};
WKBLineString {
  byte                byteOrder;
  uint32   wkbType;                                         // 2
  uint32   numPoints;
  Point    points[numPoints];
};
 
WKBPolygon    {
  byte              byteOrder;
  uint32            wkbType;                                // 3
  uint32            numRings;
  LinearRing        rings[numRings];
};
WKBMultiPoint    {
  byte              byteOrder;
  uint32            wkbType;                                // 4
  uint32            num_wkbPoints;
  WKBPoint            WKBPoints[num_wkbPoints];
};
WKBMultiLineString    {
  byte              byteOrder;
  uint32            wkbType;                                // 5
  uint32            num_wkbLineStrings;
  WKBLineString     WKBLineStrings[num_wkbLineStrings];
};
 
wkbMultiPolygon {
  byte              byteOrder;
  uint32            wkbType;                                // 6
  uint32            num_wkbPolygons;
  WKBPolygon        wkbPolygons[num_wkbPolygons];
};
 
;WKBGeometry  {
  union {
    WKBPoint                 point;
    WKBLineString            linestring;
    WKBPolygon               polygon;
    WKBMultiPoint            mpoint;
    WKBMultiLineString       mlinestring;
    WKBMultiPolygon          mpolygon;
  }
};

´ÙÀ½ ±×¸²¿¡¼­´Â NDR Ç¥Çö½ÄÀ» º¸¿© ÁÝ´Ï´Ù.

±×¸² 39. NDR Çü½ÄÀÇ Ç¥Çö½Ä. (B=1)Àº 2°³ÀÇ ¼±(NR=2)À» °®´Â ´Ù°¢Çü À¯Çü(T=3), °¢ ¸µÀº 3°³ÀÇ Á¡(NP=3)À» °®À½.

[±×¸²]

WKB Ç¥Çö½Ä¿¡ ´ëÇÑ ÁÖÀå

±âÇÏÇп¡ ´ëÇÑ Àß ¾Ë·ÁÁø 2Áø Ç¥Çö½ÄÀº Geometry Object Model ¹× OpenGIS Abstract Specification¿¡ ¼­¼úµÈ ±âÇÏÇÐ À¯ÇüÀÇ ÀνºÅϽº¸¦ ³ªÅ¸³»µµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù.

ÀÌ·¯ÇÑ ÁÖÀå¿¡´Â ¸µ, ´Ù°¢Çü ¹× ´ÙÁß ´Ù°¢Çü¿¡ ´ëÇÑ ´ÙÀ½°ú °°Àº »çÇ×ÀÌ Æ÷ÇԵ˴ϴÙ.

Á÷¼± ¸µ
¸µÀº ´Ü¼øÇÏ°í ´ÝÈù »óÅÂÀ̸ç ÀÌ´Â Á÷¼± ¸µÀÌ ±× ÀÚü¿Í ±³Â÷ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

´Ù°¢Çü
´Ù°¢ÇüÀÇ °æ°è¿¡ ÀÖ´Â µÎ °³ÀÇ ¼±Çü ¸µ Áß ¾î´À °Íµµ ¼­·Î ±³Â÷ÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ù°¢ÇüÀÇ °æ°è¿¡ ÀÖ´Â ¼±Çü ¸µÀº ¸¹¾Æ¾ß ÇϳªÀÇ Á¡¿¡¼­ Á¢¼±(tangent)À¸·Î¸¸ ±³Â÷ÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÁß ´Ù°¢Çü
´ÙÁß ´Ù°¢ÇüÀÇ ¿ä¼ÒÀÎ µÎ ´Ù°¢ÇüÀÇ ³»ºÎ´Â ±³Â÷ÇÒ ¼ö ¾ø½À´Ï´Ù. ´ÙÁß ´Ù°¢ÇüÀÇ ¿ä¼ÒÀÎ µÎ ´Ù°¢ÇüÀÇ °æ°è´Â ÇÑÁ¤µÈ ¼ýÀÚÀÇ Á¡¿¡¼­¸¸ Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù.


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]