Beispiel #1
0
        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));
                }
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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");
                    }
                }
            }
        }
Beispiel #4
0
        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);
                }
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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");
                }
            }
        }
Beispiel #8
0
        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);
                }
            }
        }