Overview
En esta guía, aprenderá a usar Django MongoDB Backend para almacenar datos geoespaciales. Django MongoDB Backend es compatible con Django. Marco webGeoDjango, que le permite trabajar con datos geoespaciales en sus aplicaciones Django.
Importante
Limitaciones de GeoDjango
La compatibilidad con GeoDjango del backend de Django MongoDB tiene varias limitaciones. Para ver una lista de limitaciones, consulte Compatibilidad de aplicaciones Contrib en la guía de compatibilidad de funciones de Django y MongoDB.
Tip
Para usar los ejemplos de esta guía, asegúrese de tener una aplicación Django que use el backend de Django MongoDB y acceda a los conjuntos de datos de ejemplo de Atlas. Para aprender a configurar su aplicación, consulte el tutorial "Comenzar".
Configurar GeoDjango
Antes de poder usar Django MongoDB Backend para modelar datos geoespaciales, debe configurar su proyecto Django para usar GeoDjango.
Para utilizar GeoDjango, realice los siguientes pasos:
Crear un modelo GeoDjango
Para almacenar datos geoespaciales en sus modelos, agregue la siguiente declaración de importación al archivo models.py de su proyecto:
from django.contrib.gis.db import models
Importante
Si utiliza la declaración de importación from django.db import models en su archivo models.py, asegúrese de reemplazarla con la declaración de importación anterior antes de definir los campos de GeoDjango.
Luego, puede usar los campos de GeoDjango para definir campos geoespaciales en sus clases de modelo. MongoDB almacena cada tipo de campo como un objeto GeoJSON en los documentos de su colección. El backend de Django MongoDB crea automáticamente índices 2dsphere en estos campos, lo que le permite realizar consultas geoespaciales.
Tip
Para aprender a consultar datos geoespaciales mediante el raw_aggregate() método,consulte Consultar datos geoespaciales en la guía Realizar consultas de bases de datos sin procesar.
La siguiente tabla enumera los campos GeoDjango compatibles y sus tipos de objetos MongoDB GeoJSON correspondientes:
Campo GeoDjango | GeoJSON Tipo |
|---|---|
| |
| |
| |
| |
| |
| |
|
Tip
Para obtener más información sobre los campos GeoDjango, consulta Tipos de campos espaciales en la documentación de Django.
Ejemplo de modelo
Este ejemplo define los modelos Theater y Geo para representar la colección sample_mflix.theaters de los conjuntos de datos de muestra de Atlas.
En MongoDB, el campo location de esta colección de ejemplo almacena un objeto Point que representa la ubicación geográfica del teatro. Cada campo almacena los siguientes datos:
{ "location": { "address": { "street": "<street name>", "city": "<city name>", "state": "<state name>", "zip": "<zip code>" }, "geo": { "type": "Point", "coordinates": [<longitude>, <latitude>] } } }
Puede utilizar Django MongoDB Backend para almacenar estos datos creando los siguientes modelos en el archivo models.py de su proyecto:
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 str(self.theater_id)
En el código anterior, el modelo Theater tiene un campo location que almacena un modelo Location incrustado. Este modelo incrustado contiene un PointField llamado geo que almacena datos de ubicación.
Información Adicional
Para obtener más información sobre los modelos de GeoDjango, consulte la API de modelos de GeoDjango en la documentación de Django.
Para obtener más información sobre cómo almacenar datos geoespaciales en MongoDB, consulte Datos geoespaciales en la documentación del servidor MongoDB.