Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los datos geoespaciales ahora se pueden almacenar y consultar mediante Azure DocumentDB. Esta mejora proporciona herramientas eficaces para administrar y analizar datos espaciales, lo que permite una amplia gama de aplicaciones, como el seguimiento de ubicaciones en tiempo real, la optimización de rutas y el análisis espacial.
Esta es una introducción rápida de los comandos y operadores geoespaciales que ahora se admiten:
Operadores de consulta geoespacial
$geoIntersects
Selecciona documentos en los que una geometría especificada se interseca con la geometría de los documentos. Resulta útil para buscar documentos que comparten cualquier parte del espacio con una geometría determinada.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
Selecciona documentos con datos geoespaciales que existen completamente dentro de una forma especificada. Este operador se usa para buscar documentos dentro de un área definida.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
Define un área rectangular con dos pares de coordenadas (esquinas inferior izquierda y superior derecha). Se usa con el $geoWithin operador para buscar documentos dentro de este rectángulo. Por ejemplo, buscar todas las ubicaciones dentro de una región rectangular en un mapa.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
Define un área circular mediante un punto central y un radio en radianes. Se usa con el $geoWithin operador para buscar documentos dentro de este círculo.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
De forma similar a $center, pero define un área esférica mediante un punto central y un radio en radianes. Útil para los cálculos de geometría esférica.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
Especifica un objeto GeoJSON para definir una geometría. Se usa con operadores geoespaciales para realizar consultas basadas en formas complejas.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
Especifica la distancia máxima desde un punto para una consulta geoespacial. Se usa con $near operadores y $nearSphere . Por ejemplo, buscar todas las ubicaciones dentro de 2 km de un punto determinado.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
Especifica la distancia mínima desde un punto para una consulta geoespacial. Se usa con $near operadores y $nearSphere .
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
Define un polígono mediante una matriz de pares de coordenadas. Se usa con el $geoWithin operador para buscar documentos dentro de este polígono.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
Busca documentos que están cerca de un punto especificado. Devuelve documentos ordenados por distancia desde el punto. Por ejemplo, buscar los restaurantes más cercanos a la ubicación de un usuario.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
Similar a $near, pero realiza cálculos en una superficie esférica. Útil para cálculos de distancia más precisos en la superficie de la Tierra.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
Fase de agregación geoespacial
$geoNear
Realiza una consulta geoespacial para devolver documentos ordenados por distancia desde un punto especificado. Puede incluir criterios de consulta adicionales e información de distancia de retorno.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
Consideraciones y funcionalidades no admitidas
Actualmente, no se admite la consulta con un polígono GeoJSON de un solo anillo cuyo área supere un solo hemisferio. En tales casos, Azure DocumentDB devuelve el siguiente mensaje de error:
Error: Custom CRS for big polygon is not supported yet.No se permite un índice compuesto mediante un índice normal y un índice geoespacial. Por ejemplo:
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yetActualmente, los polígonos con agujeros no se admiten para su uso con consultas de $geoWithin. Aunque la inserción de un polígono con agujeros no está restringida, finalmente se produce un error con el siguiente mensaje de error:
Error: $geoWithin currently doesn't support polygons with holesEl campo de clave siempre es necesario en la fase de agregación de $geoNear. Si falta el campo de clave, se produce el siguiente error:
Error: $geoNear requires a 'key' option as a StringLas
$geoNearfases ,$neary$nearSphereno tienen requisitos de índice estrictos, por lo que estas consultas no generarían errores si falta un índice.
Contenido relacionado
- Obtenga más información sobre la compatibilidad del lenguaje de consulta (MQL) de MongoDB con MongoDB.
- Revise las opciones para migrar de MongoDB a Azure DocumentDB.