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 GeoDjango un marco web que te permite trabajar con datos geoespaciales en tus aplicaciones Django.
Importante
Limitaciones de GeoDjango
El soporte de GeoDjango del Backend Django MongoDB tiene varias limitaciones. Para ver una lista de limitaciones, consulte Soporte de Contrib aplicación en la Guía de compatibilidad de características 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 que puedas usar Django MongoDB Backend para modelar datos geoespaciales, debes configurar tu proyecto Django para usar GeoDjango.
Para utilizar GeoDjango, completa los siguientes pasos:
Crear un modelo GeoDjango
Para almacenar datos geoespaciales en tus modelos, agrega la siguiente instrucción de importación al archivo models.py de tu 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 utilizando el método raw_aggregate(), consulte Consulta de datos geoespaciales en la guía Realizar consultas a bases de datos sin procesamiento previo.
La siguiente tabla enumera los campos compatibles de GeoDjango y sus correspondientes tipos de objeto Realm GeoJSON de MongoDB:
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 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.