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); }
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); }
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); }
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); }
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; }
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"); }