001// License: GPL. For details, see Readme.txt file. 002package org.openstreetmap.gui.jmapviewer.tilesources; 003 004/** 005 * OSM Tile source. 006 */ 007public class OsmTileSource { 008 009 /** 010 * The default "Mapnik" OSM tile source. 011 */ 012 public static class Mapnik extends AbstractOsmTileSource { 013 014 private static final String PATTERN = "https://%s.tile.openstreetmap.org"; 015 016 private static final String[] SERVER = { "a", "b", "c" }; 017 018 private int SERVER_NUM = 0; 019 020 /** 021 * Constructs a new {@code "Mapnik"} tile source. 022 */ 023 public Mapnik() { 024 super("Mapnik", PATTERN); 025 } 026 027 @Override 028 public String getBaseUrl() { 029 String url = String.format(this.baseUrl, new Object[] { SERVER[SERVER_NUM] }); 030 SERVER_NUM = (SERVER_NUM + 1) % SERVER.length; 031 return url; 032 } 033 034 @Override 035 public int getMaxZoom() { 036 return 19; 037 } 038 039 public TileUpdate getTileUpdate() { 040 return TileUpdate.IfNoneMatch; 041 } 042 } 043 044 /** 045 * The "Cycle Map" OSM tile source. 046 */ 047 public static class CycleMap extends AbstractOsmTileSource { 048 049 private static final String PATTERN = "http://%s.tile.opencyclemap.org/cycle"; 050 051 private static final String[] SERVER = { "a", "b", "c" }; 052 053 private int SERVER_NUM = 0; 054 055 /** 056 * Constructs a new {@code CycleMap} tile source. 057 */ 058 public CycleMap() { 059 super("Cyclemap", PATTERN); 060 } 061 062 @Override 063 public String getBaseUrl() { 064 String url = String.format(this.baseUrl, new Object[] { SERVER[SERVER_NUM] }); 065 SERVER_NUM = (SERVER_NUM + 1) % SERVER.length; 066 return url; 067 } 068 069 @Override 070 public int getMaxZoom() { 071 return 18; 072 } 073 074 public TileUpdate getTileUpdate() { 075 return TileUpdate.LastModified; 076 } 077 } 078}