示例#1
0
    // This method verifies a.GetDistance(b), where b is a S2LatLng, by comparing
    // its result against a.GetDistance(c), c being the point rectangle created
    // from b.
    private static void VerifyGetRectPointDistance(S2LatLngRect a, S2LatLng p)
    {
        S1Angle distance1 = BruteForceRectPointDistance(a, p.Normalized());
        S1Angle distance2 = a.GetDistance(p.Normalized());

        Assert2.Near(Math.Abs(distance1.Radians - distance2.Radians), 0, 1e-10);
    }
示例#2
0
    public void Test_S2LatLng_TestBasic()
    {
        S2LatLng ll_rad = S2LatLng.FromRadians(S2.M_PI_4, S2.M_PI_2);

        Assert.Equal(S2.M_PI_4, ll_rad.LatRadians);
        Assert.Equal(S2.M_PI_2, ll_rad.LngRadians);
        Assert.True(ll_rad.IsValid());
        S2LatLng ll_deg = S2LatLng.FromDegrees(45, 90);

        Assert.Equal(ll_rad, ll_deg);
        Assert.True(ll_deg.IsValid());
        Assert.False(S2LatLng.FromDegrees(-91, 0).IsValid());
        Assert.False(S2LatLng.FromDegrees(0, 181).IsValid());

        S2LatLng bad = S2LatLng.FromDegrees(120, 200);

        Assert.False(bad.IsValid());
        S2LatLng better = bad.Normalized();

        Assert.True(better.IsValid());
        Assert.Equal(S1Angle.FromDegrees(90), better.Lat());
        Assert2.DoubleEqual(S1Angle.FromDegrees(-160).Radians, better.LngRadians);

        bad = S2LatLng.FromDegrees(-100, -360);
        Assert.False(bad.IsValid());
        better = bad.Normalized();
        Assert.True(better.IsValid());
        Assert.Equal(S1Angle.FromDegrees(-90), better.Lat());
        Assert2.DoubleEqual(0.0, better.LngRadians);

        Assert.True((S2LatLng.FromDegrees(10, 20) + S2LatLng.FromDegrees(20, 30)).
                    ApproxEquals(S2LatLng.FromDegrees(30, 50)));
        Assert.True((S2LatLng.FromDegrees(10, 20) - S2LatLng.FromDegrees(20, 30)).
                    ApproxEquals(S2LatLng.FromDegrees(-10, -10)));
        Assert.True((0.5 * S2LatLng.FromDegrees(10, 20)).
                    ApproxEquals(S2LatLng.FromDegrees(5, 10)));

        // Check that Invalid() returns an invalid point.
        S2LatLng invalid = S2LatLng.Invalid;

        Assert.False(invalid.IsValid());

        // Check that the default constructor sets latitude and longitude to 0.
        S2LatLng default_ll = S2LatLng.Center;

        Assert.True(default_ll.IsValid());
        Assert.Equal(0, default_ll.LatRadians);
        Assert.Equal(0, default_ll.LngRadians);
    }
示例#3
0
    private static string AppendVertex(S2LatLng ll)
    {
        var norm = ll.Normalized();

        return($"{norm.LatDegrees():g15}:{norm.LngDegrees():g15}");
    }