Overview
En esta guía, puedes aprender a usar el backend de Django MongoDB para almacenar datos geoespaciales. El backend Django MongoDB soporta la solución de 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 utilizar los ejemplos de esta guía, asegúrate de tener una aplicación Django que utilice Django MongoDB Backend y acceda a los conjuntos de datos de muestra de Atlas. Para aprender a configurar tu aplicación, consulta el tutorial Comienza con Django MongoDB Backend.
Configurar GeoDjango
Antes de poder usar Django MongoDB Backend para modelar datos geoespaciales, debe configurar su proyecto Django para usar GeoDjango.
Para utilizar GeoDjango, completa 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 utilizas la instrucción de importación from django.db import models en tu archivo models.py, asegúrate de reemplazarla con la instrucción de importación anterior antes de definir los campos de GeoDjango.
Después, puedes utilizar campos GeoDjango para definir campos geoespaciales en tus clases de modelos. MongoDB almacena cada tipo de campo como un objeto GeoJSON en los documentos de tu colección. El Backend de Django MongoDB crea automáticamente 2dsphere índices en estos campos, lo que permite realizar queries 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>] } } }
Puedes usar el Django MongoDB Backend para almacenar estos datos, creando los siguientes modelos en el archivo models.py de tu 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. El 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 GeoDjango, consulta la API del modelo GeoDjango en la documentación de Django.
Para aprender más sobre cómo almacenar datos geoespaciales en MongoDB, consulta Datos geoespaciales en la documentación del Servidor de MongoDB.