Banco de Dados de Documentos - Dados Geoespaciais
Microsoft adicionou geospatial support, que permite armazenar dados de localização em seus documentos e realizar cálculos espaciais para distância e interseções entre pontos e polígonos.
Os dados espaciais descrevem a posição e a forma dos objetos no espaço.
Normalmente, pode ser usado para representar a localização de uma pessoa, um local de interesse ou os limites de uma cidade ou um lago.
Os casos de uso comuns geralmente envolvem consultas de proximidade. Por exemplo, "encontrar todas as universidades próximas à minha localização atual".
UMA Pointdenota uma única posição no espaço que representa a localização exata, por exemplo, o endereço de uma determinada universidade. Um ponto é representado no Banco de Dados de Documentos usando seu par de coordenadas (longitude e latitude). A seguir está um exemplo de ponto JSON.
{
"type":"Point",
"coordinates":[ 28.3, -10.7 ]
}
Vamos dar uma olhada em um exemplo simples que contém a localização de uma universidade.
{
"id":"case-university",
"name":"CASE: Center For Advanced Studies In Engineering",
"city":"Islamabad",
"location": {
"type":"Point",
"coordinates":[ 33.7194136, -73.0964862 ]
}
}
Para recuperar o nome da universidade com base na localização, você pode usar a seguinte consulta.
SELECT c.name FROM c
WHERE c.id = "case-university" AND ST_ISVALID({
"type":"Point",
"coordinates":[ 33.7194136, -73.0964862 ] })
Quando a consulta acima for executada, você receberá a seguinte saída.
[
{
"name": "CASE: Center For Advanced Studies In Engineering"
}
]
Criar documento com dados geoespaciais em .NET
Você pode criar um documento com dados geoespaciais, vamos dar uma olhada em um exemplo simples em que um documento universitário é criado.
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 seguir está a implementação para a 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 o código acima for compilado e executado, você receberá a seguinte saída.
**** 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