DocumentDB SQL - Función espacial

DocumentDB también es compatible con las funciones integradas del Open Geospatial Consortium (OGC) para consultas geoespaciales. A continuación se muestra una lista de funciones espaciales compatibles integradas.

S.No. Función descriptiva
1

ST_DISTANCE (point_expr, point_expr)

Devuelve la distancia entre las dos expresiones de puntos GeoJSON.

2

ST_WITHIN (point_expr, polygon_expr)

Devuelve una expresión booleana que indica si el punto GeoJSON especificado en el primer argumento está dentro del polígono GeoJSON en el segundo argumento.

3

ST_ISVALID

Devuelve un valor booleano que indica si la expresión de polígono o punto GeoJSON especificado es válida.

4

ST_ISVALIDDETAILED

Devuelve un valor JSON que contiene un valor booleano si la expresión de polígono o punto GeoJSON especificado es válida, y si no es válido, además el motivo como un valor de cadena.

En este ejemplo, utilizaremos los siguientes dos documentos de universidades que contienen la ubicación en forma de coordenadas.

Lo siguiente es el Case University document.

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

Lo siguiente es el Nust University document.

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

Echemos un vistazo a otro ejemplo de ST_DISTANCE.

A continuación se muestra la consulta que devuelve la identificación y el nombre de los documentos de las universidades que se encuentran dentro de los 30 km de la ubicación especificada.

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

Cuando se ejecuta la consulta anterior, produce el siguiente resultado.

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

Echemos un vistazo a otro ejemplo.

A continuación se muestra la consulta que contiene ST_ISVALID y 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

Cuando se ejecuta la consulta anterior, produce el siguiente resultado.

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

La salida anterior muestra que ST_ISVALIDDETAILED también devuelve la razón por la que este punto no es válido, pero ST_ISVALID solo devuelve el valor booleano.