Beispiel #1
0
    public static Vector2 GetMeterCoords(int levelofDetail, double lat, double lng)
    {
        TileSystem.LatLongToPixelXY(lat, lng, levelofDetail, out var pixx, out var pixy);
        var fak = (float)TileSystem.GroundResolution(lat, levelofDetail);
        var rv  = new Vector2(pixx * fak, pixy * fak);

        return(rv);
    }
Beispiel #2
0
    public static Vector2d GetMeterCoords(int levelofDetail, double lat, double lng)
    {
        TileSystem.LatLongToPixelXYdouble(lat, lng, levelofDetail, out double pixx, out double pixy);
        var faklng = TileSystem.GroundResolution(lat, levelofDetail);
        var faklat = TileSystem.GroundResolution(0, levelofDetail);
        var rv     = new Vector2d(pixx * faklng, pixy * faklat);

        return(rv);
    }
Beispiel #3
0
    public static LatLng GetLatLngOffSetMeter(int levelofDetail, LatLng ll, double metoffx, double metoffy)
    {
        var pixll     = GetV2iPixelCoordFromLatLng(levelofDetail, ll);
        var groundres = TileSystem.GroundResolution(ll.lat, levelofDetail);
        var pixoff    = new Vector2Int((int)(metoffx / groundres), (int)(metoffy / groundres));
        var rvpix     = pixll + pixoff;
        var rvll      = GetLngLatFromPixelCoords(levelofDetail, rvpix);

        return(rvll);
    }
Beispiel #4
0
        private bool BuildTileInfoLabel()
        {
            preprocessError = null;
            Point start = Util.LatLonToTileCoordinate((double)nudStartLat.Value, (double)nudStartLon.Value, (int)nudZoom.Value);
            Point end   = Util.LatLonToTileCoordinate((double)nudEndLat.Value, (double)nudEndLon.Value, (int)nudZoom.Value);

            if (start.X > end.X || start.Y > end.Y)
            {
                lblTileInfo.Text = preprocessError = "Upper-Left coordinate must be above and to the left of Lower-Right coordinate.";
                return(false);
            }
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Upper-Left Tile:");
            sb.AppendLine("    " + start.X + ", " + start.Y);
            sb.AppendLine();
            sb.AppendLine("Lower-Right Tile:");
            sb.AppendLine("    " + end.X + ", " + end.Y);
            sb.AppendLine();
            long tilesWide  = ((end.X - (long)start.X) + 1);
            long tilesTall  = ((end.Y - (long)start.Y) + 1);
            long totalTiles = tilesWide * tilesTall;

            sb.AppendLine("Tiles: " + totalTiles + " (" + tilesWide + "x" + tilesTall + ")");
            long maxMapTiles = 10922;

            if (totalTiles > 10922)
            {
                sb.AppendLine("TOO MANY MAP TILES!");
                sb.AppendLine("Please choose " + maxMapTiles + " or fewer!");
                preprocessError = "You have currently selected " + totalTiles + " map tiles, which is too large for this program to stitch because the uncompressed format would exceed the capacity of a byte array." + Environment.NewLine + Environment.NewLine + "Please reduce the selection size or zoom out until you have selected " + maxMapTiles + " or fewer tiles.";
            }
            sb.AppendLine();
            sb.AppendLine("Megapixels: " + ((tilesWide * 256 * tilesTall * 256) / 1000000d).ToString("0") + " (" + (tilesWide * 256) + "x" + (tilesTall * 256) + ")");
            sb.AppendLine();
            double groundRes = TileSystem.GroundResolution((double)nudStartLat.Value, (int)nudZoom.Value);
            string sGroundRes;

            if (groundRes > 0 && groundRes < 1)
            {
                sGroundRes = (1 / groundRes).ToString("0.##") + " pixels/m";
            }
            else
            {
                sGroundRes = groundRes.ToString("0.##") + " m/pixel";
            }
            sb.Append("Ground Resolution: " + sGroundRes);
            lblTileInfo.Text = sb.ToString();
            return(true);
        }
Beispiel #5
0
    public void Initialize(LatLng ll1, LatLng ll2, string name = "llbox", int lod = 16, LatLng org = null)
    {
        this.name = name;
        this.lod  = lod;
        var latmin = System.Math.Min(ll1.lat, ll2.lat);
        var lngmin = System.Math.Min(ll1.lng, ll2.lng);

        minll = new LatLng(latmin, lngmin);
        var latmax = System.Math.Max(ll1.lat, ll2.lat);
        var lngmax = System.Math.Max(ll1.lng, ll2.lng);

        maxll = new LatLng(latmax, lngmax);
        var latmid = (latmin + latmax) / 2;
        var lngmid = (lngmin + lngmax) / 2;

        midll = new LatLng(latmid, lngmid);
        orgll = (org == null ? midll : org);
        groundMetersPerPixel = (float)(TileSystem.GroundResolution(latmid, lod));
        extent = maxll - minll;
        var p1 = ll1.GetMeterCoords(lod);
        var p2 = ll2.GetMeterCoords(lod);

        diagonalInMeters = (float)LatLng.DistanceV2d(p1, p2);
        pixbl            = GetBottomLeft().GetPixelCoords(lod);
        pixbr            = GetBottomRight().GetPixelCoords(lod);
        pixul            = GetUpperLeft().GetPixelCoords(lod);
        pixur            = GetUpperRight().GetPixelCoords(lod);
        var op = pixul;
//        Debug.Log($"pix bl:{pixbl-op} br:{pixbr-op} ul:{pixul-op} ur:{pixur-op}");
        var dpx = (Vector2.Distance(pixbl, pixbr) + Vector2.Distance(pixul, pixur)) / 2;
        var dpy = (Vector2.Distance(pixul, pixbl) + Vector2.Distance(pixur, pixbr)) / 2;// long live symmetry

        extentPixels = new Vector2(dpx, dpy);
        metbl        = GetBottomLeft().GetMeterCoords(lod);
        metbr        = GetBottomRight().GetMeterCoords(lod);
        metul        = GetUpperLeft().GetMeterCoords(lod);
        metur        = GetUpperRight().GetMeterCoords(lod);
        var om = metbl;
//        Debug.Log($"met bl:{diff2d(metbl,om)} br:{diff2d(metbr,om)} ul:{diff2d(metul,om)} ur:{diff2d(metur,om)}");
        var dmx = (LatLng.DistanceV2d(metbl, metbr) + LatLng.DistanceV2d(metul, metur)) / 2;
        var d1  = LatLng.DistanceV2d(metul, metbl);
        var d2  = LatLng.DistanceV2d(metur, metbr);
        var dmy = (LatLng.DistanceV2d(metul, metbl) + LatLng.DistanceV2d(metur, metbr)) / 2;// long live symmetry

        extentMeters  = new Vector2((float)dmx, (float)dmy);
        extentMeters1 = groundMetersPerPixel * extentPixels;
    }
Beispiel #6
0
    public void InitMapFromLatLongBox(LegLatLngBox latLngBox, int lod)
    {
        mapcoord = new LegMapCoordblock(this);
        var llbl        = latLngBox.GetBottomLeft();
        var llul        = latLngBox.GetUpperLeft();
        var llbr        = latLngBox.GetBottomRight();
        var llur        = latLngBox.GetUpperRight();
        var llmp        = latLngBox.GetMidPoint();
        var pixToMeters = TileSystem.GroundResolution(llmp.lat, lod);
        var orgpix      = llbl.GetPixelCoords(lod);
        var orgmeters   = new Vector2d(orgpix.x * pixToMeters, orgpix.y * pixToMeters);

        mapcoord.AddRowLngLat(llbl, lod, pixToMeters, orgmeters);
        mapcoord.AddRowLngLat(llul, lod, pixToMeters, orgmeters);
        mapcoord.AddRowLngLat(llbr, lod, pixToMeters, orgmeters);
        mapcoord.AddRowLngLat(llur, lod, pixToMeters, orgmeters);
        mapcoord.AddRowLngLat(llmp, lod, pixToMeters, orgmeters);
        glbllm      = this;
        maps.latmap = mapcoord.DoRegression("lat = x + z");
        maps.lngmap = mapcoord.DoRegression("lng = x + z");
        maps.xmap   = mapcoord.DoRegression("x = lng + lat");
        maps.zmap   = mapcoord.DoRegression("z = lng + lat");
    }