DocumentDB SQL - Funzione spaziale

DocumentDB supporta anche le funzioni integrate di Open Geospatial Consortium (OGC) per le query geospaziali. Di seguito è riportato un elenco di funzioni spaziali supportate incorporate.

S.No. Descrizione della funzione
1

ST_DISTANCE (point_expr, point_expr)

Restituisce la distanza tra le due espressioni di punti GeoJSON.

2

ST_WITHIN (point_expr, polygon_expr)

Restituisce un'espressione booleana che indica se il punto GeoJSON specificato nel primo argomento si trova all'interno del poligono GeoJSON nel secondo argomento.

3

ST_ISVALID

Restituisce un valore booleano che indica se il punto GeoJSON specificato o l'espressione poligonale è valido.

4

ST_ISVALIDDETAILED

Restituisce un valore JSON contenente un valore booleano se il punto GeoJSON specificato o l'espressione poligonale è valido e, se non valido, il motivo come valore stringa.

In questo esempio, utilizzeremo i seguenti due documenti di università che contengono la posizione sotto forma di coordinate.

Di seguito è riportato il file Case University document.

{  
   "id": "case-university", 
   "name": "CASE: Center For Advanced Studies In Engineering", 
   "city": "Islamabad",
	
   "location": { 
      "type": "Point", 
      "coordinates": [ 
         33.7194136, 
         -73.0964862 
      ] 
   } 
}

Di seguito è riportato il file Nust University document.

{ 
   "id": "nust", 
   "name": "National University of Sciences and Technology", 
   "city": "Islamabad", 
	
   "location": { 
      "type": "Point", 
      "coordinates": [ 
         33.6455715, 
         72.9903447 
      ] 
   } 
}

Diamo un'occhiata a un altro esempio di ST_DISTANCE.

Di seguito è riportata la query che restituisce ID e nome dei documenti universitari che si trovano entro 30 km dalla posizione specificata.

SELECT u.id, u.name  
FROM Universities u 
WHERE ST_DISTANCE(u.location, {'type': 'Point', 'coordinates':[33.7, -73.0]}) < 30000

Quando la query precedente viene eseguita, produce il seguente output.

[ 
   { 
      "id": "case-university", 
      "name": "CASE: Center For Advanced Studies In Engineering" 
   } 
]

Diamo un'occhiata a un altro esempio.

La seguente è la query che contiene ST_ISVALID e ST_ISVALIDDETAILED.

SELECT  
   ST_ISVALID({ "type": "Point", "coordinates": [32.9, -132.8] }) AS Point1,
   
   ST_ISVALIDDETAILED({ "type": "Point", "coordinates": [31.9, -132.8] }) AS Point2

Quando la query precedente viene eseguita, produce il seguente output.

[ 
   {
      "Point1": false, 
      "Point2": { 
         "valid": false, 
         "reason": "Latitude values must be between -90 and 90 degrees." 
      } 
   }
]

L'output precedente mostra che ST_ISVALIDDETAILED restituisce anche il motivo per cui questo punto non è valido, ma ST_ISVALID restituisce solo il valore booleano.