Visão geral
Neste guia, você pode aprender como utilizar o Backend do Django MongoDB para armazenar dados geoespaciais. Django MongoDB Backend suporta o framework da webGeoDjango do do Django, que permite a você trabalhar com dados geoespaciais em seus aplicativos Django.
Importante
Limitações do GeoDjango
O suporte GeoDjango do MongoDB Backend do Django tem várias limitações. Para visualizar uma lista de limitações, consulte Contrib App Support no guia Django and MongoDB Feature Compatibilidade.
Dica
Para usar os exemplos deste guia, verifique se você tem um aplicação Django que usa o Django MongoDB Backend e acessa os conjuntos de dados de amostra do Atlas. Para saber como configurar seu aplicação, consulte o tutorial de Introdução.
Configurar GeoDjango
Antes de poder usar o Django MongoDB Backend para modelar dados geoespaciais, você deve configurar seu projeto Django para usar o GeoDjango.
Para usar o GeoDjango, execute as seguintes etapas:
Criar um modelo GeoDjango
Para armazenar dados geoespaciais em seus modelos, adicione a seguinte declaração de importação ao arquivo models.py
do seu projeto:
from django.contrib.gis.db import models
Importante
Se você utilizar a instrução de importação from django.db import models
em seu arquivo models.py
, certifique-se de substituí-lo pela instrução de importação anterior antes de definir campos GeoDjango.
Então, você pode utilizar os campos GeoDjango para definir campos geoespaciais em suas classes de modelo. O MongoDB armazena cada tipo de campo como um objeto GeoJSON
em seus documentos de coleção. O Django MongoDB Backend cria automaticamente 2dsphere
índices nesses campos, o que permite executar queries geoespaciais.
Dica
Para saber como executar queries de dados geoespaciais usando o método raw_aggregate()
, consulte Consultar dados geoespaciais no guia Executar queries de banco de dados brutos.
A tabela a seguir lista os campos GeoDjango suportados e seus tipos de objeto MongoDB GeoJSON
correspondentes:
Campo GeoDjango | GeoJSON Tipo |
---|---|
| |
| |
| |
| |
| |
| |
|
Dica
Para saber mais sobre os campos GeoDjango, consulte Tipos de campos espaciais na documentação do Django.
Exemplo de modelo
Este exemplo define os modelos Theater
e Geo
para representar a collection sample_mflix.theaters
a partir dos conjuntos de dados de amostra do Atlas.
No MongoDB, o campo location
desta coleção de amostras armazena um objeto Point
que representa a localização geográfica do teatro. Cada campo armazena os seguintes dados:
{ "location": { "address": { "street": "<street name>", "city": "<city name>", "state": "<state name>", "zip": "<zip code>" }, "geo": { "type": "Point", "coordinates": [<longitude>, <latitude>] } } }
Você pode utilizar o Backend do Django MongoDB para armazenar estes dados criando os seguintes modelos no arquivo models.py
do seu projeto:
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
No código anterior, o modelo Theater
tem um campo location
que armazena um modelo Location
incorporado. O modelo embarcado contém um PointField
chamado geo
que armazena dados de localização.
Informações adicionais
Para saber mais sobre os modelos GeoDjango, consulte API do Modelo GeoDjango na documentação do Django.
Para saber mais sobre como armazenar dados geoespaciais no MongoDB, consulte Dados geoespaciais na documentação do MongoDB Server.