public QkTile(string qkname, int pixpertile = 256) { this.name = qkname; TileSystem.QuadKeyToTileXY(qkname, out xidx, out yidx, out lod); this.pixpertile = pixpertile; Initialize(); }
public void Add(Bitmap image, string quadKey) { TileSystem.QuadKeyToTileXY(quadKey, out int tileX, out int tileY, out int levelOfDetail); uint relativeScale = TileSystem.MapSize(maxLevelOfDetail - levelOfDetail); //Console.WriteLine(tileX * (int)relativeScale - originX); graphics.DrawImage(image, tileX * relativeScale - originX, tileY * relativeScale - originY, image.Width * relativeScale / 256, image.Height * relativeScale / 256); }
public string GetUri(string qkname) { var uri = ""; switch (mapprov) { case MapProvider.AzureSatelliteRoads: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); uri = "https://atlas.microsoft.com/map/static/png?subscription-key=IdbTbLfVZWE6B5pnqB-ybmzk5KbM_lyQeLtt_YusYNc&api-version=1.0&height=256&width=256&sstyle=satellite_road_labels&zoom=" + lod + "&x=" + tX + "&y=" + tY; break; } case MapProvider.AzureShadedRelief: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); uri = "https://atlas.microsoft.com/map/tile/png?subscription-key=IdbTbLfVZWE6B5pnqB-ybmzk5KbM_lyQeLtt_YusYNc&api-version=1.0&tileSize=256&layer=terra&style=shaded_relief&zoom=" + lod + "&x=" + tX + "&y=" + tY; break; } case MapProvider.OpenStreetMaps: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); uri = "https://a.tile.openstreetmap.org/" + lod + "/" + tX + "/" + tY + ".png"; break; } case MapProvider.Altx: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); var irnd = qut.GetRanInt(0, 3, "goog"); uri = $"https://mt{irnd}.googleapis.com/vt/lyrs=y&hl=en&x={tX}&y={tY}&z={lod}"; break; } case MapProvider.AzureSatellite: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); uri = "https://atlas.microsoft.com/map/imagery/png?subscription-key=IdbTbLfVZWE6B5pnqB-ybmzk5KbM_lyQeLtt_YusYNc&api-version=1.0&style=satellite&zoom=" + lod + "&x=" + tX + "&y=" + tY; break; } case MapProvider.AzureMain: { TileSystem.QuadKeyToTileXY(qkname, out var tX, out var tY, out var lod); uri = "https://atlas.microsoft.com/map/tile/png?subscription-key=IdbTbLfVZWE6B5pnqB-ybmzk5KbM_lyQeLtt_YusYNc&api-version=1.0&layer=basic&style=main&zoom=" + lod + "&x=" + tX + "&y=" + tY; break; } case MapProvider.Bing: { uri = "https://t3.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/" + qkname + "?mkt=en&it=A,G,L,LA&og=30&n=z"; break; } } return(uri); }
public void QuadKeyToTileXY_WithInvalidQuadKey_ShouldThrowArgumentException() { var expected = "Invalid QuadKey digit sequence."; ArgumentException ex = Assert.Throws <ArgumentException>( () => TileSystem.QuadKeyToTileXY("ABC112303121")); Assert.Equal(expected, ex.Message); }
public void QuadKeyToTileXY_ShouldReturnCorrectTileXYCoordinates() { var quadKey = "132303122000"; (int tileX, int tileY, int levelOfDetail)expected = (3424, 1880, 12); (int tileX, int tileY, int levelOfDetail)actual = TileSystem.QuadKeyToTileXY(quadKey); Assert.Equal(expected, actual); }
static bool DoesQuadTouchBB(double latitude1, double longitude1, double latitude2, double longitude2, string quadKey) { double top1 = Math.Max(latitude1, latitude2), bottom1 = Math.Min(latitude1, latitude2), left1 = Math.Min(longitude1, longitude2), right1 = Math.Max(longitude1, longitude2); TileSystem.QuadKeyToTileXY(quadKey, out int tileX, out int tileY, out int levelOfDetail); TileSystem.TileXYToPixelXY(tileX, tileY, out int pixelX, out int pixelY); TileSystem.PixelXYToLatLong(pixelX, pixelY, levelOfDetail, out latitude1, out longitude1); TileSystem.PixelXYToLatLong(pixelX + 256, pixelY + 256, levelOfDetail, out latitude2, out longitude2); double top2 = Math.Max(latitude1, latitude2), bottom2 = Math.Min(latitude1, latitude2), left2 = Math.Min(longitude1, longitude2), right2 = Math.Max(longitude1, longitude2); return(left1 < right2 && left2 < right1 && top1 > bottom2 && top2 > bottom1); }