DocumentDB - Datos geoespaciales

Microsoft agregó geospatial support, que le permite almacenar datos de ubicación en sus documentos y realizar cálculos espaciales de distancia e intersecciones entre puntos y polígonos.

  • Los datos espaciales describen la posición y la forma de los objetos en el espacio.

  • Por lo general, se puede utilizar para representar la ubicación de una persona, un lugar de interés o los límites de una ciudad o un lago.

  • Los casos de uso comunes a menudo involucran consultas de proximidad. Por ejemplo, "buscar todas las universidades cercanas a mi ubicación actual".

UN Pointindica una única posición en el espacio que representa la ubicación exacta, por ejemplo, la dirección de la calle de una universidad en particular. Un punto se representa en DocumentDB utilizando su par de coordenadas (longitud y latitud). A continuación se muestra un ejemplo de punto JSON.

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

Echemos un vistazo a un ejemplo sencillo que contiene la ubicación de una universidad.

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

Para recuperar el nombre de la universidad según la ubicación, puede utilizar la siguiente consulta.

SELECT c.name FROM c 

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

Cuando se ejecuta la consulta anterior, recibirá el siguiente resultado.

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

Crear documento con datos geoespaciales en .NET

Puede crear un documento con datos geoespaciales, echemos un vistazo a un ejemplo sencillo en el que se crea 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(); 
}

A continuación se muestra la implementación para la clase 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; } 
}

Cuando se compile y ejecute el código anterior, recibirá el siguiente resultado.

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