DocumentDB - Données géospatiales

Microsoft a ajouté geospatial support, qui vous permet de stocker des données de localisation dans vos documents et d'effectuer des calculs spatiaux pour la distance et les intersections entre les points et les polygones.

  • Les données spatiales décrivent la position et la forme des objets dans l'espace.

  • En règle générale, il peut être utilisé pour représenter l'emplacement d'une personne, un lieu d'intérêt ou la limite d'une ville ou d'un lac.

  • Les cas d'utilisation courants impliquent souvent des requêtes de proximité. Par exemple, "trouver toutes les universités à proximité de mon emplacement actuel".

UNE Pointdésigne une seule position dans l'espace qui représente l'emplacement exact, par exemple l'adresse postale d'une université particulière. Un point est représenté dans DocumentDB à l'aide de sa paire de coordonnées (longitude et latitude). Voici un exemple de point JSON.

{ 
   "type":"Point", 
   "coordinates":[ 28.3, -10.7 ] 
}

Jetons un coup d'œil à un exemple simple qui contient l'emplacement d'une université.

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

Pour récupérer le nom de l'université en fonction de l'emplacement, vous pouvez utiliser la requête suivante.

SELECT c.name FROM c 

WHERE c.id = "case-university" AND ST_ISVALID({ 
      "type":"Point", 
      "coordinates":[ 33.7194136, -73.0964862 ] })

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

[ 
   { 
      "name": "CASE: Center For Advanced Studies In Engineering" 
   } 
]

Créer un document avec des données géospatiales dans .NET

Vous pouvez créer un document avec des données géospatiales, jetons un coup d'œil à un exemple simple dans lequel un document universitaire est créé.

private async static Task CreateDocuments(DocumentClient client) {
   Console.WriteLine(); 
   Console.WriteLine("**** Create Documents ****"); 
   Console.WriteLine();
	
   var uniDocument = new UniversityProfile {
      Id = "nust", 
      Name = "National University of Sciences and Technology", 
      City = "Islamabad", 
      Loc = new Point(33.6455715, 72.9903447) 
   };
	
   Document document = await CreateDocument(client, uniDocument); 
   Console.WriteLine("Created document {0} from typed object", document.Id); 
   Console.WriteLine(); 
}

Voici l'implémentation de la classe UniversityProfile.

public class UniversityProfile { 
   [JsonProperty(PropertyName = "id")] 
   public string Id { get; set; }  
	
   [JsonProperty("name")] 
   public string Name { get; set; }
	
   [JsonProperty("city")] 
   public string City { get; set; }  
	
   [JsonProperty("location")] 
   public Point Loc { get; set; } 
}

Lorsque le code ci-dessus est compilé et exécuté, vous recevrez la sortie suivante.

**** Create Documents ****  
Created new document: nust 
{ 
   "id": "nust", 
   "name": "National University of Sciences and Technology", 
   "city": "Islamabad", 
   "location": { 
      "type": "Point", 
      "coordinates": [ 
         33.6455715, 
         72.9903447 
      ] 
   }, 
   "_rid": "Ic8LAMEUVgANAAAAAAAAAA==", 
   "_ts": 1450200910, 
   "_self": "dbs/Ic8LAA==/colls/Ic8LAMEUVgA=/docs/Ic8LAMEUVgANAAAAAAAAAA==/", 
   "_etag": "\"00004100-0000-0000-0000-56704f4e0000\"", 
   "_attachments": "attachments/" 
} 
Created document nust from typed object