9.10. ±âÇÏ ÇÔ¼ö¿Í ¿¬»êÀÚ

point,box,lseg,line,path,polygon, ¹×circle±âÇÏ µ¥ÀÌÅÍÇü¿¡´Â, PostgreSQL°¡ ¿ø·¡ Áö¿øÇϰí ÀÖ´Â ÇÔ¼ö·Î ¿¬»êÀÚ°¡ dzºÎÇÏ°Ô °®Ãß¾îÁ® ÀÖ½À´Ï´Ù (Table 9-28,Table 9-29, ¹×Table 9-30À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

Caution

"~¿Í °°ÀºÀ» ³ªÅ¸³»´Â" ~=¿¬»êÀÚ´Âpoint,box,polygon, ¹×circleÇü¿¡ ´ëÇØ Åë»óÀÇ µî°¡ °³³äÀ» ³ªÅ¸³»´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ÀÌ·¯ÇÑ ¸î°³ÀÇ ÇüÅ´ ¶Ç=¿¬»êÀÚ¸¦ °¡Áý´Ï´Ù¸¸,=Àº µ¿ÀÏÇÑ areas ¸¸À» ºñ±³ÇÕ´Ï´Ù. ±× ¿ÜÀÇ ½ºÄ®¶ó ºñ±³ ¿¬»êÀÚ(<=µî)µµ ¸¶Âù°¡Áö·Î ÀÌ·¯ÇÑ ÇüÅÂÀÇ ¿µ¿ªÀ» ºñ±³ÇÕ´Ï´Ù.

Table 9-28. ±âÇÏ µ¥ÀÌÅÍ ¿¬»êÀÚ

¿¬»êÀÚ ¼³¸í ¿¹
+ ÆòÇàÀ̵¿ box '((0,0), (1,1))' + point '(2.0, 0)'
- ÆòÇàÀ̵¿ box '((0,0), (1,1))' - point '(2.0, 0)'
* È®´ë Ãà¼Ò/ȸÀü box '((0,0), (1,1))' * point '(2.0, 0)'
/ È®´ë Ãà¼Ò/ȸÀü box '((0,0), (2,2))' / point '(2.0, 0)'
# ±³Â÷Á¡, ±³Â÷ ±¸Çü '((1,-1),(-1,1))' # '((1,1),(-1,-1))'
# °æ·Î ȤÀº ´Ù°¢ÇüÀÇ Á¡ÀÇ ¼ö # '((1,0), (0,1), (-1, 0))'
@-@ ±æÀÌ È¤Àº ¿øÁÖ @-@ path '((0,0), (1,0))'
@@ Á᫐ @@ circle '((0,0), 10)'
## Á¦1 ¿¬»ê Ç׸ñ°ú Á¦2 ¿¬»ê Ç׸ñ°úÀÇ ±ÙÁ¢Á¡ point '(0,0)' ## lseg '((2,0), (0,2))'
<-> °Å¸® circle '((0,0), 1)' <-> circle '((5,0), 1)'
&& °ãÄ¡°í Àִ°¡? box '((0,0), (1,1))' && box '((0,0), (2,2))'
<< ¾ö¹ÐÇÏ°Ô ÁÂÃø¿¡ Àִ°¡? circle '((0,0), 1)' << circle '((5,0), 1)'
>> ¾ö¹ÐÇÏ°Ô ¿ìÃø¿¡ Àִ°¡? circle '((5,0),1)' >> circle '((0,0),1)'
&< ¿ìÃøÀ¸·Î È®ÀåµÈ °ÍÀÌ ¾Æ´Ñ°¡? box '((0,0), (1,1))' &< box '((0,0), (2,2))'
&> ÁÂÃøÀ¸·Î È®ÀåµÈ °ÍÀÌ ¾Æ´Ñ°¡? box '((0,0), (3,3))' &> box '((0,0), (2,2))'
<<| ¾ö¹ÐÇÏ°Ô ¾Æ·¡ ÂÊ¿¡ Àִ°¡? box '((0,0), (3,3))' <<| box '((3,4), (5,5))'
|>> ¾ö¹ÐÇÏ°Ô À§ÂÊ¿¡ Àִ°¡? box '((3,4), (5,5))' |>> box '((0,0), (3,3))'
&<| À§ÂÊ¿¡ ³ª¿Í ÀÖÁö ¾ÊÀº°¡? box '((0,0), (1,1))' &<| box '((0,0), (2,2))'
|&> ¾Æ·¡ ÂÊ¿¡ ³ª¿Í ÀÖÁö ¾ÊÀº°¡? box '((0,0), (3,3))' |&> box '((0,0), (2,2))'
<^ (Á¢ÃËÀ» Çã°¡ÇØ) ¾Æ·¡ ÂÊ¿¡ ÀÖÀ»±î? circle '((0,0), 1)' <^ circle '((0,5), 1)'
>^ (Á¢ÃËÀ» Çã°¡ÇØ) À§ÂÊ¿¡ ÀÖÀ»±î? circle '((0,5), 1)' >^ circle '((0,0), 1)'
? # »ç±Ð±î? lseg '((-1, 0), (1,0))' ? # box '((-2,-2), (2,2))'
? - ¼öÆòÀΰ¡? ? - lseg '((-1, 0), (1,0))'
? - ¼öÆò ¹æÇâÀ¸·Î °®Ãß¾îÁ® ÀÖÀ»±î? point '(1,0)' ? - point '(0,0)'
? | ¼öÁ÷Àΰ¡? ? | lseg '((-1, 0), (1,0))'
? | ¼öÁ÷ ¹æÇâÀ¸·Î °®Ãß¾îÁ® ÀÖÀ»±î? point '(0,1)' ? | point '(0,0)'
? -| Á÷°¢À» ÀÌ·ç°í ÀÖÀ»±î? lseg '((0,0), (0,1))' ? -| lseg '((0,0), (1,0))'
? || ÆòÇàÀΰ¡? lseg '((-1, 0), (1,0))' ? || lseg '((-1, 2), (1,2))'
@> Æ÷ÇÔ Çϰí ÀÖÀ»±î? circle '((0,0), 2)' @> point '(1,1)'
<@ Æ÷ÇÔ È¤Àº °æ°è»óÀ» Æ÷ÇÔÇÒ±î? point '(1,1)' <@ circle '((0,0), 2)'
~= µ¿µîÇѰ¡? polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'

Note: PostgreSQL 8.2º¸´Ù Àü¿¡¼­´Â, ÇÔÀ¯ ¿¬»êÀÚ@>¹×<@´Â °¢°¢~¹×@À̶ó´Â À̸§À̾ú½À´Ï´Ù. ÀÌ·¯ÇÑ À̸§Àº ¾ÆÁ÷ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, ÆóÁö ¿¹Á¤À¸·Î ¿¹°í¾øÀÌ ¾ø¾îÁúÁöµµ ¸ð¸¨´Ï´Ù.

Table 9-29. ±âÇÏ µ¥ÀÌÅÍÇü ÇÔ¼ö

ÇÔ¼ö ¹Ýȯ°ª ¼³¸í ¿¹
area( object ) double precision ¸éÀû area(box '((0,0), (1,1))')
center( object ) point Á᫐ center(box '((0,0), (1,2))')
diameter(circle) double precision ¿øÀÇ Á÷°æ diameter(circle '((0,0), 2.0)')
height(box) double precision ±¸ÇüÀÇ ³ôÀÌ height(box '((0,0), (1,1))')
isclosed(path) boolean Æó°æ·ÎÀΰ¡? isclosed(path '((0,0), (1,1), (2,0))')
isopen(path) boolean °³°æ·ÎÀΰ¡? isopen(path '[(0,0), (1,1), (2,0)]')
length( object ) double precision ±æÀÌ length(path '((-1, 0), (1,0))')
npoints(path) int Á¡ÀÇ ¼ö npoints(path '[(0,0), (1,1), (2,0)]')
npoints(polygon) int Á¡ÀÇ ¼ö npoints(polygon '((1,1), (0,0))')
pclose(path) path Æó°æ·Î·Î º¯È¯ pclose(path '[(0,0), (1,1), (2,0)]')
popen(path) path °³°æ·Î·Î º¯È¯ popen(path '((0,0), (1,1), (2,0))')
radius(circle) double precision ¿øÀÇ ¹Ý°æ radius(circle '((0,0), 2.0)')
width(box) double precision ±¸ÇüÀÇ Æø width(box '((0,0),(1,1))')

Table 9-30. ±âÇÏÇü º¯È¯ ÇÔ¼ö

ÇÔ¼ö ¹Ýȯ°ª ¼³¸í ¿¹
box(circle) box ¿ø¿¡¼­ ±¸ÇüÀ¸·Î box(circle '((0,0), 2.0)')
box(point, point) box ÁÂÇ¥Á¡À» ±¸ÇüÀ¸·Î º¯È¯ box(point '(0,0)', point '(1,1)')
box(polygon) box ´Ù°¢ÇüÀ» ±¸ÇüÀ¸·Î º¯È¯ box(polygon '((0,0), (1,1), (2,0))')
circle(box) circle ±¸ÇüÀ» ¿øÀ¸·Î º¯È¯ circle(box '((0,0), (1,1))')
circle(point, double precision) circle Á߽ɰú ¹Ý°æÀ» ¿øÀ¸·Î º¯È¯ circle(point '(0,0)', 2.0)
circle(polygon) circle ´Ù°¢ÇüÀ» ¿øÀ¸·Î º¯È¯ circle(polygon '((0,0), (1,1), (2,0))')
lseg(box) lseg ±¸ÇüÀÇ ´ë°¢¼±À» ¼±ºÐÀ¸·Î º¯È¯ lseg(box '((-1, 0), (1,0))')
lseg(point, point) lseg ÁÂÇ¥Á¡À» ¼±ºÐÀ¸·Î º¯È¯ lseg(point '(-1, 0)', point '(1,0)')
path(polygon) point ´Ù°¢ÇüÀ» °æ·Î·Î º¯È¯ path(polygon '((0,0), (1,1), (2,0))')
point(double precision, double precision) point ÁÂÇ¥Á¡ÀÇ ±¸Ãà point(23.4, -44. 5)
point(box) point ±¸ÇüÀÇ Á᫐ point(box '((-1, 0), (1,0))')
point(circle) point ¿øÀÇ Á᫐ point(circle '((0,0), 2.0)')
point(lseg) point ¼±ºÐÀÇ Á᫐ point(lseg '((-1, 0), (1,0))')
point(polygon) point ´Ù°¢ÇüÀÇ Á᫐ point(polygon '((0,0), (1,1), (2,0))')
polygon(box) polygon ±¸ÇüÀ¸¿¡¼­ 4 Á¤Á¡ÀÇ ´Ù°¢ÇüÀ¸·Î polygon(box '((0,0), (1,1))')
polygon(circle) polygon ¿ø¿¡¼­ 12 °¢ÇüÀ¸·Î polygon(circle '((0,0), 2.0)')
polygon( npts , circle) polygon ¿ø¿¡¼­ npts °¢ÇüÀ¸·Î polygon(12, circle '((0,0), 2.0)')
polygon(path) polygon °æ·Î¿¡¼­ ´Ù°¢ÇüÀ¸·Î polygon(path '((0,0),(1,1),(2,0))')

pointÀÇ 2°³ÀÇ ¿ø°¡¿ä¼Ò´Â, ÷ÀÚ 0, 1À» °¡Áö´Â ¹è¿­¿¡ ¾×¼¼½º ÇÏ´Â °Í°ú °°ÀÌ, ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é,t.p°¡point¿­ÀÇ °æ¿ì,SELECT p[0] FROM t¶ó°í ÇÏ´Â ½Ä¿¡¼­ XÁÂÇ¥Á¡À» ÃßÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç,UPDATE t SET p[1] = ...±×¸®°í YÁÂÇ¥Á¡À» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿Í °°Àº ¹æ¹ýÀ¸·Î box¶Ç´Âlseg¿¡¼­µµ, 2°³ÀÇpoint ¹è¿­°ª°ú °°ÀÌ Ãë±ÞÇÒ ¼ö ÀÖ½À´Ï´Ù.

areaÇÔ¼ö´Â,box,circle,pathÇü¿¡ ´ëÇØ¼­ µ¿ÀÛÇÕ´Ï´Ù. pathµ¥ÀÌÅÍÇü¿¡ ´ëÇÑareaÇÔ¼ö´Â, ±×path°¡ ±³Â÷ÇÏÁö ¾Ê´Â °æ¿ì¿¡°Ô¸¸ µ¿ÀÛÇÕ´Ï´Ù. ¿¹¸¦ µé¸é,'((0,0), (0,1), (2,1), (2,2), (1,2), (1,0), (0,0))'::PATH¶ó°í ÇÏ´Âpath´Â µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯³ª, ¿ÜÇüÀº °°½À´Ï´Ù¸¸,'((0,0), (0,1), (1,1), (1,2), (2,2), (2,1), (1,1), (1,0), (0,0))'::PATH¶ó°í ÇÏ´Âpath¿¡¼­´Â µ¿ÀÛÇÕ´Ï´Ù. pathÀÇ ±³Â÷ÇÏ´Â, ±³Â÷ÇÏÁö ¾Ê´Â °³³äÀ» Àß ¸ð¸£´Â °æ¿ì, À§ÀÇ 2°³ÀÇpath¸¦ ´Ã¾î³õ¾Æ ±×·¡ÇÁ ¿ëÁö¿¡±×·Á º¸¼¼¿ä.