public void Test_0001_GeoDistanceQuery()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj    = bucket.NewKiiObject();
            KiiGeoPoint point  = new KiiGeoPoint(35.667983, 139.739356);

            obj.SetGeoPoint("myLoc", point);
            obj.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "distanceToMyLoc");
            KiiQuery    query  = new KiiQuery(clause);
            KiiQueryResult <KiiObject> result = bucket.Query(query);
            KiiObject   retObj = result [0];
            KiiGeoPoint retPoint;

            retPoint = retObj.GetGeoPoint("myLoc");
            Assert.AreEqual(point.Latitude, retPoint.Latitude);
            Assert.AreEqual(point.Longitude, retPoint.Longitude);
            JsonObject jObj             = retObj.GetJsonObject("_calculated");
            double     retDistance      = jObj.GetDouble("distanceToMyLoc");
            double     expectedDistance = distanceInMeter(point, center);

            Assert.IsTrue(approximateEqual(expectedDistance, retDistance, 0.00001));
        }
        public void Test_0010_GeoBox_Valid_key_Valid_Center_Invalid_radius()
        {
            KiiGeoPoint center          = new KiiGeoPoint(70.00, 100);
            double      radius          = -1;
            string      key             = "currentLocation";
            string      putDistanceInto = "calculatedDistance";

            KiiClause.GeoDistance(key, center, radius, putDistanceInto);
        }
        public void Test_0008_GeoDistance_empty_key()
        {
            KiiGeoPoint center          = new KiiGeoPoint(70.00, 100);
            double      radius          = 10.0;
            string      key             = "";
            string      putDistanceInto = "calculatedDistance";

            KiiClause.GeoDistance(key, center, radius, putDistanceInto);
        }
        public void Test_0004_GeoDistanceQuery_sort_asc()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj1   = bucket.NewKiiObject();
            KiiGeoPoint point1 = new KiiGeoPoint(35.672568, 139.723606);

            obj1.SetGeoPoint("myLoc", point1);
            obj1.Save();

            KiiObject   obj2   = bucket.NewKiiObject();
            KiiGeoPoint point2 = new KiiGeoPoint(35.667983, 139.739356);

            obj2.SetGeoPoint("myLoc", point2);
            obj2.Save();
            // not in radius
            KiiObject   obj3   = bucket.NewKiiObject();
            KiiGeoPoint point3 = new KiiGeoPoint();

            obj3.SetGeoPoint("myLoc", point3);
            obj3.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "distanceToMyLoc");
            KiiQuery    query  = new KiiQuery(clause);

            query.SortByAsc("_calculated.distanceToMyLoc");

            KiiQueryResult <KiiObject> result = bucket.Query(query);

            Assert.AreEqual(result.Count, 2);
            KiiObject   retObj1   = result [0];
            KiiGeoPoint retPoint1 = retObj1.GetGeoPoint("myLoc");

            Assert.AreEqual(point1.Latitude, retPoint1.Latitude);
            Assert.AreEqual(point1.Longitude, retPoint1.Longitude);
            JsonObject jObj1 = retObj1.GetJsonObject("_calculated");

            KiiObject   retObj2   = result [1];
            KiiGeoPoint retPoint2 = retObj2.GetGeoPoint("myLoc");

            Assert.AreEqual(point2.Latitude, retPoint2.Latitude);
            Assert.AreEqual(point2.Longitude, retPoint2.Longitude);
            JsonObject jObj2 = retObj2.GetJsonObject("_calculated");

            double retDistance1      = jObj1.GetDouble("distanceToMyLoc");
            double retDistance2      = jObj2.GetDouble("distanceToMyLoc");
            double expectedDistance1 = distanceInMeter(point1, center);
            double expectedDistance2 = distanceInMeter(point2, center);

            Assert.IsTrue(approximateEqual(expectedDistance1, retDistance1, 0.00001));
            Assert.IsTrue(approximateEqual(expectedDistance2, retDistance2, 0.00001));
        }
        public void Test_0006_GeoDistance_Valid_Parameters()
        {
            KiiGeoPoint center          = new KiiGeoPoint(70.00, 100);
            double      radius          = 10.0;
            string      key             = "currentLocation";
            string      putDistanceInto = "calculatedDistance";

            KiiClause  c      = KiiClause.GeoDistance(key, center, radius, putDistanceInto);
            JsonObject clause = c.ToJson();

            Assert.AreEqual(clause.GetString("type"), "geodistance");
            Assert.AreEqual(clause.GetString("field"), key);
            Assert.AreEqual(clause.GetString("putDistanceInto"), putDistanceInto);
            Assert.AreEqual(clause.GetDouble("radius"), radius);

            JsonObject centerJson = clause.GetJsonObject("center");

            Assert.AreEqual(centerJson.GetDouble("lat"), center.Latitude);
            Assert.AreEqual(centerJson.GetDouble("lon"), center.Longitude);
        }
        public void Test_0002_GeoDistanceQuery_calculatedDistance_nil()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj    = bucket.NewKiiObject();
            KiiGeoPoint point  = new KiiGeoPoint(35.667983, 139.739356);

            obj.SetGeoPoint("myLoc", point);
            obj.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "");
            KiiQuery    query  = new KiiQuery(clause);
            KiiQueryResult <KiiObject> result = bucket.Query(query);
            KiiObject   retObj = result [0];
            KiiGeoPoint retPoint;

            retPoint = retObj.GetGeoPoint("myLoc");
            Assert.AreEqual(point.Latitude, retPoint.Latitude);
            Assert.AreEqual(point.Longitude, retPoint.Longitude);

            Assert.IsFalse(retObj.Has("_calculated"));
        }
        public void NotGeoDistanceTest()
        {
            KiiBucket bucket = KiiUser.CurrentUser.Bucket("my_bucket");
            KiiObject obj1   = bucket.NewKiiObject();

            obj1["name"] = "kii";
            obj1.SetGeoPoint("location", new KiiGeoPoint(35.668387, 139.739495));
            obj1.Save();
            KiiObject obj2 = bucket.NewKiiObject();

            obj2["name"] = "TDL";
            obj2.SetGeoPoint("location", new KiiGeoPoint(35.633114, 139.880405));
            obj2.Save();

            KiiQuery query = new KiiQuery(KiiClause.Not(KiiClause.GeoDistance("location", new KiiGeoPoint(35.667384, 139.739994), 2000, null)));

            query.SortByAsc("name");

            KiiQueryResult <KiiObject> results = bucket.Query(query);

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("TDL", results[0].GetString("name"));
        }