Questo capitolo introduce come MongoDB memorizza i dati geospaziali. Per utilizzare la funzionalità di interrogazione geospaziale di MongoDB, è necessario prima capire come memorizzare i dati geospaziali.

I dati geospaziali consistono principalmente di punti, linee e forme geometriche.

Un punto sulla mappa è definito dalle sue coordinate di longitudine e latitudine. Diversi punti formano una linea e diverse linee possono formare varie forme.

Nelle applicazioni pratiche: La posizione di un negozio, "Dove mi trovo?", e "Dove si trova la scuola?" possono essere tutti rappresentati utilizzando coordinate. Descrivere l'estensione di un campus o di un centro commerciale richiede forme geometriche.

Oggetto GeoJSON

MongoDB utilizza oggetti GeoJSON per rappresentare le informazioni geospaziali.

I tipi comuni di GeoJSON includono:

  • Point - rappresenta un punto di coordinate
  • LineString - rappresenta una linea
  • Polygon - rappresenta un poligono

Il formato per memorizzare gli oggetti GeoJSON nei campi di MongoDB è il seguente:

<campo>: { type: <tipo geojson>, coordinates: <coordinate> }

Spiegazione:

  • - Nome del campo
  • type - Tipo GeoJSON
  • coordinates - Un array di punti di coordinate. Il formato varia per i diversi tipi di GeoJSON.

Esempio:

posizione: {
      type: "Point",  // tipo di dato geospaziale, in questo caso, è un punto di coordinate
      coordinates: [-73.856077, 40.848447] // longitudine, latitudine
}

Spiegazione: Il campo di posizione memorizza dati geospaziali di tipo punto di coordinate.

Punto di Coordinate (Point)

Formato:

{ type: "Point", coordinates: [ longitudine, latitudine ] }

Esempio:

{ type: "Point", coordinates: [ 40, 5 ] }

Linea (LineString)

Formato:

{ type: "LineString", coordinates: [ punto1, punto2, ...] }

Esempio:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

Poligono

Può essere composto da una o più linee. Formato:

{
  type: "Polygon",
  coordinates: [ 
		linea1,
		linea2,
		....
	]
}

Nota: Le coordinate di inizio e fine di ciascun segmento di linea devono essere uguali per formare una forma chiusa.

Forma Composta da un Singolo Segmento di Linea

{
  type: "Polygon",
  coordinates: [
  		[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] // Punti di coordinate del segmento di linea, nota che la prima e l'ultima coordinata sono uguali.
	]
}

Forma Composta da Più Segmenti di Linea

{
  type : "Polygon",
  coordinates : [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // Segmento di linea 1
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]  // Segmento di linea 2
  ]
}

Indice Geospaziale

MongoDB supporta due tipi di indici geospaziali per velocizzare l'interrogazione dei dati GeoJSON.

2dsphere

Questo è un tipo di indice di geometria sferica, il che significa che quando si calcola la distanza tra due punti, 2dsphere considera la terra come una sfera.

Esempio di creazione di un indice 2dsphere:

db.collezione.createIndex( { posizione : "2dsphere" } )

Crea un indice per il campo posizione.

2d

Il 2D è un tipo di geometria planare utilizzata per calcolare la distanza tra due punti come se fossero su un piano. Esempio di creazione di un indice 2D:

db.collezione.createIndex( { posizione : "2d" } )

Ciò crea un indice per il campo posizione.

Tipi di Query Geospaziale

Le interrogazioni geospaziali sono tutte correlate a calcoli geometrici. Di seguito sono riportati i tipi di interrogazione supportati da MongoDB:

  • $geoIntersects - Utilizzato per corrispondere a documenti con un'intersezione specifica di forme geometriche.
  • $geoWithin - Corrisponde ai documenti contenuti all'interno di una determinata area geometrica.
  • $near - Tipicamente utilizzato per interrogare i documenti più vicini a un punto di coordinate specificato.

Nota: Per ulteriori informazioni sulle interrogazioni geospaziali, fare riferimento ai capitoli seguenti.