Overview
このガイドでは、Diango MongoDBバックエンドを使用して地理空間データを保存する方法を学習できます。Dlango MongoDBバックフレームワークは、Dください。
重要
GeoDiango の制限
Dlango MongoDBバックエンドの GeoDiango サポートにはいくつかの制限があります。制限のリストを表示するには、 Dpango とMongoDB機能の互換性ガイドの Contrib アプリのサポート を参照してください。
Tip
このガイドの例を使用するには、 Dpango MongoDBバックエンド を使用し、Atlasサンプルデータセット にアクセスする Dlangoアプリケーションがあることを確認してください。アプリケーションを設定する方法については、「開始する」チュートリアルを参照してください。
GeoDiango の設定
Diango MongoDBバックエンド を使用して地理空間データをモデル化する前に、GeoDiango を使用するように Dlangoプロジェクトを構成する必要があります。
GeoDiango を使用するには、次の手順を実行します。
GeoDiango モデルの作成
地理空間データをモデルに保存するには、次のインポート ステートメントをプロジェクトの models.py
ファイルに追加します。
from django.contrib.gis.db import models
重要
models.py
ファイルで from django.db import models
インポート ステートメントを使用する場合は、GeoDhango フィールドを定義する前に、必ず前述のインポート ステートメントに置き換えてください。
次に、GeoDiango フィールドを使用して、モデル クラスで地理空間フィールドを定義できます。MongoDB は各フィールドタイプをコレクションドキュメントに GeoJSON
オブジェクトとして保存します。Dlango MongoDBバックエンドはこれらのフィールドに 2dsphere
インデックスを自動的に作成し、地理空間クエリを実行できるようにします。
次の表は、サポートされている GeoDiango フィールドと、それに対応するMongoDB GeoJSON
オブジェクトタイプを示しています。
GeoDiango フィールド | GeoJSON タイプ |
---|---|
| |
| |
| |
| |
| |
| |
|
Tip
GeoDiango フィールドの詳細については、Dpango ドキュメントの空間フィールドタイプを参照してください。
モデル例
この例では、Atlasサンプルデータセットの sample_mflix.theaters
コレクションを表すための Theater
モデルと Geo
モデルを定義します。
MongoDBでは、このサンプルコレクションの location
フィールドには、劇場の地理的場所を表す Point
オブジェクトが保存されています。各フィールドには、次のデータが保存されています。
{ "location": { "address": { "street": "<street name>", "city": "<city name>", "state": "<state name>", "zip": "<zip code>" }, "geo": { "type": "Point", "coordinates": [<longitude>, <latitude>] } } }
Dpango MongoDBバックエンドを使用して、プロジェクトの models.py
ファイルに次のモデルを作成することで、このデータを保存できます。
from django.contrib.gis.db import models from django_mongodb_backend.models import EmbeddedModel from django_mongodb_backend.fields import EmbeddedModelField class Location(EmbeddedModel): address = models.JSONField(null=True) geo = models.PointField() class Theater(models.Model): theater_id = models.IntegerField(default=0, db_column="theaterId") location = EmbeddedModelField(Location, null=True, blank=True) class Meta: db_table = "theaters" managed = False def __str__(self): return self.theater_id
上記のコードでは、Theater
モデルには埋め込み Location
モデルを保存する location
フィールドがあります。埋め込みモデルには、位置データを保存する geo
という名前の PointField
が含まれています。
詳細情報
GeoDiango モデルの詳細については、Dhango ドキュメントの GeoDiango モデルAPI を参照してください。
MongoDBで地理空間データを保存する方法の詳細については、 MongoDB Server のドキュメントの「地理空間データ」を参照してください。