# Django 5.0.9.dev20240806133106 ドキュメント

# GEOS API

## 背景

### GEOS とは？

GEOS は Geometry Engine - Open Source の略であり、C++ライブラリであり、 Java Topology Suite から移植されました。GEOS は OpenGIS の Simple Features for SQL 空間記述関数や空間演算子を実装しています。GEOS は現在、OSGeo プロジェクトとなっており、もともとはカナダ・ビクトリアの Refractions Research によって開発・維持されていました。

### 特徴

GeoDjango は GEOS ライブラリの高レベルな Python ラッパーを実装しており、その機能には次のものがあります:

- `ctypes` を使用して純粋に Python で実装された GEOS ジオメトリルーチンへの BSD ライセンスのインターフェイス。
- GeoDjango とは疎結合です。たとえば、`GEOSGeometry` オブジェクトは Django プロジェクト/アプリケーションの外でも使用可能です。つまり、`DJANGO_SETTINGS_MODULE` を設定したり、データベースを使用する必要はありません。
- ミュータビリティ (Mutability): `GEOSGeometry` オブジェクトは変更可能です。
- クロスプラットフォームでテスト済みであり、Windows、Linux、Solaris、macOSプラットフォームと互換性があります。

## チュートリアル

このセクションには、 `GEOSGeometry` オブジェクトの簡単な紹介とチュートリアルが含まれています。

### ジオメトリを作成する

`GEOSGeometry` オブジェクトはいくつかの方法で作成できます。最初の方法は、単純に空間入力のオブジェクトをインスタンス化することです。以下は、同じジオメトリを WKT、HEX、WKB、GeoJSON から作成する例です:

    >>> from django.contrib.gis.geos import GEOSGeometry
    >>> pnt = GEOSGeometry("POINT(5 23)")  # WKT
    >>> pnt = GEOSGeometry("010100000000000000000014400000000000003740")  # HEX
    >>> pnt = GEOSGeometry(
    ...     memoryview(
    ...         b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
    ...     )
    ... )  # WKB
    >>> pnt = GEOSGeometry(
    ...     '{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }'
    ... )  # GeoJSON

もう一つの方法は、作成したい特定のジオメトリタイプのコンストラクタを使用することです。たとえば、`Point` オブジェクトは、そのコンストラクタに X 座標と Y 座標を渡すことで作成できます:

    >>> from django.contrib.gis.geos import Point
    >>> pnt = Point(5, 23)

これらのコンストラクタはすべて、キーワード引数 `srid` を受け取ります。例えば:

    >>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
    >>> print(GEOSGeometry("POINT (0 0)", srid=4326))
    SRID=4326;POINT (0 0)
    >>> print(LineString((0, 0), (1, 1), srid=4326))
    SRID=4326;LINESTRING (0 0, 1 1)
    >>> print(Point(0, 0, srid=32140))
    SRID=32140;POINT (0 0)

最後に、ファイルから `GEOSGeometry` オブジェクトを返す `fromfile()` ファクトリーメソッドがあります:

    >>> from django.contrib.gis.geos import fromfile
    >>> pnt = fromfile("/path/to/pnt.wkt")
    >>> pnt = fromfile(open("/path/to/pnt.wkt"))

ログが GEOS 関連のエラーで一杯です

Webサーバーのログファイルに、多くの `TypeError` や `AttributeError` 例外が記録されます。これは通常、Pythonモジュールのトップレベルで GEOS オブジェクトを作成していることを意味します。そして、ガベージコレクタの競合状態のために、あなたのモジュールは GEOS オブジェクトよりも先にガベージコレクションされます。これを防ぐには、関数/メソッドのローカルスコープ内に `GEOSGeometry` オブジェクトを作成します。

### ジオメトリは Pythonic です

`GEOSGeometry` オブジェクトは 'Pythonic' (Pythonらしい) であり、要素には標準的な Python 形式を使ってアクセスしたり変更したり、イテレートしたりできます。例えば、`Point` の座標をイテレートできます:

    >>> pnt = Point(5, 23)
    >>> [coord for coord in pnt]
    [5.0, 23.0]

ジオメトリオブジェクトの `GEOSGeometry.coords` プロパティを使用すると、ジオメトリ座標を Python のタプルで取得できます:

    >>> pnt.coords
    (5.0, 23.0)

標準の Python インデックス形式を使用して、ジオメトリオブジェクトを取得または設定できます。ただし、返されるものはオブジェクトのジオメトリタイプに依存します。例えば、`LineString` に対してインデックスを使用すると、座標の Python タプルが返されます:

    >>> from django.contrib.gis.geos import LineString
    >>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
    >>> line[0]
    (0.0, 0.0)
    >>> line[-2]
    (50.0, 0.0)

`Polygon` 上のインデックス指定は、そのインデックスに対応するリング (`LinearRing` オブジェクト) を返します:

    >>> from django.contrib.gis.geos import Polygon
    >>> poly = Polygon(((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)))
    >>> poly[0]
    <LinearRing object at 0x1044395b0>
    >>> poly[0][-2]  # second-to-last coordinate of external ring
    (50.0, 0.0)

さらに、ジオメトリの座標や要素はPythonのリストのように追加や変更が可能です:

    >>> line[0] = (1.0, 1.0)
    >>> line.pop()
    (0.0, 0.0)
    >>> line.append((1.0, 1.0))
    >>> line.coords
    ((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))

ジオメトリーは set のような演算子をサポートします:

    >>> from django.contrib.gis.geos import LineString
    >>> ls1 = LineString((0, 0), (2, 2))
    >>> ls2 = LineString((1, 1), (3, 3))
    >>> print(ls1 | ls2)  # equivalent to `ls1.union(ls2)`
    MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
    >>> print(ls1 & ls2)  # equivalent to `ls1.intersection(ls2)`
    LINESTRING (1 1, 2 2)
    >>> print(ls1 - ls2)  # equivalent to `ls1.difference(ls2)`
    LINESTRING(0 0, 1 1)
    >>> print(ls1 ^ ls2)  # equivalent to `ls1.sym_difference(ls2)`
    MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))

等値演算子は空間的な等価性をチェックしません

`GEOSGeometry` の等値演算子は、`equals_exact()` を使用します。`equals()` ではありません。つまり、比較されるジオメトリは、同じ座標、同じ位置、同じSRID を持つ必要があります。

    >>> from django.contrib.gis.geos import LineString
    >>> ls1 = LineString((0, 0), (1, 1))
    >>> ls2 = LineString((1, 1), (0, 0))
    >>> ls3 = LineString((1, 1), (0, 0), srid=4326)
    >>> ls1.equals(ls2)
    True
    >>> ls1 == ls2
    False
    >>> ls3 == ls2  # different SRIDs
    False

## ジオメトリ・オブジェクト

### `GEOSGeometry`

class `GEOSGeometry`(geo_input, srid=None)

  パラメータ: | geo_input -- ジオメトリ入力値 (文字列または `memoryview`) srid (int) -- 空間参照識別子

これはすべてのGEOSジオメトリオブジェクトの基底クラスです。`geo_input` 引数で初期化され、適切なジオメトリサブクラスを想定します (たとえば、 `GEOSGeometry('POINT(1 1)')` は `Point` オブジェクトを作成します)。

パラメータ `srid` が与えられた場合、 `geo_input` が SRID を持っていない場合は、作成されたジオメトリの SRID が設定されます。パラメータ `geo_input` と `srid` で異なる SRID が指定された場合、 `ValueError` が発生します:

    >>> from django.contrib.gis.geos import GEOSGeometry
    >>> GEOSGeometry("POINT EMPTY", srid=4326).ewkt
    'SRID=4326;POINT EMPTY'
    >>> GEOSGeometry("SRID=4326;POINT EMPTY", srid=4326).ewkt
    'SRID=4326;POINT EMPTY'
    >>> GEOSGeometry("SRID=1;POINT EMPTY", srid=4326)
    Traceback (most recent call last):
    ...
    ValueError: Input geometry already has SRID: 1.

以下の入力形式とそれに対応するPythonの型を受け付けます:

フォーマット | 入力の型
--- | ---
WKT / EWKT | `str`
HEX / HEXEWKB | `str`
WKB / EWKB | `memoryview`
GeoJSON | `str`

GeoJSON形式では、SRIDは `crs` メンバーに基づいて設定されます。もし `crs` が指定されていない場合、SRIDはデフォルトで4326になります。

classmethod `GEOSGeometry.``from_gml`(gml_string)

  与えられたGML文字列から `GEOSGeometry` を構築します。

#### プロパティ

`GEOSGeometry.``coords`

  ジオメトリの座標をタプルで返します。

`GEOSGeometry.``dims`

  ジオメトリの次元を返します:

  - `Point` および `MultiPoint` に対しては `0`
  - `LineString` および `MultiLineString` に対しては `1`
  - `Polygon` および `MultiPolygon` に対しては `2` です。
  - `GeometryCollection` が空の場合は `-1` を返します。
  - 空ではない `GeometryCollection` の要素の最大次元

`GEOSGeometry.``empty`

  ジオメトリ内の点の集合が空であるかどうかを返します。

`GEOSGeometry.``geom_type`

  ジオメトリの種類に対応する文字列を返します。例:

      >>> pnt = GEOSGeometry("POINT(5 23)")
      >>> pnt.geom_type
      'Point'

`GEOSGeometry.``geom_typeid`

  GEOS ジオメトリタイプ識別番号を返します。 次の表に、各ジオメトリタイプの値を示します:

  ジオメトリ | ID
  --- | ---
  `Point` | 0
  `LineString` | 1
  `LinearRing` | 2
  `Polygon` | 3
  `MultiPoint` | 4
  `MultiLineString` | 5
  `MultiPolygon` | 6
  `GeometryCollection` | 7

`GEOSGeometry.``num_coords`

  ジオメトリ内の座標の数を返します。

`GEOSGeometry.``num_geom`

  このジオメトリに含まれるジオメトリの数を返します。つまり、ジオメトリ・コレクション以外では 1 を返します。

`GEOSGeometry.``hasz`

  ジオメトリが3次元であるかどうかを示す真偽値を返します。

`GEOSGeometry.``ring`

  ジオメトリが `LinearRing` であるかどうかを示す真偽値を返します。

`GEOSGeometry.``simple`

  与えられたジオメトリが "simple" であるかどうかを示す真偽値を返します。ジオメトリが "simple" であるのは、自分自身と交差しない場合に限ります (境界点での交差を除く) 。例えば、`LineString` オブジェクトは、自分自身と交差すると "simple" ではありません。したがって、定義上自身と交差しないため、`LinearRing` や `Polygon` オブジェクトは常に "simple" です。

`GEOSGeometry.``valid`

  ジオメトリが有効かどうかを示すブール値を返します。

`GEOSGeometry.``valid_reason`

  ジオメトリが無効である理由を表す文字列を返します。

`GEOSGeometry.``srid`

  ジオメトリに関連付けられた SRID を取得または設定するために使用できるプロパティ。例えば:

      >>> pnt = Point(5, 23)
      >>> print(pnt.srid)
      None
      >>> pnt.srid = 4326
      >>> pnt.srid
      4326

#### 出力プロパティ

このセクションのプロパティは、`GEOSGeometry` オブジェクトを異なる()形式にエクスポートします。この出力は文字列、バッファ、または別のオブジェクトの形式で表されます。

`GEOSGeometry.``ewkt`

  ジオメトリの "拡張" Well-Known Text を返します。この表現は PostGIS に固有であり、OGC WKT 標準のスーパーセットです。 [1] SRID は本質的に WKT 表現の前に付加されます。例えば `SRID=4326;POINT(5 23)` のようになります。

  注釈

  このプロパティからの出力には、PostGISがそのEWKT表現でサポートする3dm、3dz、および4d情報は含まれません。

`GEOSGeometry.``hex`

  このジオメトリの WKB を 16 進数で返します。 SRID値はOGC仕様の一部ではないため、この表現には含まれないことに注意してください (代わりに `GEOSGeometry.hexewkb` プロパティを使用してください) 。

`GEOSGeometry.``hexewkb`

  このジオメトリのEWKBを16進形式で返します。これは、このジオメトリの一部であるSRID値を含むWKB仕様の拡張です。

`GEOSGeometry.``json`

  ジオメトリの GeoJSON 表現を返します。結果は完全な GeoJSON 構造ではなく、GeoJSON 構造の `geometry` キーの内容のみです。 GeoJSON シリアライザ も参照してください。

`GEOSGeometry.``geojson`

  `GEOSGeometry.json` のエイリアス。

`GEOSGeometry.``kml`

  ジオメトリの KML (Keyhole Markup Language) 表現を返します。 これは、SRID が 4326 (WGS84) のジオメトリにのみ使用すべきですが、この制限は強制されません。

`GEOSGeometry.``ogr`

  GEOS ジオメトリに対応する `OGRGeometry` オブジェクトを返します。

`GEOSGeometry.``wkb`

  このジオメトリのWKB (Well-Known Binary) 表現を Python バッファとして返します。SRID 値は含まれません。代わりに、`ewkb` プロパティを使用してください。

`GEOSGeometry.``ewkb`

  このジオメトリの EWKB 表現を Python バッファとして返します。これは、このジオメトリの一部であるすべての SRID 値を含む WKB 仕様の拡張です。

`GEOSGeometry.``wkt`

  ジオメトリの Well-Known Text (OGC標準) を返します。

#### 空間述語メソッド (Spatial Predicate Method)

以下の空間述語 (predicate) メソッドは、別の `GEOSGeometry` インスタンス (`other`) をパラメータとして受け取り、真偽値を返します。

`GEOSGeometry.``contains`(other)

  `other.within(this)` が `True` を返した場合に `True` を返します。

`GEOSGeometry.``covers`(other)

  このジオメトリが指定したジオメトリをカバーしている場合は `True` を返します。

  `covers` predicate は以下の定義と等価です:

  - もう一方のジオメトリのすべての点は、このジオメトリの点である。
  - 2つのジオメトリの DE-9IM 交差行列は `T*****FF*`, `*T****FF*`, `***T**FF*`, または `****T*FF*` である。

  どちらかのジオメトリが空の場合、`False` を返します。

  この predicate は `GEOSGeometry.contains()` に似ていますが、より包括的です (つまり、より多くの場合に `True` を返します) 。特に、 `contains()` とは異なり、ジオメトリの境界と内部の点を区別しません。ほとんどの場合、 `contains()` よりも `covers()` を優先すべきです。さらに、 `covers()` は最適化しやすいので、 `contains()` よりも優れています。

`GEOSGeometry.``crosses`(other)

  2つのジオメトリの DE-9IM 交差行列が `T*T*******` (点と曲線、点と面積、線と面積の場合) `0********` (2つの曲線の場合) である場合に `True` を返します。

`GEOSGeometry.``disjoint`(other)

  2つのジオメトリのDE-9IM交差行列が `FF*FF****` である場合に `True` を返します。

`GEOSGeometry.``equals`(other)

  2つのジオメトリの DE-9IM 交差行列が `T*F**FFF*` である場合に `True` を返します。

`GEOSGeometry.``equals_exact`(other, tolerance=0)

  2つのジオメトリが指定した許容誤差まで正確に等しい場合に true を返します。`tolerance` 値は、比較における誤差の許容値を表す浮動小数点数である必要があります。たとえば、 `poly1.equals_exact(poly2, 0.001)` は、1000分の1単位以内で等しいかどうかを比較します。

`GEOSGeometry.``equals_identical`(other)
  New in Django 5.0.

  すべての次元において、すべての頂点の構造、順序、および値が同じであることをチェックすることにより、2つのジオメトリが点的に等価である場合に `True` を返します。 `NaN` 値は他の `NaN` 値と等しいとみなされます。GEOS 3.12が必要です。

`GEOSGeometry.``intersects`(other)

  `GEOSGeometry.disjoint()` が `False` の場合に `True` を返します。

`GEOSGeometry.``overlaps`(other)

  2つのジオメトリの DE-9IM 交差行列が `T*T***T**` (2つの点または2つの曲面の場合) `1*T***T**` (2つの曲線の場合) である場合に true を返します．

`GEOSGeometry.``relate_pattern`(other, pattern)

  このジオメトリと他のジオメトリの DE-9IM 交差行列の要素が、与えられた `pattern` -- アルファベットから 9 文字の文字列と一致する場合に `True` を返します: {`T`, `F`, `*`, `0`} の9文字の文字列。

`GEOSGeometry.``touches`(other)

  2つのジオメトリのDE-9IM交差行列が `FT*******`, `F**T*****` または `F***T****` である場合に `True` を返します。

`GEOSGeometry.``within`(other)

  2つのジオメトリの DE-9IM 交差行列が `T*F**F***` である場合に `True` を返します。

#### トポロジー的 (Topological) メソッド

`GEOSGeometry.``buffer`(width, quadsegs=8)

  このジオメトリからの距離が与えられた `width` 以下のすべての点を表す `GEOSGeometry` を返す。オプションの `quadsegs` キーワードは、1/4円の近似に使用するセグメントの数を設定します (デフォルトは8) 。

`GEOSGeometry.``buffer_with_style`(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)

  `buffer()` と同じですが、バッファのスタイルをカスタマイズできます。

  - `end_cap_style` には、round (`1`) 、flat (`2`) 、square (`3`) を指定できます。
  - `join_style` には round (`1`) 、mitre (`2`) 、bevel (`3`) のいずれかを指定します。
  - Mitre レシオ制限 (`mitre_limit`) は、mitre 形式の結合スタイルにのみ影響します。

`GEOSGeometry.``difference`(other)

  このジオメトリを構成する点のうち、他の点を構成しない点を表す `GEOSGeometry` を返す。

`GEOSGeometry.``interpolate`(distance)

`GEOSGeometry.``interpolate_normalized`(distance)

  与えられた距離 (float) に対する、その距離上の点 (またはもっとも近い点) を返します。この距離は、 `LineString` または `MultiLineString` のジオメトリであり、正規化されたバージョンでは、0 (始点) から 1 (終点) の値を取る float 型として距離の値を取ります。

  `GEOSGeometry.project()` の逆。

`GEOSGeometry.``intersection`(other)

  このジオメトリと他のジオメトリが共有する点を表す `GEOSGeometry` を返す。

`GEOSGeometry.``project`(point)

`GEOSGeometry.``project_normalized`(point)

  ジオメトリ (`LineString` または `MultiLineString`) の原点から、ジオメトリに投影された点 (つまり、指定された点に最も近い線の点) までの距離 (float) を返します。正規化されたバージョンは、0 (原点) と 1 (終点) の間の浮動小数点数として距離を返します。

  `GEOSGeometry.interpolate()` の逆。

`GEOSGeometry.``relate`(other)

  このジオメトリと他のジオメトリのトポロジカルな関係を表す DE-9IM 交差行列 (文字列) を返します。

`GEOSGeometry.``simplify`(tolerance=0.0, preserve_topology=False)

  新しい `GEOSGeometry` を返します。これは Douglas-Peucker アルゴリズムを用いて、指定した許容誤差まで単純化されます。許容誤差の値が大きいほど、出力される点は少なくなります。公差が指定されない場合、デフォルトは0です。

  デフォルトでは、この関数はトポロジーを保持しません。例えば、 `Polygon` オブジェクトは分割されたり、線に折りたたまれたり、消えたりすることがあります。 `Polygon` の穴ができたり消えたり、線が交差したりすることがあります。 `preserve_topology=True` を指定することで、結果は入力と同じ次元と要素数になります。

`GEOSGeometry.``sym_difference`(other)

  このジオメトリに含まれる点のうち他のジオメトリに含まれない点と、他のジオメトリに含まれる点のうちこのジオメトリに含まれない点を結合した `GEOSGeometry` を返す。

`GEOSGeometry.``union`(other)

  このジオメトリともう一方のジオメトリのすべての点を表す `GEOSGeometry` を返す。

#### トポロジー的プロパティ

`GEOSGeometry.``boundary`

  新しく割り当てられた Geometry オブジェクトとして境界を返します。

`GEOSGeometry.``centroid`

  ジオメトリの幾何学的中心を表す `Point` オブジェクトを返します。この点はジオメトリの内側にあることは保証されません。

`GEOSGeometry.``convex_hull`

  ジオメトリ内のすべての点を含む最小の `Polygon` を返す。

`GEOSGeometry.``envelope`

  このジオメトリの外接を表す `Polygon` を返します。入力ジオメトリが点の場合は `Point` を返すこともあります。

`GEOSGeometry.``point_on_surface`

  このジオメトリ内部に存在することが保証された `Point` を計算し、返します。

`GEOSGeometry.``unary_union`

  このジオメトリのすべての要素の和集合を計算します。

  結果は次の規約に従います:

  - `LineString` の集合を結合することは、ラインワークを完全にノード化し、分解する効果がある。
  - `Polygon` のセットを結合すると常に `Polygon` または `MultiPolygon` ジオメトリが返されます (`GEOSGeometry.union()` は、トポロジーの崩壊が発生した場合、次元が低いジオメトリが返される可能性がある点が異なります)。

#### その他のプロパティとメソッド

`GEOSGeometry.``area`

  このプロパティは、ジオメトリの面積を返します。

`GEOSGeometry.``extent`

  このプロパティは、このジオメトリの範囲を `(xmin, ymin, xmax, ymax)` からなる4タプルで返します。

`GEOSGeometry.``clone`()

  このメソッドは、元のジオメトリのクローンである `GEOSGeometry` を返します。

`GEOSGeometry.``distance`(geom)

  このジオメトリと与えられた `geom` (別の `GEOSGeometry` オブジェクト) との間の最も近い点の距離を返します。

  注釈

  GEOSの距離計算は線形です。言い換えると、GEOSはSRIDが地理座標系を指定していても球面計算を行いません。

`GEOSGeometry.``length`

  このジオメトリの長さを返します (例: `Point` の場合は 0、`LineString` の長さ、または `Polygon` の円周)。

`GEOSGeometry.``prepared`

  このジオメトリの内容の GEOS `PreparedGeometry` を返します。 `PreparedGeometry` オブジェクトは、contains、intersects、covers、crosss、disjoint、overlaps、touches、および within の操作に最適化されています。詳細は 準備された (Prepared) ジオメトリ のドキュメントを参照してください。

`GEOSGeometry.``srs`

  ジオメトリの SRID に対応する `SpatialReference` オブジェクト、または `None` を返します。

`GEOSGeometry.``transform`(ct, clone=False)

  与えられた座標変換パラメータ (`ct`) に従ってジオメトリを変換します。座標変換パラメータは、整数の SRID、空間参照の WKT 文字列、PROJ 文字列、 `SpatialReference` オブジェクト、 `CoordTransform` オブジェクトのいずれかです。デフォルトでは、ジオメトリはその場で変換され、何も返されません。しかし、 `clone` キーワードが設定されている場合、ジオメトリは変更されず、変換されたジオメトリのクローンが返されます。

  注釈

  GDALが利用できないか、ジオメトリのSRIDが `None` または0未満の場合に `GEOSException` を発生させます。 `CoordTransform` オブジェクトを使用して呼び出される場合、ジオメトリのSRIDには制約を与えません。

`GEOSGeometry.``make_valid`()

  入力された頂点を失わず、有効な `GEOSGeometry` に変換して返します。既に有効なジオメトリの場合、そのまま返されます。これは `MakeValid` データベース関数に類似しています。GEOS 3.8が必要です。

`GEOSGeometry.``normalize`(clone=False)

  このジオメトリを正規形に変換します。 `clone` キーワードがセットされている場合、ジオメトリは変更されず、代わりにジオメトリの正規化されたクローンが返されます:

      >>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1))
      >>> print(g)
      MULTIPOINT (0 0, 2 2, 1 1)
      >>> g.normalize()
      >>> print(g)
      MULTIPOINT (2 2, 1 1, 0 0)

### `Point`

class `Point`(x=None, y=None, z=None, srid=None)

  `Point` オブジェクトは、ポイントの座標を表す引数を使用してインスタンス化されたり、1 つのシーケンス座標でインスタンス化されたりします。例えば、以下は同等です:

      >>> pnt = Point(5, 23)
      >>> pnt = Point([5, 23])

  空の `Point` オブジェクトを引数なしまたは空のシーケンスを渡すことでインスタンス化できます。以下は同等です:

      >>> pnt = Point()
      >>> pnt = Point([])

### `LineString`

class `LineString`(*args, **kwargs)

  `LineString` オブジェクトは、座標のシーケンスまたは `Point` オブジェクトを引数としてインスタンス化されます。例えば、以下は同等です:

      >>> ls = LineString((0, 0), (1, 1))
      >>> ls = LineString(Point(0, 0), Point(1, 1))

  さらに、`LineString` オブジェクトは、座標または `Point` オブジェクトのシーケンスを渡すことによっても作成できます:

      >>> ls = LineString(((0, 0), (1, 1)))
      >>> ls = LineString([Point(0, 0), Point(1, 1)])

  空の `LineString` オブジェクトは、引数を渡さないか空のシーケンスを渡すことでインスタンス化できます。以下は同等です:

      >>> ls = LineString()
      >>> ls = LineString([])

  `closed`

    この `LineString` が閉じているかどうかを返します。

### `LinearRing`

class `LinearRing`(*args, **kwargs)

  `LinearRing` オブジェクトは、`LineString` オブジェクトとまったく同じ方法で構築されますが、座標は 閉じている 必要があります。つまり、最初の座標と最後の座標が同じである必要があります。例:

      >>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))

  `(0, 0)` は最初で最後の座標です。もし等しくなければ、エラーが発生します。

  `is_counterclockwise`

    この `LinearRing` が反時計回りかどうかを返します。

### `Polygon`

class `Polygon`(*args, **kwargs)

  `Polygon` オブジェクトは、多角形のリングを表すパラメータを渡すことでインスタンス化できます。パラメータは、 `LinearRing` インスタンスであるか、 `LinearRing` を構築するために使用できるシーケンスである必要があります。

      >>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0))
      >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4))
      >>> poly = Polygon(ext_coords, int_coords)
      >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))

  classmethod `from_bbox`(bbox)

    与えられたバウンディングボックスからポリゴンオブジェクトを返します。ポリゴンオブジェクトは `(xmin, ymin, xmax, ymax)` からなる4タプルで構成されます。

  `num_interior_rings`

    このジオメトリの内部リングの数を返します。

ポリゴン（多角形）の比較

ポリゴンのオブジェクトを直接 `<` や `>` と比較することも可能ですが、比較はポリゴンの `LineString` を通して行われるため、あまり意味がないことに注意してください (しかし、一貫性があり、素早く比較できます) 。 `area` プロパティで常に強制的に比較することもできます:

    >>> if poly_1.area > poly_2.area:
    ...     pass
    ...

## ジオメトリのコレクション

### `MultiPoint`

class `MultiPoint`(*args, **kwargs)

  `MultiPoint` オブジェクトは `Point` オブジェクトを引数として渡すか、1つの `Point` オブジェクトのシーケンスを渡すことでインスタンス化できます。

      >>> mp = MultiPoint(Point(0, 0), Point(1, 1))
      >>> mp = MultiPoint((Point(0, 0), Point(1, 1)))

### `MultiLineString`

class `MultiLineString`(*args, **kwargs)

  `MultiLineString` オブジェクトは、 `LineString` オブジェクトを引数として渡すか、1つの `LineString` オブジェクトのシーケンスを渡すことでインスタンス化が可能です。

      >>> ls1 = LineString((0, 0), (1, 1))
      >>> ls2 = LineString((2, 2), (3, 3))
      >>> mls = MultiLineString(ls1, ls2)
      >>> mls = MultiLineString([ls1, ls2])

  `merged`

    この `MultiLineString` のすべてのコンポーネントを結合した線を表す `LineString` を返します。

  `closed`

    すべての要素が閉じられている場合にのみ `True` を返します。

### `MultiPolygon`

class `MultiPolygon`(*args, **kwargs)

  `MultiPolygon` オブジェクトは、 `Polygon` オブジェクトを引数として渡すか、1つの `Polygon` オブジェクトのシーケンスを渡すことでインスタンス化できます。

      >>> p1 = Polygon(((0, 0), (0, 1), (1, 1), (0, 0)))
      >>> p2 = Polygon(((1, 1), (1, 2), (2, 2), (1, 1)))
      >>> mp = MultiPolygon(p1, p2)
      >>> mp = MultiPolygon([p1, p2])

### `GeometryCollection`

class `GeometryCollection`(*args, **kwargs)

  `GeometryCollection` オブジェクトは、他の `GEOSGeometry` オブジェクトを引数として渡すか、または単一の `GEOSGeometry` オブジェクトのシーケンスを引数として渡すことでインスタンス化できます:

      >>> poly = Polygon(((0, 0), (0, 1), (1, 1), (0, 0)))
      >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly)
      >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))

## 準備された (Prepared) ジオメトリ

事前に準備された prepared ジオメトリを取得するには、 `GEOSGeometry.prepared` プロパティにアクセスします。 `PreparedGeometry` インスタンスを取得したら、以下にリストされているその空間述語 (predicate) メソッドを他の `GEOSGeometry` オブジェクトで使用できます。prepared ジオメトリを使った操作は、桁違いに高速になることがあります。prepared ジオメトリがより複雑な場合、操作は大いに高速化されます。詳細については、 GEOS wiki page on prepared geometries. を参照してください。

例:

    >>> from django.contrib.gis.geos import Point, Polygon
    >>> poly = Polygon.from_bbox((0, 0, 5, 5))
    >>> prep_poly = poly.prepared
    >>> prep_poly.contains(Point(2.5, 2.5))
    True

### `PreparedGeometry`

class `PreparedGeometry`

  `PreparedGeometry` のすべてのメソッドは `other` 引数を取ります。この引数は `GEOSGeometry` インスタンスでなければなりません。

  `contains`(other)
  `contains_properly`(other)
  `covers`(other)
  `crosses`(other)
  `disjoint`(other)
  `intersects`(other)
  `overlaps`(other)
  `touches`(other)
  `within`(other)

## ジオメトリ ファクトリ

`fromfile`(file_h)

  パラメータ: | file_h (a Python `file` object or a string path to the file) -- 空間データを含む入力ファイル
  戻り値の型: | ファイル内の空間データに対応する `GEOSGeometry`

  例:

      >>> from django.contrib.gis.geos import fromfile
      >>> g = fromfile("/home/bob/geom.wkt")

`fromstr`(string, srid=None)

  パラメータ: | string (str) -- 空間データを含む文字列 srid (int) -- 空間参照識別子
  戻り値の型: | 文字列内の空間データに対応する `GEOSGeometry`

  `fromstr(string, srid)` は、 `GEOSGeometry(string, srid)` と同等です。

  例:

      >>> from django.contrib.gis.geos import fromstr
      >>> pnt = fromstr("POINT(-90.5 29.5)", srid=4326)

## I/O オブジェクト

### Reader オブジェクト

Reader I/Oクラスは、 `read(geom)` メソッドに渡されたWKBおよび/またはWKT入力から `GEOSGeometry` インスタンスを返します。

class `WKBReader`

  例:

      >>> from django.contrib.gis.geos import WKBReader
      >>> wkb_r = WKBReader()
      >>> wkb_r.read("0101000000000000000000F03F000000000000F03F")
      <Point object at 0x103a88910>

class `WKTReader`

  例:

      >>> from django.contrib.gis.geos import WKTReader
      >>> wkt_r = WKTReader()
      >>> wkt_r.read("POINT(1 1)")
      <Point object at 0x103a88b50>

### Writer オブジェクト

すべての Writer オブジェクトは `write(geom)` メソッドを持っており、与えられたジオメトリの WKB または WKT を返します。さらに、`WKBWriter` オブジェクトは、バイトオーダーを変更したり、SRID 値 (言い換えれば、EWKB) を含めるために使用できるプロパティも持っています。

class `WKBWriter`(dim=2)

  `WKBWriter` はその出力を最もコントロールできます。デフォルトでは、 `write` メソッドが呼ばれると OGC 準拠の WKB を返します。ただし、追加情報を含むWKB標準のスーパーセットであるEWKBを作成できるプロパティも持っています。引数 `dim` の詳細については `WKBWriter.outdim` のドキュメントを参照してください。

  `write`(geom)

  与えられたジオメトリの WKB を Python の `buffer` オブジェクトとして返します。例:

      >>> from django.contrib.gis.geos import Point, WKBWriter
      >>> pnt = Point(1, 1)
      >>> wkb_w = WKBWriter()
      >>> wkb_w.write(pnt)
      <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>

  `write_hex`(geom)

  ジオメトリのWKBを16進数で返します。例:

      >>> from django.contrib.gis.geos import Point, WKBWriter
      >>> pnt = Point(1, 1)
      >>> wkb_w = WKBWriter()
      >>> wkb_w.write_hex(pnt)
      '0101000000000000000000F03F000000000000F03F'

  `byteorder`

  このプロパティを設定すると、ジオメトリ表現のバイトオーダーを変更できます。

  バイトオーダーの値 | 説明
  --- | ---
  0 | ビッグエンディアン (例: RISC システムと互換性あり)
  1 | リトルエンディアン (例: x86 システムと互換性あり)

  例:

      >>> from django.contrib.gis.geos import Point, WKBWriter
      >>> wkb_w = WKBWriter()
      >>> pnt = Point(1, 1)
      >>> wkb_w.write_hex(pnt)
      '0101000000000000000000F03F000000000000F03F'
      >>> wkb_w.byteorder = 0
      '00000000013FF00000000000003FF0000000000000'

  `outdim`

  このプロパティは、ジオメトリ表現の出力次元を変更するために設定できます。つまり、3D ジオメトリの場合は 3 に設定し、Z 値が WKB に含まれるようにします。

  Outdim 値 | 説明
  --- | ---
  2 | デフォルトで、2次元のWKBを出力します。
  3 | 3D の WKB を出力します。

  例:

      >>> from django.contrib.gis.geos import Point, WKBWriter
      >>> wkb_w = WKBWriter()
      >>> wkb_w.outdim
      2
      >>> pnt = Point(1, 1, 1)
      >>> wkb_w.write_hex(pnt)  # By default, no Z value included:
      '0101000000000000000000F03F000000000000F03F'
      >>> wkb_w.outdim = 3  # Tell writer to include Z values
      >>> wkb_w.write_hex(pnt)
      '0101000080000000000000F03F000000000000F03F000000000000F03F'

  `srid`

  このプロパティに真偽値を設定して、ジオメトリのSRIDがWKB表現に含まれるかどうかを示します。例:

      >>> from django.contrib.gis.geos import Point, WKBWriter
      >>> wkb_w = WKBWriter()
      >>> pnt = Point(1, 1, srid=4326)
      >>> wkb_w.write_hex(pnt)  # By default, no SRID included:
      '0101000000000000000000F03F000000000000F03F'
      >>> wkb_w.srid = True  # Tell writer to include SRID
      >>> wkb_w.write_hex(pnt)
      '0101000020E6100000000000000000F03F000000000000F03F'

class `WKTWriter`(dim=2, trim=False, precision=None)

  このクラスを使用すると、ジオメトリの WKT 表現を出力できます。コンストラクタの引数の詳細については `WKBWriter.outdim`, `trim`, `precision` 属性を参照してください。

  `write`(geom)

  与えられたジオメトリのWKTを返します。例:

      >>> from django.contrib.gis.geos import Point, WKTWriter
      >>> pnt = Point(1, 1)
      >>> wkt_w = WKTWriter()
      >>> wkt_w.write(pnt)
      'POINT (1.0000000000000000 1.0000000000000000)'

  `outdim`

    `WKBWriter.outdim` を参照。

  `trim`

  このプロパティは、不要な小数のトリミングを有効または無効にするために使用されます。

      >>> from django.contrib.gis.geos import Point, WKTWriter
      >>> pnt = Point(1, 1)
      >>> wkt_w = WKTWriter()
      >>> wkt_w.trim
      False
      >>> wkt_w.write(pnt)
      'POINT (1.0000000000000000 1.0000000000000000)'
      >>> wkt_w.trim = True
      >>> wkt_w.write(pnt)
      'POINT (1 1)'

  `precision`

  このプロパティは座標の丸め精度をコントロールします。もし `None` に設定すると丸めは無効になります。

      >>> from django.contrib.gis.geos import Point, WKTWriter
      >>> pnt = Point(1.44, 1.66)
      >>> wkt_w = WKTWriter()
      >>> print(wkt_w.precision)
      None
      >>> wkt_w.write(pnt)
      'POINT (1.4399999999999999 1.6599999999999999)'
      >>> wkt_w.precision = 0
      >>> wkt_w.write(pnt)
      'POINT (1 2)'
      >>> wkt_w.precision = 1
      >>> wkt_w.write(pnt)
      'POINT (1.4 1.7)'

脚注

[1] | 参照 PostGIS EWKB, EWKT and Canonical Forms, PostGIS documentation at Ch. 4.1.2.

## 設定

### `GEOS_LIBRARY_PATH`

GEOS Cライブラリの場所を指定する文字列。通常、この設定は GEOS C ライブラリが標準以外の場所にある場合にのみ使用されます (`/home/bob/lib/libgeos_c.so` など)。

注釈

設定は C 共有ライブラリの フル パスである必要があります。つまり、 `libgeos.so` ではなく `libgeos_c.so` を使用することが望まれます。

## 例外

exception `GEOSException`

  ベースとなるGEOS例外。GEOS関連のエラーを示します。