---
title: "GIS QuerySet API リファレンス"
version: 5.0
locale: ja
source: https://docs.djangoproject.com/ja/5.0/ref/contrib/gis/geoquerysets/
canonical: https://djangodocs.dev/ja/5.0/ref/contrib/gis/geoquerysets/
---
# GIS QuerySet API リファレンス

## 空間のルックアップ (Spatial Lookup)

このセクションの空間ルックアップは [`GeometryField`](/ja/5.0/ref/contrib/gis/model-api/#django.contrib.gis.db.models.GeometryField) と [`RasterField`](/ja/5.0/ref/contrib/gis/model-api/#django.contrib.gis.db.models.RasterField) 用です。

導入については、 [空間ルックアップの概要](/ja/5.0/ref/contrib/gis/db-api/#spatial-lookups-intro) を参照してください。特定の空間バックエンドと互換性のあるルックアップの概要については、 [空間ルックアップの互換表](/ja/5.0/ref/contrib/gis/db-api/#spatial-lookup-compatibility) を参照してください。

### ラスターのルックアップ

以下のリファレンスにあるすべての例は地理情報フィールドおよび入力に対して提供されていますが、ルックアップはラスタの両側で同じように使用できます。ルックアップがラスター入力をサポートしていない場合、入力は [ST\_Polygon](https://postgis.net/docs/RT_ST_Polygon.html) 関数を使用して必要に応じて自動的にジオメトリに変換されます。 [ラスタルックアップの概要](/ja/5.0/ref/contrib/gis/db-api/#spatial-lookup-raster) も参照してください。

ルックアップで使用されるデータベース演算子は、以下の 3 つのカテゴリに分類できます:

- ネイティブラスターサポート (`N`): この演算子は、参照先としてラスターをネイティブに受け入れ、ラスター入力をジオメトリ入力と混在させることができます。
- 双方向ラスターサポート `B`: このオペレータは、ルックアップの両側がラスター入力を受け取る場合のみ、ラスターをサポートします。異なるルックアップの場合は、ラスターデータは自動的にジオメトリに変換されます。
- ジオメトリ変換サポート `C` 。ルックアップはネイティブのラスターをサポートしていないため、すべてのラスターデータは自動的にジオメトリに変換されます。

以下の例は、さまざまなタイプのラスターサポートにおけるルックアップに相当する SQL を示しています。同じパターンがすべての空間ルックアップに適用されます。

| ケース | ルックアップ | 等価なSQL |
| --- | --- | --- |
| N, B | `rast__contains=rst` | `ST_Contains(rast, rst)` |
| N, B | `rast__1__contains=(rst, 2)` | `ST_Contains(rast, 1, rst, 2)` |
| B, C | `rast__contains=geom` | `ST_Contains(ST_Polygon(rast), geom)` |
| B, C | `rast__1__contains=geom` | `ST_Contains(ST_Polygon(rast, 1), geom)` |
| B, C | `poly__contains=rst` | `ST_Contains(poly, ST_Polygon(rst))` |
| B, C | `poly__contains=(rst, 1)` | `ST_Contains(poly, ST_Polygon(rst, 1))` |
| C | `rast__crosses=rst` | `ST_Crosses(ST_Polygon(rast), ST_Polygon(rst))` |
| C | `rast__1__crosses=(rst, 2)` | `ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2))` |
| C | `rast__crosses=geom` | `ST_Crosses(ST_Polygon(rast), geom)` |
| C | `poly__crosses=rst` | `ST_Crosses(poly, ST_Polygon(rst))` |

ラスターを使った空間ルックアップは、PostGISバックエンド (この節ではPGRasterと表記) のみでサポートされています。

### `bbcontains`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Contain.html), MariaDB, MySQL, SpatiaLite, PGRaster (Native)

ジオメトリまたはラスタフィールドのバウンディングボックスが、ルックアップジオメトリのバウンディングボックスを完全に含むかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__bbcontains=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `poly ~ geom` |
| MariaDB | `MBRContains(poly, geom)` |
| MySQL | `MBRContains(poly, geom)` |
| SpatiaLite | `MbrContains(poly, geom)` |

### `bboverlaps`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/geometry_overlaps.html), MariaDB, MySQL, SpatiaLite, PGRaster (Native)

ジオメトリフィールドのバウンディングボックスが、ルックアップジオメトリのバウンディングボックスと重なるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__bboverlaps=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `poly && geom` |
| MariaDB | `MBROverlaps(poly, geom)` |
| MySQL | `MBROverlaps(poly, geom)` |
| SpatiaLite | `MbrOverlaps(poly, geom)` |

### `contained`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Contained.html), MariaDB, MySQL, SpatiaLite, PGRaster (Native)

ジオメトリフィールドのバウンディングボックスがルックアップジオメトリのバウンディングボックスに完全に含まれるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__contained=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `poly @ geom` |
| MariaDB | `MBRWithin(poly, geom)` |
| MySQL | `MBRWithin(poly, geom)` |
| SpatiaLite | `MbrWithin(poly, geom)` |

### `contains`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Contains.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドにルックアップ ジオメトリが含まれているかどうかを調べます。

実装例:

```
Zipcode.objects.filter(poly__contains=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Contains(poly, geom)` |
| Oracle | `SDO_CONTAINS(poly, geom)` |
| MariaDB | `ST_Contains(poly, geom)` |
| MySQL | `ST_Contains(poly, geom)` |
| SpatiaLite | `Contains(poly, geom)` |

### `contains_properly`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_ContainsProperly.html), PGRaster (Bilateral)

ルックアップ ジオメトリがジオメトリ フィールドの内部と交差し、境界 (または外部) と交差しない場合に true を返します。

実装例:

```
Zipcode.objects.filter(poly__contains_properly=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_ContainsProperly(poly, geom)` |

### `coveredby`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_CoveredBy.html), Oracle, PGRaster (Bilateral), SpatiaLite

ジオメトリフィールドのどのポイントもルックアップジオメトリの外側にないかどうかをテストします。 [^3]

実装例:

```
Zipcode.objects.filter(poly__coveredby=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_CoveredBy(poly, geom)` |
| Oracle | `SDO_COVEREDBY(poly, geom)` |
| SpatiaLite | `CoveredBy(poly, geom)` |

### `covers`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Covers.html), Oracle, PGRaster (Bilateral), SpatiaLite

ルックアップされたジオメトリ内のどのポイントも、ジオメトリフィールドの外にないかどうかテストします。 [^3]

実装例:

```
Zipcode.objects.filter(poly__covers=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Covers(poly, geom)` |
| Oracle | `SDO_COVERS(poly, geom)` |
| SpatiaLite | `Covers(poly, geom)` |

### `crosses`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Crosses.html), MariaDB, MySQL, SpatiaLite, PGRaster (Conversion)

ジオメトリフィールドがルックアップジオメトリと空間的に交差しているかをテストします。

実装例:

```
Zipcode.objects.filter(poly__crosses=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Crosses(poly, geom)` |
| MariaDB | `ST_Crosses(poly, geom)` |
| MySQL | `ST_Crosses(poly, geom)` |
| SpatiaLite | `Crosses(poly, geom)` |

### `disjoint`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Disjoint.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドがルックアップジオメトリから空間的に分離しているかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__disjoint=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Disjoint(poly, geom)` |
| Oracle | `SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)` |
| MariaDB | `ST_Disjoint(poly, geom)` |
| MySQL | `ST_Disjoint(poly, geom)` |
| SpatiaLite | `Disjoint(poly, geom)` |

### `equals`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Equals.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Conversion)

ジオメトリフィールドがルックアップジオメトリと空間的に等しいかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__equals=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Equals(poly, geom)` |
| Oracle | `SDO_EQUAL(poly, geom)` |
| MariaDB | `ST_Equals(poly, geom)` |
| MySQL | `ST_Equals(poly, geom)` |
| SpatiaLite | `Equals(poly, geom)` |

### `exact`, `same_as`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Same.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドがルックアップジオメトリと "等しい" かどうかをテストします。Oracle、MySQL、SpatiaLite では空間的な等しさをテストし、PostGIS ではバウンディングボックスの等しさをテストします。

実装例:

```
Zipcode.objects.filter(poly=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `poly ~= geom` |
| Oracle | `SDO_EQUAL(poly, geom)` |
| MariaDB | `ST_Equals(poly, geom)` |
| MySQL | `ST_Equals(poly, geom)` |
| SpatiaLite | `Equals(poly, geom)` |

### `intersects`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Intersects.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドがルックアップジオメトリと空間的に交差しているかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__intersects=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Intersects(poly, geom)` |
| Oracle | `SDO_OVERLAPBDYINTERSECT(poly, geom)` |
| MariaDB | `ST_Intersects(poly, geom)` |
| MySQL | `ST_Intersects(poly, geom)` |
| SpatiaLite | `Intersects(poly, geom)` |

### `isempty`

> **New in Django 4.2**

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_IsEmpty.html)

ジオメトリが空かどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__isempty=True)
```

### `isvalid`

*利用可能なDB*: MySQL, [PostGIS](https://postgis.net/docs/ST_IsValid.html), Oracle, SpatiaLite

ジオメトリが有効かどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__isvalid=True)
```

| バックエンド | 等価なSQL |
| --- | --- |
| MySQL, PostGIS, SpatiaLite | `ST_IsValid(poly)` |
| Oracle | `SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE'` |

### `overlaps`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Overlaps.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドがルックアップ ジオメトリと空間的に重なっているかどうかをテストします。

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Overlaps(poly, geom)` |
| Oracle | `SDO_OVERLAPS(poly, geom)` |
| MariaDB | `ST_Overlaps(poly, geom)` |
| MySQL | `ST_Overlaps(poly, geom)` |
| SpatiaLite | `Overlaps(poly, geom)` |

### `relate`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Relate.html), MariaDB, Oracle, SpatiaLite, PGRaster (Conversion)

ジオメトリフィールドが指定されたパターンの値によって空間的に関連しているかをテストします。このルックアップには `(geom, pattern)` というタプルパラメータが必要であり、`pattern` の形式は空間バックエンドによって異なります。

#### MariaDB, PostGIS, SpatiaLite

これらの空間バックエンドでは、交差パターンは9文字からなる文字列で、ジオメトリフィールドとルックアップジオメトリの内部、境界、外部の交差を定義します。交差パターン行列では、次の文字のみを使用できます: `1`、`2`、`T`、`F`、または `*`。このルックアップタイプを使用すると、ユーザーはDE-9IMモデルに一致する特定のジオメトリのリレーションシップを「微調整」できます。 [^1]

ジオメトリの例:

```
# A tuple lookup parameter is used to specify the geometry and
# the intersection pattern (the pattern here is for 'contains').
Zipcode.objects.filter(poly__relate=(geom, "T*T***FF*"))
```

PostGIS と MariaDB では下記の SQL と同等です:

```sql
SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
```

SpatiaLite では下記の SQL と同等です:

```sql
SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')
```

ラスターの例:

```
Zipcode.objects.filter(poly__relate=(rast, 1, "T*T***FF*"))
Zipcode.objects.filter(rast__2__relate=(rast, 1, "T*T***FF*"))
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE ST_Relate(poly, ST_Polygon(rast, 1), 'T*T***FF*')
SELECT ... WHERE ST_Relate(ST_Polygon(rast, 2), ST_Polygon(rast, 1), 'T*T***FF*')
```

#### Oracle

ここで、リレーションパターンは9つのリレーション文字列のうち少なくとも1つで構成されます: `TOUCH`, `OVERLAPBDYDISJOINT`, `OVERLAPBDYINTERSECT`, `EQUAL`, `INSIDE`, `COVEREDBY`, `CONTAINS`, `COVERS`, `ON`, `ANYINTERACT` 。複数の文字列を論理論理演算子 OR で結合することもできます。 [^2] リレーション文字列は大文字小文字を区別しません。

実装例:

```
Zipcode.objects.filter(poly__relate=(geom, "anyinteract"))
```

Oracle では下記の SQL と同等です:

```sql
SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')
```

### `touches`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Touches.html), Oracle, MariaDB, MySQL, SpatiaLite

ジオメトリ フィールドがルックアップ ジオメトリに空間的に接しているかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__touches=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Touches(poly, geom)` |
| MariaDB | `ST_Touches(poly, geom)` |
| MySQL | `ST_Touches(poly, geom)` |
| Oracle | `SDO_TOUCH(poly, geom)` |
| SpatiaLite | `Touches(poly, geom)` |

### `within`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Within.html), Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

ジオメトリフィールドが空間的にルックアップジオメトリ内にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__within=geom)
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Within(poly, geom)` |
| MariaDB | `ST_Within(poly, geom)` |
| MySQL | `ST_Within(poly, geom)` |
| Oracle | `SDO_INSIDE(poly, geom)` |
| SpatiaLite | `Within(poly, geom)` |

### `left`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Left.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスが、ルックアップ ジオメトリのバウンディングボックスよりも厳密に左側にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__left=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly << geom
```

### `right`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Right.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスが、ルックアップ ジオメトリのバウンディングボックスの厳密に右側にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__right=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly >> geom
```

### `overlaps_left`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Overleft.html), PGRaster (Bilateral)

ジオメトリフィールドのバウンディングボックスが、ルックアップ ジオメトリのバウンディングボックスと重なるか、または左にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__overlaps_left=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly &< geom
```

### `overlaps_right`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Overright.html), PGRaster (Bilateral)

ジオメトリフィールドのバウンディングボックスが、ルックアップ ジオメトリのバウンディングボックスと重なっているか、または右側にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__overlaps_right=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly &> geom
```

### `overlaps_above`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Overabove.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスがルックアップジオメトリのバウンディングボックスと重なっているか、または上にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__overlaps_above=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly |&> geom
```

### `overlaps_below`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Overbelow.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスがルックアップジオメトリのバウンディングボックスと重なっているか、または下にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__overlaps_below=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly &<| geom
```

### `strictly_above`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Above.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスが、ルックアップジオメトリのバウンディングボックスの厳密に上にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__strictly_above=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly |>> geom
```

### `strictly_below`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Geometry_Below.html), PGRaster (Conversion)

ジオメトリフィールドのバウンディングボックスが、ルックアップジオメトリのバウンディングボックスの厳密に下にあるかどうかをテストします。

実装例:

```
Zipcode.objects.filter(poly__strictly_below=geom)
```

PostGIS では下記の SQL と同等です:

```sql
SELECT ... WHERE poly <<| geom
```

## 距離ルックアップ

*利用可能なDB*: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Native)

距離クエリの概要については [距離クエリの概要](/ja/5.0/ref/contrib/gis/db-api/#distance-queries) を参照してください。

距離ルックアップは次の形式を取ります:

```text
<field>__<distance lookup>=(<geometry/raster>, <distance value>[, "spheroid"])
<field>__<distance lookup>=(<raster>, <band_index>, <distance value>[, "spheroid"])
<field>__<band_index>__<distance lookup>=(<raster>, <band_index>, <distance value>[, "spheroid"])
```

距離ルックアップに渡される値はタプルであり、最初の2つの値は必須で、それぞれ、距離の計算対象のジオメトリと距離値 (フィールドの単位での数値、 [`Distance`](/ja/5.0/ref/contrib/gis/measure/#django.contrib.gis.measure.Distance) オブジェクト、または [クエリ式](/ja/5.0/ref/models/expressions/)) です。ルックアップにバンドインデックスを渡すには、2番目のエントリがバンドインデックスである3値タプルを使用します。

[`dwithin`](#std-fieldlookup-dwithin) を除くすべての距離ルックアップには、オプションの要素として `'spheroid'` を含めることができます。これにより、測地座標系を持つフィールドにおいてより精度の高い回転楕円体距離計算関数を使用できます。

PostgreSQLでは、 `'spheroid'` オプションは [ST\_DistanceSphere](https://postgis.net/docs/ST_DistanceSphere.html) の代わりに [ST\_DistanceSpheroid](https://postgis.net/docs/ST_Distance_Spheroid.html) を使用します。投影座標系では、より単純な [ST\_Distance](https://postgis.net/docs/ST_Distance.html) 関数を使用します。ラスタは回転楕円体ベースのルックアップ用にジオメトリに変換されます。

### `distance_gt`

指定された距離値よりも、ルックアップジオメトリからジオメトリフィールドへの距離が大きいモデルを返します。

実装例:

```
Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Distance/ST_Distance_Sphere(poly, geom) > 5` |
| MariaDB | `ST_Distance(poly, geom) > 5` |
| MySQL | `ST_Distance(poly, geom) > 5` |
| Oracle | `SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5` |
| SpatiaLite | `Distance(poly, geom) > 5` |

### `distance_gte`

ルックアップしたジオメトリからジオメトリフィールドまでの距離が、指定した距離の値以上であるモデルを返します。

実装例:

```
Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Distance/ST_Distance_Sphere(poly, geom) >= 5` |
| MariaDB | `ST_Distance(poly, geom) >= 5` |
| MySQL | `ST_Distance(poly, geom) >= 5` |
| Oracle | `SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5` |
| SpatiaLite | `Distance(poly, geom) >= 5` |

### `distance_lt`

ルックアップしたジオメトリからジオメトリフィールドまでの距離が、指定した距離の値よりも小さいモデルを返します。

実装例:

```
Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Distance/ST_Distance_Sphere(poly, geom) < 5` |
| MariaDB | `ST_Distance(poly, geom) < 5` |
| MySQL | `ST_Distance(poly, geom) < 5` |
| Oracle | `SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5` |
| SpatiaLite | `Distance(poly, geom) < 5` |

### `distance_lte`

ルックアップされたジオメトリからジオメトリフィールドまでの距離が、指定された距離の値以下であるモデルを返します。

実装例:

```
Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_Distance/ST_Distance_Sphere(poly, geom) <= 5` |
| MariaDB | `ST_Distance(poly, geom) <= 5` |
| MySQL | `ST_Distance(poly, geom) <= 5` |
| Oracle | `SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5` |
| SpatiaLite | `Distance(poly, geom) <= 5` |

### `dwithin`

ルックアップしたジオメトリからジオメトリフィールドまでの距離が、指定した距離以内のモデルを返します。 [`Distance`](/ja/5.0/ref/contrib/gis/measure/#django.contrib.gis.measure.Distance) オブジェクトを指定できるのは、対象となるジオメトリが投影システムの場合のみであることに注意してください。地理ジオメトリの場合は、ジオメトリフィールドの単位を使用する必要があります (例えば `WGS84` の場合は度)。

実装例:

```
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
```

| バックエンド | 等価なSQL |
| --- | --- |
| PostGIS | `ST_DWithin(poly, geom, 5)` |
| Oracle | `SDO_WITHIN_DISTANCE(poly, geom, 5)` |
| SpatiaLite | `PtDistWithin(poly, geom, 5)` |

### 集計関数

Django はいくつかの GIS 固有の集計関数を提供しています。これらの集計関数の使い方の詳細については、 [集計に関するトピックガイド](/ja/5.0/topics/db/aggregation/) を参照してください。

| キーワード引数 | 説明 |
| --- | --- |
| `tolerance` | このキーワードはOracle専用です。`SDOAGGRTYPE` プロシージャで使用される許容値のためのものです。詳細は [Oracle documentation](https://docs.oracle.com/en/database/oracle/oracle-database/21/spatl/spatial-concepts.html#GUID-CE10AB14-D5EA-43BA-A647-DAC9EEF41EE6) を参照してください。 |

例:

```pycon
>>> from django.contrib.gis.db.models import Extent, Union
>>> WorldBorder.objects.aggregate(Extent("mpoly"), Union("mpoly"))
```

#### `Collect`

#### `class Collect(geo_field, filter=None)`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Collect.html), SpatiaLite

ジオメトリ列から `GEOMETRYCOLLECTION` または `MULTI` ジオメトリオブジェクトを返します。これは [`Union`](#django.contrib.gis.db.models.Union) 集計の簡略版に似ていますが、ジオメトリをコレクションまたはマルチオブジェクトにまとめ、境界の解消を気にしないため、ユニオンを実行するよりも数桁高速です。

> **Changed in Django 5.0**
>
> `filter` 引数のサポートが追加されました。

#### `Extent`

#### `class Extent(geo_field, filter=None)`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Extent.html), Oracle, SpatiaLite

`QuerySet` 内のすべての `geo_field` の範囲を表す、左下の座標と右上の座標からなる4値タプルを返します。

例:

```pycon
>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(Extent("poly"))
>>> print(qs["poly__extent"])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
```

> **Changed in Django 5.0**
>
> `filter` 引数のサポートが追加されました。

#### `Extent3D`

#### `class Extent3D(geo_field, filter=None)`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_3DExtent.html)

`QuerySet` 内のすべての `geo_field` の 3D 範囲を、左下の座標と右上の座標 (それぞれ x、y、z 座標を持つ) からなる 6 要素のタプルとして返します。

例:

```pycon
>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(Extent3D("poly"))
>>> print(qs["poly__extent3d"])
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
```

> **Changed in Django 5.0**
>
> `filter` 引数のサポートが追加されました。

#### `MakeLine`

#### `class MakeLine(geo_field, filter=None)`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_MakeLine.html), SpatiaLite

`QuerySet` 内のポイントフィールドジオメトリから構築された `LineString` を返します。現在、クエリセットの順序は意味がありません。

例:

```pycon
>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(MakeLine("poly"))
>>> print(qs["poly__makeline"])
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
```

> **Changed in Django 5.0**
>
> `filter` 引数のサポートが追加されました。

#### `Union`

#### `class Union(geo_field, filter=None)`

*利用可能なDB*: [PostGIS](https://postgis.net/docs/ST_Union.html), Oracle, SpatiaLite

このメソッドは、クエリセット内のすべてのジオメトリの結合を含む [`GEOSGeometry`](/ja/5.0/ref/contrib/gis/geos/#django.contrib.gis.geos.GEOSGeometry) オブジェクトを返します。大きなクエリセットでは、`Union` を使用すると処理が集中し、かなりの時間がかかる可能性があることに注意してください。

> **Note**
>
> もしこの方法を使った計算に時間がかかりすぎる場合は、代わりに [`Collect`](#django.contrib.gis.db.models.Collect) を使用することを検討してください。

例:

```pycon
>>> u = Zipcode.objects.aggregate(Union(poly))  # This may take a long time.
>>> u = Zipcode.objects.filter(poly__within=bbox).aggregate(
...     Union(poly)
... )  # A more sensible approach.
```

> **Changed in Django 5.0**
>
> `filter` 引数のサポートが追加されました。

**脚注**

[^1]: *参考* [OpenGIS Simple Feature Specification For SQL](https://portal.ogc.org/files/?artifact_id=829), at Ch. 2.1.13.2, p. 2-13 (The Dimensionally Extended Nine-Intersection Model).

[^2]: *参考* Oracle Spatial and Graph Developer's Guide の [SDO\_RELATE documentation](https://docs.oracle.com/en/database/oracle/oracle-database/18/spatl/spatial-operators-reference.html#GUID-97C17C18-F05E-49B4-BE11-E89B972E2A02) 。

[^3]: この処理の説明については、PostGIS 開発者の Martin Davis による [Quirks of the "Contains" Spatial Predicate](https://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html) を参照してください。
