Beispiel #1
0
 public QkTile(string qkname, int pixpertile = 256)
 {
     this.name = qkname;
     TileSystem.QuadKeyToTileXY(qkname, out xidx, out yidx, out lod);
     this.pixpertile = pixpertile;
     Initialize();
 }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
        }
Beispiel #6
0
        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);
        }