Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Datos geoespaciales del modelo

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.

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:

  1. Instala las librerías geoespaciales GEOS y GDAL.

  2. Navega hasta tu proyecto settings.py archivo y añade la aplicación django.contrib.gis a la configuración INSTALLED_APPS, como se muestra en el siguiente código:

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

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

PointField

LineStringField

PolygonField

MultiPointField

MultiLineStringField

MultiPolygonField

GeometryCollectionField

Tip

Para obtener más información sobre los campos GeoDjango, consulta Tipos de campos espaciales en la documentación de Django.

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.

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.

Volver

Indexes

En esta página