Questo capitolo introduce la query geospaziale di MongoDB, che supporta query di intersezione geometrica e contenimento.
Scenari di applicazione:
- Disegna un cerchio sulla mappa e richiedi i dati all'interno del cerchio.
Tutorial Prerequisito
Formati di archiviazione dati geospaziali per MongoDB
I prerequisiti per interrogare i dati in base alla distanza sono i seguenti:
- Ogni dato del documento contiene un campo per l'archiviazione dei dati delle coordinate, ad esempio: il campo posizione archivia le coordinate di un negozio.
- Creare un indice spaziale 2dsphere o 2d.
Operatore $geoWithin
Viene comunemente utilizzato per interrogare punti di coordinate contenuti all'interno di un range geometrico specificato, ad esempio: quando si cercano case disegnando su una mappa, disegnare un'area sulla mappa e interrogare le case all'interno di quell'area.
Formato sintass:
{
<campo posizione>: { // Campo di interrogazione
$geoWithin: {
$geometry: {
type: , // Supporta solo Poligono o Multipoligono.
coordinates: [ <coordinate> ] // Raccolta di punti di coordinate geometriche
}
}
}
}
Esempio:
db.luoghi.find(
{
loc: { // Il campo loc memorizza i dati delle coordinate
$geoWithin: {
$geometry: {
type: "Poligono" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Trova dati all'interno di questa area geometrica
}
}
}
}
)
Interroga i dati del documento all'interno dell'area geometrica specificata nella raccolta di luoghi.
Operatore $geoIntersects
La differenza rispetto a $geoWithin è che $geoIntersects viene utilizzato per determinare se c'è un'intersezione tra due geometrie.
Formato:
{
<campo posizione>: { // Campo che memorizza punti di coordinate geometriche
$geoIntersects: {
$geometry: {
type: "<tipo oggetto geojson>" , // Tipo geometrico
coordinates: [ <coordinate> ] // Raccolta di punti di coordinate geometriche, interrogare dati con intersezione con questa geometria
}
}
}
}
Esempio:
db.luoghi.find(
{
loc: { // Il campo loc memorizza i dati dell'area, che è una forma geometrica
$geoIntersects: {
$geometry: {
type: "Poligono" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Interrogare i dati con intersezione con questa geometria
]
}
}
}
}
)