# Django 5.0.9.dev20240806133106 ドキュメント

# GeoDjango フォーム API

GeoDjango はジオローカライズされたデータを地図上に視覚的に表示・編集するために、いくつかの特殊なフォームフィールドとウィジェットを提供します。デフォルトでは、 NASA が提供する WMS レイヤーをベースとした OpenLayers を利用した地図を使います。

## フィールドの引数

通常の フォームフィールドの引数 に加えて、 GeoDjango のフォームフィールドは以下のオプションの引数を取ります。

### `srid`

`Field.``srid`

  これはフィールドの値を変換するSRIDコードです。例えば、マップウィジェットのSRIDがアプリケーションやデータベースで一般的に使われるSRIDと異なる場合、フィールドは入力値を自動的にそのSRIDに変換します。

### `geom_type`

`Field.``geom_type`

  通常、その属性を設定または変更する必要はありません。この属性はフィールドクラスに応じて設定されるべきです。これはOpenGIS標準のジオメトリ名に一致します。

## フォームフィールド クラス

### `GeometryField`

class `GeometryField`

### `PointField`

class `PointField`

### `LineStringField`

class `LineStringField`

### `PolygonField`

class `PolygonField`

### `MultiPointField`

class `MultiPointField`

### `MultiLineStringField`

class `MultiLineStringField`

### `MultiPolygonField`

class `MultiPolygonField`

### `GeometryCollectionField`

class `GeometryCollectionField`

## フォームウィジェット

GeoDjango のフォームウィジェットを使うと、ビジュアルマップ上に地理情報を表示したり編集したりできます。現在利用可能なウィジェットはどれも 3D ジオメトリをサポートしていないので、 ジオメトリフィールドは `Textarea` ウィジェットを使ってフォールバックします。

### ウィジェットの属性

GeoDjango ウィジェットはテンプレートベースなので、その属性のほとんどは他の Django ウィジェットの属性と異なります。

`BaseGeometryWidget.``geom_type`

  OpenGIS ジオメトリタイプ。通常、フォームフィールドによって設定されます。

`BaseGeometryWidget.``map_height`

`BaseGeometryWidget.``map_width`

  ウィジェットマップの高さと幅 (デフォルトは400x600)。

  バージョン 4.2 で非推奨: `map_height` 属性と `map_width` 属性は非推奨となりました。代わりに、マップウィジェットのサイズ指定にはCSSを使用してください。

`BaseGeometryWidget.``map_srid`

  地図で使用されるSRIDコード (デフォルトは4326)。

`BaseGeometryWidget.``display_raw`

  主にデバッグのために、現在のジオメトリのシリアライズされた表現を示すテキストエリア入力を表示するかどうかを指定するブール値 (デフォルトは `False`).

`BaseGeometryWidget.``supports_3d`

  ウィジェットが3Dデータの編集をサポートしているかどうかを示します (デフォルトは `False` です) 。

`BaseGeometryWidget.``template_name`

  地図ウィジェットのレンダリングに使用されるテンプレート。

ウィジェットの属性は、他のDjangoウィジェットと同じように渡すことができます。例えば、次のようにします:

    from django.contrib.gis import forms

    class MyGeoForm(forms.Form):
        point = forms.PointField(widget=forms.OSMWidget(attrs={"display_raw": True}))

### Widget クラス

`BaseGeometryWidget`

class `BaseGeometryWidget`

  これは、サブクラスが必要とするロジックを含む抽象ベースウィジェットです。このウィジェットを直接ジオメトリフィールドに使うことはできません。GeoDjango ウィジェットのレンダリングは `template_name` クラス属性で識別されるテンプレートに基づいていることに注意してください。

`OpenLayersWidget`

class `OpenLayersWidget`

  これはすべての GeoDjango フォームフィールドで使用されるデフォルトウィジェットです。`template_name` は `gis/openlayers.html` です。

  `OpenLayersWidget` と `OSMWidget` は `cdn.jsdelivr.net` のコンテンツ配信ネットワークでホストされている `ol.js` ファイルを使用します。これらのウィジェットをサブクラス化することで、内部の `Media` クラスの `js` プロパティに `ol.js` ファイルの独自のバージョンを指定できます (定数として定義されたアセット を参照) 。

`OSMWidget`

class `OSMWidget`

  このウィジェットは地理情報オブジェクトを表示するためにOpenStreetMapベースレイヤーを使用します。属性は以下の通りです:

  `template_name`

    `gis/openlayers-osm.html`

  `default_lat`
  `default_lon`

    デフォルトの中心緯度と経度はそれぞれ `47` と `5` で、フランス東部の位置です。

  `default_zoom`

    デフォルトの地図の縮尺は `12` です。

  `OpenLayersWidget` の JavaScript ファイルのホスティングに関する注意はここにも適用されます。マップタイルへの `https` アクセスに関する FAQ answer も参照してください。