Cómo implementar funciones geoespaciales de MongoDB

Como Implementar Funciones Geoespaciales De Mongodb



La característica geoespacial de MongoDB proporciona una forma sencilla de almacenar datos geográficos en una base de datos. Básicamente, podemos almacenar los datos geoespaciales en MongoDB como objetos GeoJSON. GeoJSON es un formato gratuito y de código abierto que depende de la notación de objetos JavaScript con datos geográficos simples. Esta funcionalidad es importante para aplicaciones que requieren servicios basados ​​en la ubicación, como el proceso de mapeo, la búsqueda de ubicación y otros. Este artículo cubre la característica geoespacial con la implementación de ejemplo.

Agregar documentos a la colección de características geoespaciales

Para demostrar la funcionalidad de la característica geoespacial de MongoDB, necesitamos los documentos para la colección específica. Insertamos algunos documentos en la colección del “área” como se muestra a continuación:

db.area.insertMany( [
   {
nombre: 'Parque Infantil' ,
Tipo de ubicacion: 'Punto' , coordenadas: [ - 60.97 , 30.77 ] },
categoría: 'Jardín'
   },
   {
nombre: 'Área de estudiantes' ,
Tipo de ubicacion: 'Punto' , coordenadas: [ - 60.9928 , 30.7193 ] },
categoría: 'Jardín'
   },
   {
nombre: 'Campo de fútbol' ,
Tipo de ubicacion: 'Punto' , coordenadas: [ - 60.9375 , 30.8303 ] },
categoría: 'Estadio'
   }
] )

Disponemos de documentos que contienen los datos de ubicación como coordenadas. Además, creamos un índice geoespacial en el campo para optimizar el rendimiento de las consultas geoespaciales.









Ejemplo 1: uso del operador de consulta $geoIntersects

Primero, tenemos el operador $geoIntersects de la característica geoespacial que se cruza con el objeto proporcionado. Considere la siguiente implementación del operador $geoIntersects:



db.area.find({ ubicación: { $geoIntersects: { $geometría: { tipo: 'Punto' ,

coordenadas: [ - 60.97 , 30.77 ] } } } })

En el ejemplo, llamamos a la colección 'área' junto con la operación 'buscar'. Al método find(), le pasamos los conjuntos de campos de “ubicación” al operador de consulta $geoIntersects de la característica geoespacial. Esto se utiliza para comprobar si el punto especificado se cruza con la geometría almacenada en el campo de geometría.





Luego, el operador $geoIntesects toma el operador $geometry donde el campo de tipo se establece con el valor 'Punto' y el campo de coordenadas se proporciona con los valores de 'coordenadas'. Aquí, la $geometría se define para la comparación geoespacial.

El siguiente resultado es donde se recupera el documento esperado y donde el campo de geometría contiene un objeto geométrico que se cruza con el punto especificado:



Ejemplo 2: uso del operador de consulta $near

El operador $near es también la característica geoespacial que se utiliza para realizar consultas geoespaciales para identificar los documentos que están geográficamente cerca de un lugar determinado. Recupera los documentos que están ordenados según su proximidad a la ubicación especificada. Aquí proporcionamos la implementación del operador $near:

db.área.find(
   {
ubicación:
{ $cerca de :
          {
$geometría: { tipo: 'Punto' ,  coordenadas: [ - 60.9667 , 30.78 ] },
$minDistancia: 1000 ,
$distanciamax: 5000
          }
       }
   }
)

En el ejemplo, definimos el campo 'ubicación' de la colección 'área' dentro de la operación 'buscar'. Luego, configuramos el operador de consulta $near de la característica geoespacial en ese campo de 'ubicación'. El operador $near busca el punto cercano con el punto de coordenadas dado. A continuación, utilizamos los parámetros $minDistance y $maxDistance en el operador $near, que cuentan con ciertos valores para recuperar los documentos dentro del rango de distancia especificado desde el punto dado.

El documento se recupera en la salida que está cerca de las ubicaciones o puntos de interés especificados en una colección de 'área' geoespacial:

Ejemplo 3: uso del operador de consulta $nearsphere

Alternativamente, tenemos el operador $nearsphere que es similar al operador $near, pero $nearSphere tiene en cuenta la forma esférica de la Tierra al calcular las distancias.

db.área.find(
   {
ubicación: {
$cerca de la esfera: {
$geometría: {
tipo : 'Punto' ,
coordenadas : [ - 60.9667 , 30.78 ]
           },
$minDistancia: 1000 ,
$distanciamax: 5000
        }
     }
   }
)

En el ejemplo, utilizamos el operador $nearsphere de la consulta geoespacial. El operador $nearspehere aquí busca el documento cuyos puntos más cercanos están cerca de los puntos especificados en la consulta, y los puntos se establecen en la matriz del campo de coordenadas.

Después de eso, refinamos los resultados estableciendo los parámetros $minDistance y $maxDistance. El parámetro $minDistance garantiza que los documentos devueltos estén al menos a 1000 metros de distancia del punto especificado, mientras que el parámetro $maxDistance limita los resultados a las ubicaciones que no están a más de 5000 metros de distancia.

El documento se muestra en la salida con una ubicación dentro de un metro específico desde el punto con las coordenadas dadas:

Ejemplo 4: uso del operador de consulta $geoWithin

A continuación, tenemos el operador $geoWithin en MongoDB que se utiliza para consultas geoespaciales para encontrar documentos que estén completamente dentro de una forma específica, como un círculo. Hagamos la siguiente demostración de la consulta $geoWithin:

db.area.find({ubicación:

{ $geoDentro de:

{ $centroEsfera: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

En el ejemplo, usamos el operador $geoWithin para encontrar los documentos de la colección 'área' dentro de un área circular determinada en una esfera 2D. Para esto, especificamos el operador $centerSphere dentro del operador $geoWithin que toma los dos argumentos como el punto central, que probablemente representa el punto de coordenadas aquí, y el radio del círculo que representa el valor de la distancia en millas.

El documento resultante se recupera a continuación, que representa un punto geoespacial que cae dentro del círculo definido por el punto central dado y el radio de aproximadamente 3 millas:

Ejemplo 5: uso del operador de consulta $geoNear

Además, el operador $geoNear también es un operador geoespacial que se utiliza para el canal de agregación. Realiza una consulta geoespacial y devuelve los documentos ordenados por su proximidad a un punto específico. Aquí, hemos proporcionado el operador $geoNear que se llama dentro del canal de agregación.

db.área.aggregate([
   {
$geoCerca de: {
cerca de: { tipo: 'Punto' , coordenadas: [ - 60.99279 , 30.719296 ] },
distanciaCampo: 'dist.calculada' ,
distancia maxima: 2 ,
consulta: {categoría: 'Jardín' },
incluirLocs: 'ubicación.dist' ,
esférico: verdadero
     }
   }
])

En el ejemplo, llamamos al método agregado de MongoDB y definimos el operador $geoNear dentro de él. El operador $geoNear está configurado con varios parámetros para especificar el comportamiento de la consulta. Primero, configuramos el parámetro 'cerca' que proporciona los valores de 'coordenadas' como punto de referencia para buscar.

Luego, utilizamos el parámetro 'distanceField' para especificar el campo proporcionado como campo de resultado. Este campo de resultado establecido almacena la distancia entre cada documento y el punto de referencia. A continuación, definimos el parámetro “maxDistance” con el valor de “2″ que representa la distancia máxima en metros.

Luego tenemos el parámetro “consulta” que filtra los documentos por el campo “categoría” y solo considera los documentos donde la “categoría” es “Parques”. Luego llamamos al parámetro 'includeLocs' para que contenga la información de ubicación. Finalmente especificamos el parámetro 'esférico' con el valor 'verdadero' que calcula las distancias utilizando un sistema de coordenadas esféricas 2D.

La canalización de agregación representa el documento en la salida que muestra la información frente al parámetro en consecuencia. El siguiente campo “dist.calculado” muestra la distancia de cada documento desde el punto de referencia:

Conclusión

Llegamos a saber que las capacidades geoespaciales de MongoDB nos ayudan a manejar y consultar de manera eficiente la información basada en la ubicación. Aprendimos la implementación de la característica geoespacial utilizando sus diversos operadores con el programa de ejemplo. Disponemos de muchas más funcionalidades y métodos que también son beneficiosos para una amplia gama de aplicaciones.