- DocumentDB Tutorial
- DocumentDB - Home
- DocumentDB - Introduction
- DocumentDB - Advantages
- DocumentDB - Environment Setup
- DocumentDB - Create Account
- DocumentDB - Connect Account
- DocumentDB - Create Database
- DocumentDB - List Databases
- DocumentDB - Drop Databases
- DocumentDB - Create Collection
- DocumentDB - Delete Collection
- DocumentDB - Insert Document
- DocumentDB - Query Document
- DocumentDB - Update Document
- DocumentDB - Delete Document
- DocumentDB - Data Modeling
- DocumentDB - Data Types
- DocumentDB - Limiting Records
- DocumentDB - Sorting Records
- DocumentDB - Indexing Records
- DocumentDB - Geospatial Data
- DocumentDB - Partitioning
- DocumentDB - Data Migration
- DocumentDB - Access Control
- DocumentDB - Visualize Data
- DocumentDB Useful Resources
- DocumentDB - Quick Guide
- DocumentDB - Useful Resources
- DocumentDB - Discussion
DocumentDB - Geospatial Data
Microsoft added geospatial support, which lets you store location data in your documents and perform spatial calculations for distance and intersections between points and polygons.
Spatial data describes the position and shape of objects in space.
Typically, it can be used to represent the location of a person, a place of interest, or the boundary of a city, or a lake.
Common use cases often involve proximity queries. For e.g., "find all universities near my current location".
A Point denotes a single position in space which represents the exact location, e.g. street address of particular university. A point is represented in DocumentDB using its coordinate pair (longitude and latitude). Following is an example of JSON point.
{ "type":"Point", "coordinates":[ 28.3, -10.7 ] }
Let’s take a look at a simple example which contains the location of a university.
{ "id":"case-university", "name":"CASE: Center For Advanced Studies In Engineering", "city":"Islamabad", "location": { "type":"Point", "coordinates":[ 33.7194136, -73.0964862 ] } }
To retrieve the university name based on the location, you can use the following query.
SELECT c.name FROM c WHERE c.id = "case-university" AND ST_ISVALID({ "type":"Point", "coordinates":[ 33.7194136, -73.0964862 ] })
When the above query is executed you will receive the following output.
[ { "name": "CASE: Center For Advanced Studies In Engineering" } ]
Create Document with Geospatial Data in .NET
You can create a document with geospatial data, let’s take a look at a simple example in which a university document is created.
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(); }
Following is the implementation for the UniversityProfile class.
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; } }
When the above code is compiled and executed, you will receive the following 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