public void TestSetSphericalTrue()
        {
            var options  = GeoNearOptions.SetSpherical(true);
            var expected = "{ 'spherical' : true }".Replace("'", "\"");

            Assert.AreEqual(expected, options.ToJson());
        }
        public void TestSetMaxDistance()
        {
            var options  = GeoNearOptions.SetMaxDistance(1.5);
            var expected = "{ 'maxDistance' : 1.5 }".Replace("'", "\"");

            Assert.AreEqual(expected, options.ToJson());
        }
        public void TestSetSphericalFalse()
        {
            var options  = GeoNearOptions.SetSpherical(false);
            var expected = "{ }";

            Assert.AreEqual(expected, options.ToJson());
        }
        public void TestSetDistanceMultiplier()
        {
            var options  = GeoNearOptions.SetDistanceMultiplier(1.5);
            var expected = "{ 'distanceMultiplier' : 1.5 }".Replace("'", "\"");

            Assert.AreEqual(expected, options.ToJson());
        }
Exemplo n.º 5
0
        public void TestGeoNearSphericalTrue()
        {
            if (collection.Exists())
            {
                collection.Drop();
            }
            collection.Insert(new Place {
                Location = new[] { -74.0, 40.74 }, Name = "10gen", Type = "Office"
            });
            collection.Insert(new Place {
                Location = new[] { -75.0, 40.74 }, Name = "Two", Type = "Coffee"
            });
            collection.Insert(new Place {
                Location = new[] { -74.0, 41.73 }, Name = "Three", Type = "Coffee"
            });
            collection.CreateIndex(IndexKeys.GeoSpatial("Location"));

            var options = GeoNearOptions.SetSpherical(true);
            var result  = collection.GeoNearAs <Place>(Query.Null, -74.0, 40.74, 100, options);

            Assert.IsTrue(result.Ok);
            Assert.AreEqual("onlinetests.testcollection", result.Namespace);
            Assert.IsTrue(result.Stats.AverageDistance >= 0.0);
            Assert.IsTrue(result.Stats.BTreeLocations >= 0);
            Assert.IsTrue(result.Stats.Duration >= TimeSpan.Zero);
            Assert.IsTrue(result.Stats.MaxDistance >= 0.0);
            Assert.IsTrue(result.Stats.NumberScanned >= 0);
            Assert.IsTrue(result.Stats.ObjectsLoaded >= 0);
            Assert.AreEqual(3, result.Hits.Count);

            var hit0 = result.Hits[0];

            Assert.IsTrue(hit0.Distance == 0.0);
            Assert.AreEqual(-74.0, hit0.RawDocument["Location"].AsBsonArray[0].AsDouble);
            Assert.AreEqual(40.74, hit0.RawDocument["Location"].AsBsonArray[1].AsDouble);
            Assert.AreEqual("10gen", hit0.RawDocument["Name"].AsString);
            Assert.AreEqual("Office", hit0.RawDocument["Type"].AsString);

            // with spherical true "Two" is considerably closer than "Three"
            var hit1 = result.Hits[1];

            Assert.IsTrue(hit1.Distance > 0.0);
            Assert.AreEqual(-75.0, hit1.RawDocument["Location"].AsBsonArray[0].AsDouble);
            Assert.AreEqual(40.74, hit1.RawDocument["Location"].AsBsonArray[1].AsDouble);
            Assert.AreEqual("Two", hit1.RawDocument["Name"].AsString);
            Assert.AreEqual("Coffee", hit1.RawDocument["Type"].AsString);

            var hit2 = result.Hits[2];

            Assert.IsTrue(hit2.Distance > 0.0);
            Assert.IsTrue(hit2.Distance > hit1.Distance);
            Assert.AreEqual(-74.0, hit2.RawDocument["Location"].AsBsonArray[0].AsDouble);
            Assert.AreEqual(41.73, hit2.RawDocument["Location"].AsBsonArray[1].AsDouble);
            Assert.AreEqual("Three", hit2.RawDocument["Name"].AsString);
            Assert.AreEqual("Coffee", hit2.RawDocument["Type"].AsString);
        }
        public void TestSetAll()
        {
            var options = GeoNearOptions
                          .SetDistanceMultiplier(1.5)
                          .SetMaxDistance(2.5)
                          .SetSpherical(true);
            var expected = "{ 'distanceMultiplier' : 1.5, 'maxDistance' : 2.5, 'spherical' : true }".Replace("'", "\"");

            Assert.AreEqual(expected, options.ToJson());
        }
Exemplo n.º 7
0
        public void TestGeoNearGeneric()
        {
            if (collection.Exists())
            {
                collection.Drop();
            }
            collection.Insert(new Place {
                Location = new[] { 1.0, 1.0 }, Name = "One", Type = "Museum"
            });
            collection.Insert(new Place {
                Location = new[] { 1.0, 2.0 }, Name = "Two", Type = "Coffee"
            });
            collection.Insert(new Place {
                Location = new[] { 1.0, 3.0 }, Name = "Three", Type = "Library"
            });
            collection.Insert(new Place {
                Location = new[] { 1.0, 4.0 }, Name = "Four", Type = "Museum"
            });
            collection.Insert(new Place {
                Location = new[] { 1.0, 5.0 }, Name = "Five", Type = "Coffee"
            });
            collection.CreateIndex(IndexKeys.GeoSpatial("Location"));

            var options = GeoNearOptions
                          .SetDistanceMultiplier(1)
                          .SetMaxDistance(100);
            var result = collection.GeoNearAs <Place>(Query.Null, 0.0, 0.0, 100, options);

            Assert.IsTrue(result.Ok);
            Assert.AreEqual("onlinetests.testcollection", result.Namespace);
            Assert.IsTrue(result.Stats.AverageDistance >= 0.0);
            Assert.IsTrue(result.Stats.BTreeLocations >= 0);
            Assert.IsTrue(result.Stats.Duration >= TimeSpan.Zero);
            Assert.IsTrue(result.Stats.MaxDistance >= 0.0);
            Assert.IsTrue(result.Stats.NumberScanned >= 0);
            Assert.IsTrue(result.Stats.ObjectsLoaded >= 0);
            Assert.AreEqual(5, result.Hits.Count);
            Assert.IsTrue(result.Hits[0].Distance > 1.0);
            Assert.AreEqual(1.0, result.Hits[0].RawDocument["Location"].AsBsonArray[0].AsDouble);
            Assert.AreEqual(1.0, result.Hits[0].RawDocument["Location"].AsBsonArray[1].AsDouble);
            Assert.AreEqual("One", result.Hits[0].RawDocument["Name"].AsString);
            Assert.AreEqual("Museum", result.Hits[0].RawDocument["Type"].AsString);

            var place = result.Hits[1].Document;

            Assert.AreEqual(1.0, place.Location[0]);
            Assert.AreEqual(2.0, place.Location[1]);
            Assert.AreEqual("Two", place.Name);
            Assert.AreEqual("Coffee", place.Type);
        }
Exemplo n.º 8
0
        public void TestGeoNear()
        {
            database = server.GetDatabase("osm");
            var collection = database.GetCollection("map");
            var query      = Query.EQ("properties.amenity", new BsonString("pub"));

            // coordinates for the excel centre
            double lon = 51.5060089;
            double lat = 0.0371037;

            var earthRadius = 6378.0; // km
            var rangeInKm   = 3000.0; // km

            var options = GeoNearOptions
                          .SetMaxDistance(rangeInKm / earthRadius /* to radians */)
                          .SetSpherical(true);

            var results = collection.GeoNear(query, lat, lon, 10, options);

            Assert.AreEqual(10, results.Hits.Count);
        }
        static void Main(string[] args)
        {
            var client     = new MongoClient(connectionString);
            var server     = client.GetServer();
            var database   = server.GetDatabase("osm");
            var collection = database.GetCollection("map");

            var query = Query.EQ("properties.amenity", new BsonString("pub"));

            double lon = 51.5060089;
            double lat = 0.0371037;

            var earthRadius = 6378.0; // km
            var rangeInKm   = 3000.0; // km

            var options = GeoNearOptions
                          .SetMaxDistance(rangeInKm / earthRadius /* to radians */)
                          .SetSpherical(true);

            var results = collection.GeoNear(query, lat, lon, 10, options);

            foreach (var result in results.Hits)
            {
                try
                {
                    var name = result.Document["properties"]["name"];
                    Console.WriteLine(String.Format("{0}",
                                                    name
                                                    ));
                }
                catch (Exception e)
                {
                }
            }

            Console.ReadKey();
        }
        public IEnumerable <PlaygroundEntity> GetByLocation(float lat, float lng)
        {
            var earthRadius = 6378.0; // km
            var rangeInKm   = 10.0;   // km

            GetCollection().EnsureIndex(IndexKeys.GeoSpatial("Loc"));

            //var near =
            //    Query.GT("ExpiresOn", now);

            var options = GeoNearOptions
                          .SetMaxDistance(rangeInKm / earthRadius /* to radians */)
                          .SetSpherical(true);

            GeoNearResult <PlaygroundEntity> results = GetCollection().GeoNear(
                Query.Null,
                lng, // note the order
                lat, // [lng, lat]
                200,
                options
                );

            return(results.Hits.Select(result => result.Document));
        }
Exemplo n.º 11
0
        public GeoNearResult <Station> GetNearbyStations(double latitude, double longitude, double range, string measurement, int maxItems)
        {
            var radians = measurement == Measurement.Kilometers ? EarthRadians.Kilometers: EarthRadians.Miles;

            var server = MongoServer.Create(Settings.TidesMongoConnection);

            server.Connect();

            var stationsCollection = server[DatabaseNames.Tides][TidesCollectionNames.Stations];
            var result             = stationsCollection.GeoNearAs <Station>(Query.EQ("IsComplete", true), longitude, latitude, maxItems, GeoNearOptions.SetSpherical(true).SetMaxDistance(range).SetDistanceMultiplier(range / radians));

            server.Disconnect();

            return(result);
        }
Exemplo n.º 12
0
 public static GeoNearOptionsBuilder getGeoNearOption(double rangeInM)
 {
     return(GeoNearOptions.SetMaxDistance(rangeInM / earthRadius /* to radians */)
            .SetSpherical(true).SetDistanceMultiplier(earthRadius));
 }