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.