The geometric types <type>point</type>, <type>box</type>,
<type>lseg</type>, <type>line</type>, <type>path</type>,
<type>polygon</type>, and <type>circle</type> have a large set of
native support functions and operators, shown in <xref
linkend="functions-geometry-op-table"/>, <xref
linkend="functions-geometry-func-table"/>, and <xref
linkend="functions-geometry-conv-table"/>.
point
、box
、lseg
、line
、path
、polygon
、およびcircle
幾何データ型には、PostgreSQLが元々サポートしている関数と演算子が豊富に揃っています(表 9.36、表 9.37、および表 9.38を参照してください)。
表9.36 幾何データ演算子
Operator 演算子 Description 説明 Example(s) 例 |
---|
Adds the coordinates of the second <type>point</type> to those of each
point of the first argument, thus performing translation.
Available for <type>point</type>, <type>box</type>, <type>path</type>,
<type>circle</type>.
最初の引数の各々の点に二番目の
|
Concatenates two open paths (returns NULL if either path is closed). 2つの開経路を結合します。(どちらかの経路が閉じていればNULLを返します。)
|
Subtracts the coordinates of the second <type>point</type> from those
of each point of the first argument, thus performing translation.
Available for <type>point</type>, <type>box</type>, <type>path</type>,
<type>circle</type>.
最初の引数の各々の点に二番目の
|
Multiplies each point of the first argument by the second
<type>point</type> (treating a point as being a complex number
represented by real and imaginary parts, and performing standard
complex multiplication). If one interprets
the second <type>point</type> as a vector, this is equivalent to
scaling the object's size and distance from the origin by the length
of the vector, and rotating it counterclockwise around the origin by
the vector's angle from the <replaceable>x</replaceable> axis.
Available for <type>point</type>, <type>box</type>,<footnote
id="functions-geometry-rotation-fn"><para><quote>Rotating</quote> a
box with these operators only moves its corner points: the box is
still considered to have sides parallel to the axes. Hence the box's
size is not preserved, as a true rotation would do.</para></footnote>
<type>path</type>, <type>circle</type>.
最初の引数の各々の点に2番目の
|
Divides each point of the first argument by the second
<type>point</type> (treating a point as being a complex number
represented by real and imaginary parts, and performing standard
complex division). If one interprets
the second <type>point</type> as a vector, this is equivalent to
scaling the object's size and distance from the origin down by the
length of the vector, and rotating it clockwise around the origin by
the vector's angle from the <replaceable>x</replaceable> axis.
Available for <type>point</type>, <type>box</type>,<footnoteref
linkend="functions-geometry-rotation-fn"/> <type>path</type>,
<type>circle</type>.
最初の引数の各々の点を2番目の
|
Computes the total length.
Available for <type>lseg</type>, <type>path</type>.
全長を計算します。
|
Computes the center point.
Available for <type>box</type>, <type>lseg</type>,
<type>polygon</type>, <type>circle</type>.
中心点を計算します。
|
Returns the number of points.
Available for <type>path</type>, <type>polygon</type>.
点の数を返します。
|
Computes the point of intersection, or NULL if there is none.
Available for <type>lseg</type>, <type>line</type>.
交点を計算します。交点がなければNULLを返します。
|
Computes the intersection of two boxes, or NULL if there is none. 2つの矩形の共通部を計算します。 共通部がなければNULLを返します。
|
Computes the closest point to the first object on the second object.
Available for these pairs of types:
最初のオブジェクトから2番目のオブジェクトへの2番目のオブジェクト上の最近点を計算します。
以下の型の対で利用可能です。
(
|
Computes the distance between the objects.
Available for all seven geometric types, for all combinations
of <type>point</type> with another geometric type, and for
these additional pairs of types:
(<type>box</type>, <type>lseg</type>),
(<type>lseg</type>, <type>line</type>),
(<type>polygon</type>, <type>circle</type>)
(and the commutator cases).
オブジェクト間の距離を計算します。
7つのすべての幾何型、
|
Does first object contain second?
Available for these pairs of types:
(<literal>box</literal>, <literal>point</literal>),
(<literal>box</literal>, <literal>box</literal>),
(<literal>path</literal>, <literal>point</literal>),
(<literal>polygon</literal>, <literal>point</literal>),
(<literal>polygon</literal>, <literal>polygon</literal>),
(<literal>circle</literal>, <literal>point</literal>),
(<literal>circle</literal>, <literal>circle</literal>).
最初のオブジェクトは2番目のオブジェクトを含んでいるか?
次の型の組み合わせで利用できます。
(
|
Is first object contained in or on second?
Available for these pairs of types:
(<literal>point</literal>, <literal>box</literal>),
(<literal>point</literal>, <literal>lseg</literal>),
(<literal>point</literal>, <literal>line</literal>),
(<literal>point</literal>, <literal>path</literal>),
(<literal>point</literal>, <literal>polygon</literal>),
(<literal>point</literal>, <literal>circle</literal>),
(<literal>box</literal>, <literal>box</literal>),
(<literal>lseg</literal>, <literal>box</literal>),
(<literal>lseg</literal>, <literal>line</literal>),
(<literal>polygon</literal>, <literal>polygon</literal>),
(<literal>circle</literal>, <literal>circle</literal>).
最初のオブジェクトは2番目のオブジェクトに含まれているかあるいはその上にあるか?
次の型の組み合わせで利用できます。
(
|
Do these objects overlap? (One point in common makes this true.)
Available for <type>box</type>, <type>polygon</type>,
<type>circle</type>.
これらのオブジェクトは重なり合っているか?
(共通の点があれば真となります。)
|
Is first object strictly left of second?
Available for <type>point</type>, <type>box</type>,
<type>polygon</type>, <type>circle</type>.
最初のオブジェクトは完全に2番目のオブジェクトの左にあるか?
|
Is first object strictly right of second?
Available for <type>point</type>, <type>box</type>,
<type>polygon</type>, <type>circle</type>.
最初のオブジェクトは完全に2番目のオブジェクトの右にあるか?
|
Does first object not extend to the right of second?
Available for <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは2番目のオブジェクトの右にはみ出していないか?
|
Does first object not extend to the left of second?
Available for <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは2番目のオブジェクトの左にはみ出していないか?
|
Is first object strictly below second?
Available for <type>point</type>, <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは完全に2番目のオブジェクトの下にあるか?
|
Is first object strictly above second?
Available for <type>point</type>, <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは完全に2番目のオブジェクトの上にあるか?
|
Does first object not extend above second?
Available for <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは2番目のオブジェクトの上にはみ出していないか?
|
Does first object not extend below second?
Available for <type>box</type>, <type>polygon</type>,
<type>circle</type>.
最初のオブジェクトは2番目のオブジェクトの下にはみ出していないか?
|
Is first object below second (allows edges to touch)? 最初のオブジェクトは2番目のオブジェクトの下か? (辺が接しているのを許容します)
|
Is first object above second (allows edges to touch)? 最初のオブジェクトは2番目のオブジェクトの上か? (辺が接しているのを許容します)
|
Do these objects intersect?
Available for these pairs of types:
(<type>box</type>, <type>box</type>),
(<type>lseg</type>, <type>box</type>),
(<type>lseg</type>, <type>lseg</type>),
(<type>lseg</type>, <type>line</type>),
(<type>line</type>, <type>box</type>),
(<type>line</type>, <type>line</type>),
(<type>path</type>, <type>path</type>).
これらのオブジェクトは交差しているか?
次の型の組み合わせで利用できます。
(
|
Is line horizontal? 線は水平か?
|
Are points horizontally aligned (that is, have same y coordinate)? 点は水平に並んでいるか? (つまりy座標が同じであるということです。)
|
Is line vertical? 線は垂直か?
|
Are points vertically aligned (that is, have same x coordinate)? 点は垂直に並んでいるか? (つまりx座標が同じであるということです。)
|
Are lines perpendicular? (指定された)2つの線は垂直か?
|
Are lines parallel? 線は平行か?
|
Are these objects the same?
Available for <type>point</type>, <type>box</type>,
<type>polygon</type>, <type>circle</type>.
オブジェクトは同じか?
|
[a] boxをこれらの演算子で「回転」してもその頂点を動かすだけです。 原点に対して矩形の辺は平行のままです。ですから矩形の大きさは保存されません。真の回転ならば保存します。 |
Note that the <quote>same as</quote> operator, <literal>~=</literal>,
represents the usual notion of equality for the <type>point</type>,
<type>box</type>, <type>polygon</type>, and <type>circle</type> types.
Some of the geometric types also have an <literal>=</literal> operator, but
<literal>=</literal> compares for equal <emphasis>areas</emphasis> only.
The other scalar comparison operators (<literal><=</literal> and so
on), where available for these types, likewise compare areas.
「同じを示す」~=
演算子はpoint
、box
、polygon
、およびcircle
型に対し通常の等価概念を示すことに注意してください。これらのいくつかの型は=
演算子を持ちますが、=
は面積の等しさのみを比較します。これらの型で利用可能であれば、その他のスカラ比較演算子(<=
など)は同様に面積を比較します。
Before <productname>PostgreSQL</productname> 14, the point
is strictly below/above comparison operators <type>point</type>
<literal><<|</literal> <type>point</type> and <type>point</type>
<literal>|>></literal> <type>point</type> were respectively
called <literal><^</literal> and <literal>>^</literal>. These
names are still available, but are deprecated and will eventually be
removed.
PostgreSQLの14より前では、点の下/上の厳密比較演算子point
<<|
point
およびpoint
|>>
point
は、それぞれ<^
および>^
という名前でした。
これらの名前はまだ利用できますが、削除予定であり最終的にはなくなるでしょう。
表9.37 幾何データ型関数
表9.38 幾何型変換関数
It is possible to access the two component numbers of a <type>point</type>
as though the point were an array with indexes 0 and 1. For example, if
<literal>t.p</literal> is a <type>point</type> column then
<literal>SELECT p[0] FROM t</literal> retrieves the X coordinate and
<literal>UPDATE t SET p[1] = ...</literal> changes the Y coordinate.
In the same way, a value of type <type>box</type> or <type>lseg</type> can be treated
as an array of two <type>point</type> values.
あたかもpointは添字0、1を有する配列であるかのように、point
の2つの構成要素にアクセスすることができます。
例えば、t.p
がpoint
列の場合、SELECT p[0] FROM t
という式でX座標を抽出できます。また、UPDATE t SET p[1] = ...
でY座標を変更できます。
同様に、box
型またはlseg
型の値も、2つのpoint
型の値の配列のように扱えます。