Beispiel #1
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);
        }