Ejemplo n.º 1
0
        public                 Location[] GetHexCoords()
        {
            double h_lat  = this.latitude;
            double h_lon  = this.longitude;
            XY     h_xy   = GEOHEX.Location2XY(h_lon, h_lat);
            double h_x    = h_xy.x;
            double h_y    = h_xy.y;
            double h_deg  = Math.Tan(Math.PI * (60.0 / 180.0));
            double h_size = this.GetHexSize();
            double h_top  = GEOHEX.XY2Location(h_x, h_y + h_deg * h_size).latitude;
            double h_btm  = GEOHEX.XY2Location(h_x, h_y - h_deg * h_size).latitude;

            double h_l  = GEOHEX.XY2Location(h_x - 2 * h_size, h_y).longitude;
            double h_r  = GEOHEX.XY2Location(h_x + 2 * h_size, h_y).longitude;
            double h_cl = GEOHEX.XY2Location(h_x - 1 * h_size, h_y).longitude;
            double h_cr = GEOHEX.XY2Location(h_x + 1 * h_size, h_y).longitude;

            return(new Location[]
            {
                new Location(h_lat, h_l),
                new Location(h_top, h_cl),
                new Location(h_top, h_cr),
                new Location(h_lat, h_r),
                new Location(h_btm, h_cr),
                new Location(h_btm, h_cl)
            });
        }
Ejemplo n.º 2
0
 public void ZoneGetHexSize()
 {
     foreach (String[] v in ParseCsv(GetTestFilePath("resources/GetHexSize_v3.2.csv")))
     {
         double lat               = double.Parse(v[0]);
         double lon               = double.Parse(v[1]);
         int    level             = int.Parse(v[2]);
         double expected_hex_size = double.Parse(v[3]);
         Zone   z = GEOHEX.GetZoneByLocation(lat, lon, level);
         Assert.AreEqual(expected_hex_size, z.GetHexSize(), LOCATION_PRECISION);
     }
 }
Ejemplo n.º 3
0
 public void GetZoneByLocation()
 {
     foreach (string[] v in ParseCsv(GetTestFilePath("resources/GetZoneByLocation_v3.2.csv")))
     {
         double lat   = double.Parse(v[0]);
         double lon   = double.Parse(v[1]);
         int    level = int.Parse(v[2]);
         String code  = v[3];
         Zone   zone  = GEOHEX.GetZoneByLocation(lat, lon, level);
         Assert.AreEqual(code, zone.code);
     }
 }
Ejemplo n.º 4
0
 public void AdjustXY()
 {
     foreach (string[] v in ParseCsv(GetTestFilePath("resources/AdjustXY_v3.2.csv")))
     {
         long   x        = long.Parse(v[0]);
         long   y        = long.Parse(v[1]);
         int    level    = int.Parse(v[2]);
         double ex       = double.Parse(v[3]);
         double ey       = double.Parse(v[4]);
         XY     resultXY = GEOHEX.AdjustXY(x, y, level);
         Assert.AreEqual(ex, resultXY.x, 0);
         Assert.AreEqual(ey, resultXY.y, 0);
     }
 }
Ejemplo n.º 5
0
 public void GetXYByLocation()
 {
     foreach (String[] v in ParseCsv(GetTestFilePath("resources/GetXYByLocation_v3.2.csv")))
     {
         double lat   = double.Parse(v[0]);
         double lon   = double.Parse(v[1]);
         int    level = int.Parse(v[2]);
         double x     = double.Parse(v[3]);
         double y     = double.Parse(v[4]);
         XY     xy    = GEOHEX.GetXYByLocation(lat, lon, level);
         Assert.AreEqual(x, xy.x, LOCATION_PRECISION);
         Assert.AreEqual(y, xy.y, LOCATION_PRECISION);
     }
 }
Ejemplo n.º 6
0
 public void GetZoneByCode()
 {
     foreach (string[] v in ParseCsv(GetTestFilePath("resources/GetZoneByCode_v3.2.csv")))
     {
         double lat   = double.Parse(v[0]);
         double lon   = double.Parse(v[1]);
         int    level = int.Parse(v[2]);
         string code  = v[3];
         Zone   zone  = GEOHEX.GetZoneByCode(code);
         Assert.AreEqual(zone.code, code);
         AssertLatitude(zone.latitude, lat);
         AssertLongitude(zone.longitude, lon);
         Assert.AreEqual(zone.GetLevel(), level);
     }
 }
Ejemplo n.º 7
0
 public void GetZoneByXY()
 {
     foreach (string[] v in ParseCsv(GetTestFilePath("resources/GetZoneByXY_v3.2.csv")))
     {
         double x     = double.Parse(v[0]);
         double y     = double.Parse(v[1]);
         double lat   = double.Parse(v[2]);
         double lon   = double.Parse(v[3]);
         int    level = int.Parse(v[4]);
         String code  = v[5];
         Zone   zone  = GEOHEX.GetZoneByXY(x, y, level);
         AssertLatitude(lat, zone.latitude);
         AssertLongitude(lon, zone.longitude);
         Assert.AreEqual(level, zone.GetLevel());
         Assert.AreEqual(code, zone.code);
     }
 }
Ejemplo n.º 8
0
        public void GetZoneByCode()
        {
            const int MaxRepeat = 100000;

            TimeWatch.Reset();

            {
                string code = "XM";

                TimeWatch.Resume();
                for (int repeat = 0; repeat < MaxRepeat; repeat++)
                {
                    GEOHEX.GetZoneByCode(code);
                }
                TimeWatch.Pause(MaxRepeat);
            }

            TimeWatch.OutputResult("GetZoneByCode");
        }
Ejemplo n.º 9
0
        public void ZoneGetHexCoordsTest()
        {
            TimeWatch.Reset();
            const int MaxReat = 1000000;

            {
                double lat   = 33.35137950146622;
                double lon   = 135.6104480957031;
                int    level = 0;
                Zone   z     = GEOHEX.GetZoneByLocation(lat, lon, level);

                TimeWatch.Resume();
                for (int repeat = 0; repeat < MaxReat; repeat++)
                {
                    z.GetHexCoords();
                }
                TimeWatch.Pause(MaxReat);
            }

            TimeWatch.OutputResult("GetHexCoords");
        }
Ejemplo n.º 10
0
        public void AdjustXY()
        {
            const int MaxRepeat = 10000000;

            TimeWatch.Reset();

            {
                int x     = -10;
                int y     = -10;
                int level = 0;

                TimeWatch.Resume();
                for (int repeat = 0; repeat < MaxRepeat; repeat++)
                {
                    GEOHEX.AdjustXY(x, y, level);
                }
                TimeWatch.Pause(MaxRepeat);
            }

            TimeWatch.OutputResult("AdjustXY");
        }
Ejemplo n.º 11
0
        public void GetZoneByXY()
        {
            const int MaxRepeat = 100000;

            TimeWatch.Reset();

            {
                double x     = 5;
                double y     = -2;
                int    level = 0;

                TimeWatch.Resume();
                for (int repeat = 0; repeat < MaxRepeat; repeat++)
                {
                    GEOHEX.GetZoneByXY(x, y, level);
                }
                TimeWatch.Pause(MaxRepeat);
            }

            TimeWatch.OutputResult("GetZoneByXY");
        }
Ejemplo n.º 12
0
        public void GetXYByLocation()
        {
            const int MaxRepeat = 1000000;

            TimeWatch.Reset();

            {
                double lat   = 33.35137950146622;
                double lon   = 135.6104480957031;
                int    level = 0;

                TimeWatch.Resume();
                for (int repeat = 0; repeat < MaxRepeat; repeat++)
                {
                    GEOHEX.GetXYByLocation(lat, lon, level);
                }
                TimeWatch.Pause(MaxRepeat);
            }

            TimeWatch.OutputResult("GetXYByLocation");
        }
Ejemplo n.º 13
0
        public void ZoneGetHexCoordsTest()
        {
            foreach (string[] v in ParseCsv(GetTestFilePath("resources/GetHexCoords_v3.2.csv")))
            {
                double lat   = double.Parse(v[0]);
                double lon   = double.Parse(v[1]);
                int    level = int.Parse(v[2]);
                Zone   z     = GEOHEX.GetZoneByLocation(lat, lon, level);

                double[][] expectedPolygon =
                {
                    new double[] { double.Parse(v[3]),  double.Parse(v[4])  },
                    new double[] { double.Parse(v[5]),  double.Parse(v[6])  },
                    new double[] { double.Parse(v[7]),  double.Parse(v[8])  },
                    new double[] { double.Parse(v[9]),  double.Parse(v[10]) },
                    new double[] { double.Parse(v[11]), double.Parse(v[12]) },
                    new double[] { double.Parse(v[13]), double.Parse(v[14]) },
                };

                AssertPolygon(expectedPolygon, z.GetHexCoords());
            }
        }
Ejemplo n.º 14
0
 public double GetHexSize()
 {
     return(GEOHEX.CalcHexSize(this.GetLevel()));
 }