DocumentDB - Dữ liệu không gian địa lý

Microsoft đã thêm geospatial support, cho phép bạn lưu trữ dữ liệu vị trí trong tài liệu của mình và thực hiện các phép tính không gian cho khoảng cách và giao điểm giữa các điểm và đa giác.

  • Dữ liệu không gian mô tả vị trí và hình dạng của các đối tượng trong không gian.

  • Thông thường, nó có thể được sử dụng để đại diện cho vị trí của một người, một địa điểm ưa thích hoặc ranh giới của một thành phố hoặc một cái hồ.

  • Các trường hợp sử dụng phổ biến thường liên quan đến các truy vấn lân cận. Ví dụ: "tìm tất cả các trường đại học gần vị trí hiện tại của tôi".

A Pointbiểu thị một vị trí duy nhất trong không gian đại diện cho vị trí chính xác, ví dụ: địa chỉ đường phố của trường đại học cụ thể. Một điểm được biểu diễn trong DocumentDB bằng cách sử dụng cặp tọa độ của nó (kinh độ và vĩ độ). Sau đây là một ví dụ về điểm JSON.

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

Hãy xem một ví dụ đơn giản chứa vị trí của một trường đại học.

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

Để lấy tên trường đại học dựa trên vị trí, bạn có thể sử dụng truy vấn sau.

SELECT c.name FROM c 

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

Khi truy vấn trên được thực thi, bạn sẽ nhận được kết quả sau.

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

Tạo tài liệu với dữ liệu không gian địa lý trong .NET

Bạn có thể tạo một tài liệu với dữ liệu không gian địa lý, hãy xem một ví dụ đơn giản trong đó một tài liệu đại học được tạo.

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

Sau đây là cách triển khai cho lớp 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; } 
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ nhận được kết quả sau.

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