DocumentDB SQL - Fonction spatiale

DocumentDB prend également en charge les fonctions intégrées d'Open Geospatial Consortium (OGC) pour les requêtes géospatiales. Voici une liste des fonctions spatiales prises en charge intégrées.

S.No. Description de la fonction
1

ST_DISTANCE (point_expr, point_expr)

Renvoie la distance entre les deux expressions de point GeoJSON.

2

ST_WITHIN (point_expr, polygon_expr)

Renvoie une expression booléenne indiquant si le point GeoJSON spécifié dans le premier argument se trouve dans le polygone GeoJSON dans le deuxième argument.

3

ST_ISVALID

Renvoie une valeur booléenne indiquant si le point GeoJSON ou l'expression de polygone spécifié est valide.

4

ST_ISVALIDDETAILED

Renvoie une valeur JSON contenant une valeur booléenne si le point GeoJSON ou l'expression de polygone spécifié est valide et, s'il n'est pas valide, la raison en tant que valeur de chaîne.

Dans cet exemple, nous utiliserons les deux documents suivants des universités qui contiennent l'emplacement sous forme de coordonnées.

Voici le Case University document.

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

Voici le Nust University document.

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

Jetons un œil à un autre exemple de ST_DISTANCE.

Voici la requête qui renvoie l'ID et le nom des documents universitaires situés à moins de 30 km de l'emplacement spécifié.

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

Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante.

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

Jetons un œil à un autre exemple.

Voici la requête qui contient ST_ISVALID et 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

Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante.

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

La sortie ci-dessus montre que ST_ISVALIDDETAILED renvoie également la raison pour laquelle ce point n'est pas valide, mais ST_ISVALID ne renvoie que la valeur booléenne.