public void VerifyNoSpatialPropertiesInResultsWhenSelectingNonSpatialField() { var house1 = new GeoDoc(44.75, -93.35); var house2 = new GeoDoc(44.751, -93.351); var house3 = new GeoDoc(44.752, -93.352); var house4 = new GeoDoc(45.75, -94.35); using (var store = GetDocumentStore()) { store.Initialize(); using (var session = store.OpenSession()) { session.Store(house1); session.Store(house2); session.Store(house3); session.Store(house4); session.SaveChanges(); } using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/queries?query=from GeoDocs " + "where spatial.within(spatial.point(Location1.Latitude, Location1.Longitude), spatial.circle(50, 44.75, -93.35)) " + "select Id" + "&addSpatialProperties=true"); Assert.True(json.TryGet(nameof(QueryResult.TotalResults), out int results)); Assert.Equal(3, results); Assert.False(json.TryGet(nameof(DocumentQueryResult.SpatialProperties), out BlittableJsonReaderArray spatialProperties)); } } }
private void AssertThat(IGeometry geometry, SpatialRelation relation, IRavenIndexable geometry2, bool expected) { InitRaven(new TestIndex()); var doc = new GeoDoc { Geometry = geometry }; using (var session = Store.OpenSession()) { session.Store(doc); session.SaveChanges(); } using (var session = Store.OpenSession()) { var result = session.Query <GeoDoc, TestIndex>() .Geo(x => x.Geometry, x => x.RelatesToShape(geometry2, relation)) .Customize(x => x.WaitForNonStaleResults()) .Any(); var relationString = relation.ToString().ToLowerInvariant(); bool s = false; if (relationString.EndsWith("s")) { s = true; relationString = relationString.Substring(0, relationString.Length - 1); } var msg = string.Format("Geometry {0}{1} {2} {3}", s ? "does" : "is", result ? "" : " not", relationString, _writer.Write(geometry2.GetSpatial4nShape())); Assert.That(result, Is.EqualTo(expected), msg); } }
public void VerifyMultipleSpatialPropertiesInResults() { var house1 = new GeoDoc(44.75, -93.35); var house2 = new GeoDoc(44.751, -93.351); var house3 = new GeoDoc(44.752, -93.352); var house4 = new GeoDoc(45.75, -94.35); using (var store = GetDocumentStore()) { store.Initialize(); using (var session = store.OpenSession()) { session.Store(house1); session.Store(house2); session.Store(house3); session.Store(house4); session.SaveChanges(); } var boundingPolygon = "POLYGON((12.556675672531128 55.675285554217,12.56213665008545 55.675285554217,12.56213665008545 55.67261750095371,12.556675672531128 55.67261750095371,12.556675672531128 55.675285554217))"; using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/queries?query=from GeoDocs " + "where spatial.within(spatial.point(Location1.Latitude, Location1.Longitude), spatial.circle(50, 44.75, -93.35)) " + "or spatial.within(spatial.point(Location2.Latitude, Location2.Longitude), spatial.circle(50, 45.75, -94.35)) " + $"or spatial.within(spatial.point(Location3.Latitude, Location3.Longitude), spatial.wkt('{boundingPolygon}'))" + "&addSpatialProperties=true"); Assert.True(json.TryGet(nameof(QueryResult.TotalResults), out int results)); Assert.Equal(4, results); Assert.True(json.TryGet(nameof(DocumentQueryResult.SpatialProperties), out BlittableJsonReaderArray spatialProperties)); Assert.Equal(3, spatialProperties.Length); for (var i = 0; i < spatialProperties.Length; i++) { Assert.True((spatialProperties[i] as BlittableJsonReaderObject).TryGet(nameof(SpatialProperty.LatitudeProperty), out string lat)); Assert.Equal(lat, $"Location{i + 1}.Latitude"); Assert.True((spatialProperties[i] as BlittableJsonReaderObject).TryGet(nameof(SpatialProperty.LongitudeProperty), out string lng)); Assert.Equal(lng, $"Location{i + 1}.Longitude"); } } } }
public void VerifyPolygonInResults() { var house1 = new GeoDoc(44.75, -93.35); var house2 = new GeoDoc(44.751, -93.351); var house3 = new GeoDoc(44.752, -93.352); var house4 = new GeoDoc(45.75, -94.35); using (var store = GetDocumentStore()) { store.Initialize(); using (var session = store.OpenSession()) { session.Store(house1); session.Store(house2); session.Store(house3); session.Store(house4); session.SaveChanges(); } using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/queries?query=from GeoDocs " + "where spatial.within(spatial.point(Location1.Latitude, Location1.Longitude), " + "spatial.wkt('POLYGON ((-90.0 50.0, -95.0 50.0, -95.0 40.0, -90.0 40.0, -90.0 50.0))'))" + "&addSpatialProperties=true"); Assert.True(json.TryGet(nameof(QueryResult.TotalResults), out int results)); Assert.Equal(4, results); Assert.True(json.TryGet(nameof(DocumentQueryResult.SpatialShapes), out BlittableJsonReaderArray spatialShapes)); Assert.Equal(1, spatialShapes.Length); (spatialShapes[0] as BlittableJsonReaderObject).TryGet(nameof(SpatialShapeBase.Type), out string shape); Assert.Equal(shape, "Polygon"); Assert.True((spatialShapes[0] as BlittableJsonReaderObject).TryGet(nameof(Polygon.Vertices), out BlittableJsonReaderArray vertices)); Assert.Equal(4, vertices.Length); (vertices[0] as BlittableJsonReaderObject).TryGet(nameof(Coordinates.Latitude), out double latitude); Assert.Equal(50, latitude); (vertices[0] as BlittableJsonReaderObject).TryGet(nameof(Coordinates.Longitude), out double longitude); Assert.Equal(-90, longitude); } } }
public void AssertThatIndexPropertyIsGenerated(IGeometry geometry) { InitRaven(new TestIndex()); var doc = new GeoDoc { Geometry = geometry }; using (var session = Store.OpenSession()) { session.Store(doc); session.SaveChanges(); } using (var session = Store.OpenSession()) { var json = session.Load <RavenJObject>(doc.Id); var result = json.Value <RavenJObject>("Geometry").ContainsKey("__spatial"); Console.WriteLine(json.Value <RavenJObject>("Geometry").Value <string>("__spatial")); Assert.That(result, Is.True); } }
public void AssertThatEntityDeserializes(IGeometry geometry) { InitRaven(new TestIndex()); string docId; using (var session = Store.OpenSession()) { var doc = new GeoDoc { Geometry = geometry }; session.Store(doc); session.SaveChanges(); docId = doc.Id; } using (var session = Store.OpenSession()) { var doc = session.Load <GeoDoc>(docId); Assert.AreEqual(geometry, doc.Geometry); } }
public void VerifySelectedSpatialPropertiesWithoutAliasInResults() { var house1 = new GeoDoc(44.75, -93.35); var house2 = new GeoDoc(44.751, -93.351); var house3 = new GeoDoc(44.752, -93.352); var house4 = new GeoDoc(45.75, -94.35); using (var store = GetDocumentStore()) { store.Initialize(); using (var session = store.OpenSession()) { session.Store(house1); session.Store(house2); session.Store(house3); session.Store(house4); session.SaveChanges(); } using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/queries?query=from GeoDocs " + "where spatial.within(spatial.point(Location1.Latitude, Location1.Longitude), spatial.circle(50, 44.75, -93.35)) " + "select Location1" + "&addSpatialProperties=true"); Assert.True(json.TryGet(nameof(QueryResult.TotalResults), out int results)); Assert.Equal(3, results); Assert.True(json.TryGet(nameof(DocumentQueryResult.SpatialProperties), out BlittableJsonReaderArray spatialProperties)); Assert.Equal(1, spatialProperties.Length); (spatialProperties[0] as BlittableJsonReaderObject).TryGet(nameof(SpatialProperty.LatitudeProperty), out string lat); Assert.Equal(lat, "Location1.Latitude"); (spatialProperties[0] as BlittableJsonReaderObject).TryGet(nameof(SpatialProperty.LongitudeProperty), out string lng); Assert.Equal(lng, "Location1.Longitude"); } } }
public void VerifyCirclesInResults() { var house1 = new GeoDoc(44.75, -93.35); var house2 = new GeoDoc(44.751, -93.351); var house3 = new GeoDoc(44.752, -93.352); var house4 = new GeoDoc(45.75, -94.35); using (var store = GetDocumentStore()) { store.Initialize(); using (var session = store.OpenSession()) { session.Store(house1); session.Store(house2); session.Store(house3); session.Store(house4); session.SaveChanges(); } using (var commands = store.Commands()) { var json = commands.RawGetJson <BlittableJsonReaderObject>("/queries?query=from GeoDocs " + "where spatial.within(spatial.point(Location1.Latitude, Location1.Longitude), " + "spatial.circle(50, 44.75, -93.35, 'miles')) " + "or spatial.within(spatial.point(Location2.Latitude, Location2.Longitude), " + "spatial.wkt('CIRCLE(-90 40 d=20)'))" + "&addSpatialProperties=true"); Assert.True(json.TryGet(nameof(QueryResult.TotalResults), out int results)); Assert.Equal(3, results); Assert.True(json.TryGet(nameof(DocumentQueryResult.SpatialShapes), out BlittableJsonReaderArray spatialShapes)); Assert.Equal(2, spatialShapes.Length); var firstShape = spatialShapes[0] as BlittableJsonReaderObject; firstShape.TryGet(nameof(SpatialShapeBase.Type), out string shape); Assert.Equal(shape, "Circle"); Assert.True(firstShape.TryGet(nameof(Circle.Center), out BlittableJsonReaderObject center)); center.TryGet(nameof(Coordinates.Latitude), out double latitude); Assert.Equal(44.75, latitude); center.TryGet(nameof(Coordinates.Longitude), out double longitude); Assert.Equal(-93.35, longitude); firstShape.TryGet(nameof(Circle.Radius), out double radius); Assert.True(Math.Abs(50 - radius) < 0.1); firstShape.TryGet(nameof(Circle.Units), out SpatialUnits units); Assert.Equal(SpatialUnits.Miles, units); var secondShape = spatialShapes[1] as BlittableJsonReaderObject; secondShape.TryGet(nameof(SpatialShapeBase.Type), out shape); Assert.Equal(shape, "Circle"); Assert.True(secondShape.TryGet(nameof(Circle.Center), out center)); center.TryGet(nameof(Coordinates.Latitude), out latitude); Assert.Equal(40, latitude); center.TryGet(nameof(Coordinates.Longitude), out longitude); Assert.Equal(-90, longitude); secondShape.TryGet(nameof(Circle.Radius), out radius); Assert.True(Math.Abs(20 - radius) < 0.1); secondShape.TryGet(nameof(Circle.Units), out units); Assert.Equal(SpatialUnits.Kilometers, units); } } }