Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Django MongoDB后端
/

对地理空间数据进行建模

在本指南中,您可以学习;了解如何使用 Django MongoDB后端来存储地理空间数据。Django MongoDB后端支持 Django 的 GeoDjango Web框架,该框架允许您在 Django 应用程序中处理地理空间数据。

重要

GeoDjango 限制

Django MongoDB后端的 GeoDjango支持有一些限制。要查看限制列表,请参阅 Django 和MongoDB功能兼容性指南中的 Contrib App 支持

提示

要使用本指南中的示例,请确保您有一个使用 Django MongoDB 后端并访问 Atlas 示例数据集 的 Django 应用程序。要学习;了解如何设立应用程序,请参阅入门教程

在使用 Django MongoDB后端对地理空间数据进行建模之前,必须将 Django项目配置为使用 GeoDjango。

要使用 GeoDjango,请执行以下步骤:

  1. 安装 GEOSGDAL 地理空间空间库。

  2. 导航到项目的 settings.py文件,并将 django.contrib.gis应用添加到 INSTALLED_APPS 设置中,如以下代码所示:

    INSTALLED_APPS = [
    "django.contrib.gis",
    # ... Other installed apps
    ]

要将地理空间数据存储在模型中,请将以下导入声明添加到项目的 models.py文件中:

from django.contrib.gis.db import models

重要

如果在 models.py文件中使用 from django.db import models 导入声明,请确保在定义 GeoDjango 字段之前将其替换为前面的导入声明。

然后,您可以使用 GeoDjango 字段在模型类中定义地理空间空间字段。MongoDB将每个字段类型存储为集合文档中的 GeoJSON对象。Django MongoDB后端会自动在这些字段上创建 2dsphere 索引,从而允许您执行地理空间查询。

提示

要学习;了解如何使用 raw_aggregate() 方法查询地理空间数据,请参阅《执行原始数据库查询》指南中的“查询地理空间数据”

下表列出了支持的 GeoDjango 字段及其相应的MongoDB GeoJSON对象类型:

GeoDjango 字段
GeoJSON 类型

PointField

LineStringField

PolygonField

MultiPointField

MultiLineStringField

MultiPolygonField

GeometryCollectionField

提示

要学习;了解有关 GeoDjango 字段的更多信息,请参阅 Django 文档中的空间字段类型。

此示例定义了 TheaterGeo 模型来表示Atlas示例数据集中的 sample_mflix.theaters集合。

在MongoDB中,此示例集合的 location字段存储一个表示剧院位置的Point对象。每个字段存储以下数据:

{
"location": {
"address": {
"street": "<street name>",
"city": "<city name>",
"state": "<state name>",
"zip": "<zip code>"
},
"geo": {
"type": "Point",
"coordinates": [<longitude>, <latitude>]
}
}
}

您可以通过在项目的 models.py文件中创建以下模型,使用 Django MongoDB后端来存储此数据:

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字段。嵌入式模型包含一个名为 geoPointField,用于存储位置数据。

要学习;了解有关 GeoDjango 模型的更多信息,请参阅 Django 文档中的 GeoDjango 模型API

要学习;了解有关在MongoDB中存储地理空间数据的更多信息,请参阅MongoDB Server文档中的地理空间数据

后退

创建模型

在此页面上