Ignore:
Timestamp:
2025-04-25T18:34:30+02:00 (7 months ago)
Author:
stoecker
Message:

see #24274 - support quadkey style TMS URLs

Location:
applications/viewer/jmapviewer
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/viewer/jmapviewer

    • Property ReleaseVersion changed from 2.24 to 2.25
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TemplatedTMSTileSource.java

    r36223 r36433  
    3030 * <li>{!y} - substituted with Yahoo Y tile number</li>
    3131 * <li>{-y} - substituted with reversed Y tile number</li>
     32 * <li>{quad} - Microsoft style quadkey</li>
    3233 * <li>{apikey} - substituted with API key retrieved for the imagery id</li>
    3334 * <li>{switch:VAL_A,VAL_B,VAL_C,...} - substituted with one of VAL_A, VAL_B, VAL_C. Usually
     
    4546    private static final Pattern PATTERN_Y_YAHOO = Pattern.compile("\\{!y}");
    4647    private static final Pattern PATTERN_NEG_Y   = Pattern.compile("\\{-y}");
     48    private static final Pattern PATTERN_QUAD    = Pattern.compile("\\{quad}");
    4749    private static final Pattern PATTERN_SWITCH  = Pattern.compile("\\{switch:([^}]+)}");
    4850    private static final Pattern PATTERN_HEADER  = Pattern.compile("\\{header\\(([^,]+),([^}]+)\\)}");
    4951    private static final Pattern PATTERN_API_KEY = Pattern.compile("\\{apikey}");
    50     private static final Pattern PATTERN_PARAM  = Pattern.compile("\\{((?:\\d+-)?z(?:oom)?(:?[+-]\\d+)?|x|y|!y|-y|switch:([^}]+))}");
     52    private static final Pattern PATTERN_PARAM  = Pattern.compile("\\{((?:\\d+-)?z(?:oom)?(:?[+-]\\d+)?|x|y|!y|-y|quad|switch:([^}]+))}");
    5153
    5254    // CHECKSTYLE.ON: SingleSpaceSeparator
    5355
    5456    private static final Pattern[] ALL_PATTERNS = {
    55             PATTERN_HEADER, PATTERN_ZOOM, PATTERN_X, PATTERN_Y, PATTERN_Y_YAHOO, PATTERN_NEG_Y, PATTERN_SWITCH, PATTERN_API_KEY
     57            PATTERN_HEADER, PATTERN_ZOOM, PATTERN_X, PATTERN_Y, PATTERN_Y_YAHOO, PATTERN_NEG_Y, PATTERN_SWITCH, PATTERN_API_KEY,
     58            PATTERN_QUAD
    5659    };
    5760
     
    156159                replacement = getRandomPart(randomParts);
    157160                break;
     161            case "quad": // PATTERN_QUAD
     162                replacement = xyzToQuadKey(tilex, tiley, zoom);
     163                break;
    158164            default:
    159165                // handle switch/zoom here, as group will contain parameters and switch will not work
     
    170176        matcher.appendTail(url);
    171177        return url.toString().replace(" ", "%20");
     178    }
     179
     180    /**
     181     * Convert an x y z coordinate to a quadkey
     182     * @param x The x coordinate
     183     * @param y The y coordinate
     184     * @param z The z coordinate
     185     * @return The quadkey
     186     */
     187    private static String xyzToQuadKey(int x, int y, int z) {
     188        final char[] string = new char[z];
     189        for (int i = z; i > 0; i--) {
     190            char digit = '0';
     191            final int mask = 1 << (i - 1);
     192            if ((x & mask) != 0) {
     193                digit++;
     194            }
     195            if ((y & mask) != 0) {
     196                digit += 2;
     197            }
     198            string[z - i] = digit;
     199        }
     200        return String.valueOf(string);
    172201    }
    173202
Note: See TracChangeset for help on using the changeset viewer.