DocumentDB - Dati geospaziali

Microsoft ha aggiunto geospatial support, che consente di memorizzare i dati sulla posizione nei documenti ed eseguire calcoli spaziali per la distanza e le intersezioni tra punti e poligoni.

  • I dati spaziali descrivono la posizione e la forma degli oggetti nello spazio.

  • In genere, può essere utilizzato per rappresentare la posizione di una persona, un luogo di interesse o il confine di una città o di un lago.

  • I casi d'uso comuni spesso comportano query di prossimità. Ad esempio, "trova tutte le università vicine alla mia posizione attuale".

UN Pointdenota una singola posizione nello spazio che rappresenta la posizione esatta, ad esempio l'indirizzo stradale di una particolare università. Un punto è rappresentato in DocumentDB usando la sua coppia di coordinate (longitudine e latitudine). Di seguito è riportato un esempio di punto JSON.

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

Diamo un'occhiata a un semplice esempio che contiene l'ubicazione di un'università.

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

Per recuperare il nome dell'università in base alla posizione, puoi utilizzare la seguente query.

SELECT c.name FROM c 

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

Quando viene eseguita la query di cui sopra, riceverai il seguente output.

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

Crea documento con dati geospaziali in .NET

Puoi creare un documento con dati geospaziali, diamo un'occhiata a un semplice esempio in cui viene creato un documento universitario.

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(); 
}

Di seguito è riportata l'implementazione per 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; } 
}

Quando il codice precedente viene compilato ed eseguito, riceverai il seguente output.

**** 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