Atlas Searchgeoespacial
Nesta página
Para suportar queries geoespaciais, MongoDB fornece índices geoespaciais e operadores de consulta geoespacial.
Para saber mais sobre como executar queries geoespaciais, consulte Queries geoespaciais no manual do servidor.
Pré-requisitos
Você deve configurar os seguintes componentes para executar os exemplos de código neste guia:
Uma
test.restaurants
coleção preenchida com documentos dorestaurants.json
arquivo nos ativos de documentação do Github.As seguintes declarações de importação:
import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoCollection; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.client.model.geojson.*; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.Filters; import org.bson.Document;
Importante
Este guia usa implementações personalizadas de Subscriber
, que são descritas no guia Amostra de implementações personalizadas de assinantes .
Conecte-se a um MongoDB deployment
Primeiro, conecte a um MongoDB deployment e, em seguida, declare e defina as instâncias MongoDatabase
e MongoCollection
.
O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost
na porta 27017
. Em seguida, define a variável database
para fazer referência ao banco de dados test
e a variável collection
para fazer referência à coleção restaurants
:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o tutorial Conectar ao MongoDB .
Crie o índice dsphere 2
Para criar um índice 2dsphere
, utilize o auxiliar Indexes.geo2dsphere()
para criar uma especificação para o índice 2dsphere
. Passe a especificação para o método MongoCollection.createIndex()
para criar o índice.
O exemplo seguinte cria um índice 2dsphere
no campo "contact.location"
na coleção restaurants
:
MongoCollection<Document> collection = database.getCollection("restaurants"); collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintSubscriber<String>());
Query para localizações próximas a um ponto GeoJSON
O MongoDB fornece vários operadores de query geoespacial. Para facilitar a criação de filtros de consulta geoespacial, o driver fornece a classe Filters
e o pacote com.mongodb.client.model.geojson
.
O exemplo a seguir retorna documentos que estão a pelo menos 1000 metros e no máximo a 5000 metros da instância GeoJSON Point
especificada, classificados do mais próximo para o mais distante:
Point refPoint = new Point(new Position(-73.9667, 40.78)); collection.find(Filters.near("contact.location", refPoint, 5000.0, 1000.0)) .subscribe(new PrintDocumentSubscriber());