Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/

Pesquisar geoespacialmente

Nesta página

  • Visão geral
  • Formatos de dados geoespaciais
  • GeoJSON
  • Pares de coordenadas legados
  • Índices geoespaciais
  • Operadores de Consulta
  • Exemplos
  • Query por proximidade
  • Query por polígono
  • Recursos adicionais

Neste guia, você pode aprender como trabalhar com dados geoespaciais, formatos de dados, índices e queries.

Os dados geoespaciais representam uma localização geográfica na superfície da Terra.

Exemplos de dados geoespaciais incluem:

  • Localizações de cinemas

  • Fronteiras de países

  • Rotas de passeios de bicicleta

  • Áreas de exercícios para cães na cidade de Nova York

  • Pontos em um gráfico

Todos os dados geoespaciais no MongoDB são armazenados em um dos seguintes formatos:

  • GeoJSON, um formato que representa dados geoespaciais em uma esfera semelhante à Terra.

  • legacy coordinate pairs, um formato que representa dados geoespaciais em um plano euclidiano.

Utilize GeoJSON para armazenar dados que representam informações geoespaciais em uma esfera semelhante à Terra. O GeoJSON é composto por uma ou mais posições e um tipo.

Uma posição representa um único local e existe no código como uma array contendo os seguintes valores:

  • Longitude na primeira posição (obrigatório)

  • Latitude na segunda posição (obrigatório)

  • Elevação na terceira posição (opcional)

A seguir, a posição da sede do MongoDB na cidade de Nova York, NY.

GeoJson.Position(-73.986805, 40.7620853)

Alternativamente, você pode utilizar o método GeoJson.Geographic() para construir um par de coordenadas.

GeoJson.Geographic(-73.986805, 40.7620853)

Importante

Longitude e depois latitude

A GeoJSON ordena coordenadas com longitude primeiro e latitude segundo. Certifique-se de verificar qual formato qualquer outra ferramenta com a qual você está trabalhando usa, pois muitas ferramentas populares, como OpenStreetMap e Google Maps, listam coordenadas com latitude primeiro e longitude segundo.

O tipo do seu objeto GeoJSON determina a forma geométrica que representa. Formas geométricas são compostas por posições.

Aqui estão alguns tipos de GeoJSON comuns e como você pode especificá-los com posições:

  • Point: uma única posição. O seguinte Point representa a localização da sede do MongoDB:

    GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853))
  • LineString: uma matriz de duas ou mais posições que forma uma série de segmentos de linha. Um LineString pode representar um caminho, rota, borda ou quaisquer outros dados geoespaciais lineares. O LineString a seguir representa um segmento da Grande Muralha da China:

    GeoJson.LineString
    (
    GeoJson.Position(116.572, 40.430),
    GeoJson.Position(116.570, 40.434),
    GeoJson.Position(116.567, 40.436),
    GeoJson.Position(116.566, 40.441)
    )
  • Polygon: uma array de posições em que a primeira e a última posição são iguais e incluem algum espaço. O Polygon a seguir representa aproximadamente o terreno dentro da Cidade do Vaticano:

    GeoJson.Polygon
    (
    GeoJson.Position(12.446086, 41.901977),
    GeoJson.Position(12.457952, 41.901559),
    GeoJson.Position(12.455375, 41.907351),
    GeoJson.Position(12.449863, 41.905186),
    GeoJson.Position(12.446086, 41.901977)
    }

Para saber mais sobre os tipos de GeoJSON que você pode utilizar no MongoDB, consulte a entrada manual do GeoJSON.

Para mais informações sobre o formato GeoJSON, consulte a especificação oficial do IETF.

Utilize legacy coordinate pairs para armazenar dados que representam informações geoespaciais em um plano bidimensional.

legacy coordinate pairs são representados por uma array de dois valores, em que o primeiro representa o valor do eixo x e o segundo representa o valor do eixo y.

Para mais informações sobre legacy coordinate pairs, consulte a página manual do servidor MongoDB sobre legacy coordinate pairs.

Para habilitar a query em dados geoespaciais, você deve criar um índice que corresponda ao formato de dados. Os seguintes tipos de índice habilitam queries geoespaciais:

  • 2dsphere, utilizado para dados GeoJSON

  • 2d, usado para legacy coordinate pairs

Para saber mais sobre como criar índices geoespaciais, consulte a seção Índices geoespaciais do guia Índices.

Para fazer query de dados geoespaciais, utilize um dos seguintes operadores de query:

  • $near

  • $geoWithin

  • $nearSphere

  • $geoIntersects (requer um índice dsphere 2)

Ao utilizar o operador $near, você pode especificar os seguintes operadores de distância:

  • $minDistance

  • $maxDistance

Ao utilizar o operador $geoWithin, você pode especificar os seguintes operadores de forma:

  • $box

  • $polygon

  • $center

  • $centerSphere

Para mais informações sobre operadores de query geoespacial, consulte Operadores de Query Geoespacial no manual do servidor .

Os exemplos seguintes utilizam o conjunto de dados de amostra do MongoDB Atlas . Para obter este conjunto de dados de amostra, consulte Início Rápido.

Os exemplos utilizam a coleção do theaters no banco de dados do sample_mflix a partir do conjunto de dados de amostra. A coleção theaters contém um índice 2dsphere no campo location.geo.

O exemplo a seguir faz query de documentos com um valor de campo location.geo em um raio 1000 metros da sede do MongoDB na cidade de Nova York, NY. Ele retorna documentos do mais próximo para o mais distante.

// Point representation of the MongoDB Headquarters
var point = GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853));
// Specifies a maxDistance of 1000 meters and a minDistance of 0 meters
var filter = Builders<Theater>.Filter.Near(m => m.Location.Geo, point, 1000.0, 0.0);
// Only fetches the _id and theaterId fields
var projection = Builders<Theater>.Projection.Include("theaterId");
var results = collection.Find(filter).Project(projection);

Os resultados do exemplo anterior contêm os seguintes documentos:

{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 }

O exemplo a seguir faz query de documentos com um valor de campo location.geo que existe dentro dos limites de Manhattan.

// Polygon representation of Manhattan
var polygon = GeoJson.Polygon
(
GeoJson.Position(-73.925492, 40.877410),
GeoJson.Position(-73.910372, 40.872366),
GeoJson.Position(-73.935127, 40.834020),
GeoJson.Position(-73.929049, 40.798569),
GeoJson.Position(-73.976485, 40.711432),
GeoJson.Position(-74.015747, 40.701229),
GeoJson.Position(-74.018859, 40.708367),
GeoJson.Position(-74.008007, 40.754307),
GeoJson.Position(-73.925492, 40.877410)
);
var filter = Builders<Theater>.Filter.GeoWithin(m => m.Location.Geo, polygon);
// Only fetches the _id and theaterId fields
var projection = Builders<Theater>.Projection.Include("theaterId");
var results = collection.Find(filter).Project(projection);

Os resultados do exemplo anterior contêm os seguintes documentos:

{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51eccb"), "theaterId" : 835 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e744"), "theaterId" : 1028 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51ebe1"), "theaterId" : 609 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51e8ed"), "theaterId" : 1906 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51e87d"), "theaterId" : 1531 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51eb63"), "theaterId" : 482 }

Voltar

Criptografia em execução