DEV Community

Cover image for Introdução aos Dados Geoespaciais no MongoDB
Prof. Ms. Ricardo Leme
Prof. Ms. Ricardo Leme

Posted on

Introdução aos Dados Geoespaciais no MongoDB

Os dados geoespaciais no MongoDB referem-se a informações associadas a locais específicos na superfície da Terra. Esse tipo de dado é comumente representado usando o formato GeoJSON, que suporta várias geometrias, como pontos, linhas e polígonos. O MongoDB fornece recursos dedicados para trabalhar com dados geoespaciais, permitindo o armazenamento eficiente, recuperação e análise de informações relacionadas à localização.

Quando devo utilizar?

  1. Aplicações Baseadas em Localização: Os dados geoespaciais no MongoDB são especialmente úteis para aplicações que dependem de informações de localização, como serviços de mapas, pesquisas baseadas em localização e geofencing. Armazenar e consultar dados geoespaciais permite a construção de aplicativos que oferecem recursos sensíveis à localização.
  2. Pesquisas por Proximidade: Quando você precisa encontrar locais próximos a um ponto específico, dados geoespaciais são úteis. Isso é benéfico para aplicativos como localizadores de lojas, buscadores de restaurantes ou qualquer serviço que envolva recomendações com base na proximidade.
  3. Análise Espacial: Se sua aplicação envolve a análise de relacionamentos e padrões em dados espaciais, as capacidades geoespaciais do MongoDB podem ajudar. Por exemplo, você pode analisar a distribuição de pontos, identificar clusters ou realizar cálculos espaciais.
  4. Geofencing: Geofencing envolve definir limites virtuais no mundo real e acionar ações quando um dispositivo entra ou sai desses limites. Os dados geoespaciais no MongoDB permitem a implementação eficiente de lógica de geofencing.
  5. Otimização de Rotas: Para aplicativos que exigem planejamento ou otimização de rotas, dados geoespaciais podem ser usados para representar e consultar caminhos, ajudando a encontrar as rotas mais eficientes entre locais.

Inserindo Dados Geoespaciais

Para inserir dados geoespaciais, você pode usar o tipo de dado GeoJSON e o índice espacial 2dsphere. Aqui está um exemplo de inserção de um ponto:

  db.locations.insert({
  name: "Centro da Cidade",
  location: {
    type: "Point",
    coordinates: [longitude, latitude]
  }
});
Enter fullscreen mode Exit fullscreen mode

Consulta Básica de Proximidade:

Para encontrar locais próximos a uma coordenada específica, você pode usar o operador $nearSphere:

db.locations.find({
  location: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [longitude, latitude]
      },
      $maxDistance: 1000 // Distância máxima em metros
    }
  }
});
Enter fullscreen mode Exit fullscreen mode

Consulta com Polígonos:

Você também pode realizar consultas dentro de áreas definidas usando polígonos. Vamos realizar uma consulta para encontrar todos os locais dentro de um polígono específico. Suponha que o polígono seja definido pelas seguintes coordenadas:

const poligono = [
  [-43.200, -22.920],
  [-43.200, -22.900],
  [-43.180, -22.900],
  [-43.180, -22.920],
  [-43.200, -22.920]
];

Enter fullscreen mode Exit fullscreen mode

A consulta no MongoDB ficará assim:

db.locations.find({
  location: {
    $geoWithin: {
      $geometry: {
        type: "Polygon",
        coordinates: [poligono]
      }
    }
  }
});
Enter fullscreen mode Exit fullscreen mode

Consulta com LineString

A consulta LineString no MongoDB é uma operação que permite encontrar documentos em uma coleção cujos dados geoespaciais, representados como trajetos contínuos (linhas), intersectam com uma linha específica. É útil para identificar, por exemplo, trajetos que passam por uma determinada rota ou área.

Para realizar essa consulta, utiliza-se o operador $geoIntersects em combinação com o tipo de dado LineString e as coordenadas da linha desejada no formato GeoJSON. Essa funcionalidade é valiosa em aplicações que envolvem análise de trajetos, rotas ou qualquer cenário onde a interseção de linhas geoespaciais seja relevante.

Exemplo prático de uso do LineString

Suponha que você tenha uma coleção chamada "rotas" que armazena informações sobre diferentes trajetos, cada um representado por um documento com um campo "path" no formato GeoJSON. Vamos criar um exemplo inserindo alguns dados e realizar uma consulta para encontrar rotas que intersectam com uma linha específica.

Inserindo dados de exemplo

Vamos inserir alguns dados de exemplo, representando as rotas:

db.rotas.insert({
  nome: "Rota A",
  path: {
    type: "LineString",
    coordinates: [
      [-43.200, -22.910],
      [-43.190, -22.905],
      [-43.180, -22.900]
    ]
  }
});

db.rotas.insert({
  nome: "Rota B",
  path: {
    type: "LineString",
    coordinates: [
      [-43.185, -22.915],
      [-43.175, -22.910],
      [-43.165, -22.905]
    ]
  }
});

// Insira outras rotas conforme necessário
Enter fullscreen mode Exit fullscreen mode

Efetuando a consulta com LineString

Agora, vamos realizar uma consulta para encontrar rotas que intersectam com uma linha específica. Suponha que a linha seja definida pelas seguintes coordenadas:

const linha = [
  [-43.195, -22.912],
  [-43.185, -22.907],
  [-43.175, -22.902]
];
Enter fullscreen mode Exit fullscreen mode

A consulta no MongoDB ficará assim:

db.rotas.find({
  path: {
    $geoIntersects: {
      $geometry: {
        type: "LineString",
        coordinates: linha
      }
    }
  }
});
Enter fullscreen mode Exit fullscreen mode

Resumo

Os dados geoespaciais no MongoDB são um recurso poderoso para lidar com informações baseadas em localização. Eles são benéficos em cenários nos quais compreender e utilizar relacionamentos espaciais aprimoram a funcionalidade e eficiência do seu aplicativo.

Top comments (0)