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);
        }
Exemple #2
0
 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);
        }
Exemple #4
0
 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);
                }
            }