public async Task CreateDropPointTest() { SpatialItem spatialItem = new SpatialItem { Name = spatialName, partitionKey = Guid.NewGuid().ToString(), id = Guid.NewGuid().ToString(), point = this.GetPoint(), }; ItemResponse <SpatialItem> createResponse = await this.Container.CreateItemAsync <SpatialItem>(item : spatialItem); Assert.IsNotNull(createResponse); Assert.AreEqual(HttpStatusCode.Created, createResponse.StatusCode); ItemResponse <SpatialItem> readResponse = await this.Container.ReadItemAsync <SpatialItem>(partitionKey : new Cosmos.PartitionKey(spatialItem.partitionKey), id : spatialItem.id); Assert.IsNotNull(readResponse); Assert.AreEqual(HttpStatusCode.OK, readResponse.StatusCode); Assert.IsNotNull(readResponse.Resource.point); ItemResponse <SpatialItem> deleteResponse = await this.Container.DeleteItemAsync <SpatialItem>(partitionKey : new Cosmos.PartitionKey(spatialItem.partitionKey), id : spatialItem.id); Assert.IsNotNull(deleteResponse); Assert.AreEqual(HttpStatusCode.NoContent, deleteResponse.StatusCode); }
public Rect this[int index] { get { return(_items[index].Bounds); } set { SpatialItem spatialItem = _items[index]; Rect bounds = spatialItem.Bounds; if (bounds != value) { _extent = Rect.Empty; _tree.Remove(spatialItem, bounds); _tree.Insert(spatialItem, value, value.IsEmpty ? double.PositiveInfinity : (value.Width + value.Height)); spatialItem.Bounds = value; if (this.ExtentChanged != null) { this.ExtentChanged(this, EventArgs.Empty); } if (this.QueryInvalidated != null && (bounds.IntersectsWith(_lastQuery) || value.IntersectsWith(_lastQuery))) { this.QueryInvalidated(this, EventArgs.Empty); } } } }
public async Task CreateDropLineStringTest() { SpatialItem spatialItem = new SpatialItem { Name = spatialName, partitionKey = Guid.NewGuid().ToString(), id = Guid.NewGuid().ToString(), lineString = GetLineString(), }; CosmosItemResponse <SpatialItem> createResponse = await this.Container.Items.CreateItemAsync <SpatialItem>(partitionKey : spatialItem.partitionKey, item : spatialItem); Assert.IsNotNull(createResponse); Assert.AreEqual(HttpStatusCode.Created, createResponse.StatusCode); CosmosItemResponse <SpatialItem> readResponse = await this.Container.Items.ReadItemAsync <SpatialItem>(partitionKey : spatialItem.partitionKey, id : spatialItem.id); Assert.IsNotNull(readResponse); Assert.AreEqual(HttpStatusCode.OK, readResponse.StatusCode); Assert.IsNotNull(readResponse.Resource.lineString); CosmosItemResponse <SpatialItem> deleteResponse = await this.Container.Items.DeleteItemAsync <SpatialItem>(partitionKey : spatialItem.partitionKey, id : spatialItem.id); Assert.IsNotNull(deleteResponse); Assert.AreEqual(HttpStatusCode.NoContent, deleteResponse.StatusCode); }
public void InsertRange(int index, int count) { SpatialItem[] array = new SpatialItem[count]; for (int i = 0; i < count; i++) { array[i] = new SpatialItem(); array[i].Index = index + i; _tree.Insert(array[i], Rect.Empty, double.PositiveInfinity); } _items.InsertRange(index, array); if (this.QueryInvalidated != null) { this.QueryInvalidated(this, EventArgs.Empty); } }
public async Task CreateDropMultiPolygonTest() { SpatialItem spatialItem = new SpatialItem { Name = spatialName, partitionKey = Guid.NewGuid().ToString(), id = Guid.NewGuid().ToString(), multiPolygon = this.GetMultiPoygon(), }; ItemResponse <SpatialItem> createResponse = await this.Container.CreateItemAsync <SpatialItem>(item : spatialItem); Assert.IsNotNull(createResponse); Assert.AreEqual(HttpStatusCode.Created, createResponse.StatusCode); ItemResponse <SpatialItem> readResponse = await this.Container.ReadItemAsync <SpatialItem>(partitionKey : new Cosmos.PartitionKey(spatialItem.partitionKey), id : spatialItem.id); Assert.IsNotNull(readResponse); Assert.AreEqual(HttpStatusCode.OK, readResponse.StatusCode); Assert.IsNotNull(readResponse.Resource.multiPolygon); IOrderedQueryable <SpatialItem> multipolygonQuery = this.documentClient.CreateDocumentQuery <SpatialItem>(this.Container.LinkUri.OriginalString, new FeedOptions() { EnableScanInQuery = true, EnableCrossPartitionQuery = true }); SpatialItem[] withinQuery = multipolygonQuery .Where(f => f.multiPolygon.Within(this.GetMultiPoygon()) && f.multiPolygon.IsValid()) .ToArray(); Assert.IsTrue(withinQuery.Length == 1); foreach (SpatialItem item in withinQuery) { Assert.IsTrue(item.multiPolygon.Equals(this.GetMultiPoygon())); } ItemResponse <SpatialItem> deleteResponse = await this.Container.DeleteItemAsync <SpatialItem>(partitionKey : new Cosmos.PartitionKey(spatialItem.partitionKey), id : spatialItem.id); Assert.IsNotNull(deleteResponse); Assert.AreEqual(HttpStatusCode.NoContent, deleteResponse.StatusCode); }
/// <summary> /// Adds or inserts the given <see cref="count"/> of items at the given <see cref="index"/>. /// </summary> /// <param name="index">The index at which to insert the items.</param> /// <param name="count">The number of items to insert.</param> /// <remarks> /// All items are inserted with bounds of <see cref="Rect.Empty"/>, meaning they will be returned from all queries. /// </remarks> public void InsertRange(int index, int count) { var items = new SpatialItem[count]; for (int i = 0; i < count; i++) { items[i] = new SpatialItem(); items[i].Index = index + i; _tree.Insert(items[i], Rect.Empty, Double.PositiveInfinity); } _items.InsertRange(index, items); if (QueryInvalidated != null) { QueryInvalidated(this, EventArgs.Empty); } }