Beispiel #1
0
        /// <param name="tileX">
        ///            the X number of the tile. </param>
        /// <param name="tileY">
        ///            the Y number of the tile. </param>
        /// <param name="zoomLevel">
        ///            the zoom level of the tile. </param>
        /// <exception cref="IllegalArgumentException">
        ///             if any of the parameters is invalid. </exception>
        public Tile(int tileX, int tileY, sbyte zoomLevel, int tileSize)
        {
            if (tileX < 0)
            {
                throw new System.ArgumentException("tileX must not be negative: " + tileX);
            }
            else if (tileY < 0)
            {
                throw new System.ArgumentException("tileY must not be negative: " + tileY);
            }
            else if (zoomLevel < 0)
            {
                throw new System.ArgumentException("zoomLevel must not be negative: " + zoomLevel);
            }

            long maxTileNumber = GetMaxTileNumber(zoomLevel);

            if (tileX > maxTileNumber)
            {
                throw new System.ArgumentException("invalid tileX number on zoom level " + zoomLevel + ": " + tileX);
            }
            else if (tileY > maxTileNumber)
            {
                throw new System.ArgumentException("invalid tileY number on zoom level " + zoomLevel + ": " + tileY);
            }

            this.TileSize  = tileSize;
            this.TileX     = tileX;
            this.TileY     = tileY;
            this.ZoomLevel = zoomLevel;
            this.MapSize   = MercatorProjection.GetMapSize(zoomLevel, tileSize);
        }
Beispiel #2
0
        private static double calculatePriority(Tile tile, MapPosition mapPosition, int tileSize)
        {
            double tileLatitude  = MercatorProjection.TileYToLatitude(tile.TileY, tile.ZoomLevel);
            double tileLongitude = MercatorProjection.TileXToLongitude(tile.TileX, tile.ZoomLevel);

            int    halfTileSize = tileSize / 2;
            long   mapSize      = MercatorProjection.GetMapSize(mapPosition.ZoomLevel, tileSize);
            double tilePixelX   = MercatorProjection.LongitudeToPixelX(tileLongitude, mapSize) + halfTileSize;
            double tilePixelY   = MercatorProjection.LatitudeToPixelY(tileLatitude, mapSize) + halfTileSize;

            LatLong latLong   = mapPosition.LatLong;
            double  mapPixelX = MercatorProjection.LongitudeToPixelX(latLong.Longitude, mapSize);
            double  mapPixelY = MercatorProjection.LatitudeToPixelY(latLong.Latitude, mapSize);

            double diffPixel = Math.Sqrt(Math.Pow(tilePixelX - mapPixelX, 2) + Math.Pow(tilePixelY - mapPixelY, 2));
            int    diffZoom  = Math.Abs(tile.ZoomLevel - mapPosition.ZoomLevel);

            return(diffPixel + PENALTY_PER_ZOOM_LEVEL * tileSize * diffZoom);
        }