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.