diff --git a/modules/extension/tile-client/src/main/java/org/geotools/tile/Tile.java b/modules/extension/tile-client/src/main/java/org/geotools/tile/Tile.java index 4e8c67defc4..6818586a123 100644 --- a/modules/extension/tile-client/src/main/java/org/geotools/tile/Tile.java +++ b/modules/extension/tile-client/src/main/java/org/geotools/tile/Tile.java @@ -22,9 +22,14 @@ import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; +import java.io.InputStream; import java.net.URL; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.geotools.data.ows.HTTPClient; +import org.geotools.data.ows.SimpleHttpClient; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.image.io.ImageIOExt; import org.geotools.util.logging.Logging; @@ -171,8 +176,19 @@ public BufferedImage getBufferedImage() { } } + @Override public BufferedImage loadImageTileImage(Tile tile) throws IOException { - return ImageIOExt.readBufferedImage(getUrl()); + + Map headers = new HashMap<>(); + headers.put("User-Agent", "Geotools Http client"); + try (InputStream is = setupInputStream(getUrl(), headers)) { + return ImageIOExt.readBufferedImage(is); + } + } + + private InputStream setupInputStream(URL url, Map headers) throws IOException { + HTTPClient client = new SimpleHttpClient(); + return client.get(url, headers).getResponseStream(); } /** @@ -372,6 +388,7 @@ public boolean equals(Object other) { return getUrl().equals(((Tile) other).getUrl()); } + @Override public String toString() { return this.getId(); // this.getUrl().toString(); } diff --git a/modules/extension/tile-client/src/test/java/org/geotools/tile/impl/osm/OSMTileTest.java b/modules/extension/tile-client/src/test/java/org/geotools/tile/impl/osm/OSMTileTest.java index 10519d542d6..a7f8be4ab84 100644 --- a/modules/extension/tile-client/src/test/java/org/geotools/tile/impl/osm/OSMTileTest.java +++ b/modules/extension/tile-client/src/test/java/org/geotools/tile/impl/osm/OSMTileTest.java @@ -16,6 +16,11 @@ */ package org.geotools.tile.impl.osm; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.awt.image.BufferedImage; +import java.io.IOException; import org.geotools.tile.Tile; import org.geotools.tile.TileService; import org.geotools.tile.impl.WebMercatorZoomLevel; @@ -49,4 +54,17 @@ public void testGetURL() { Assert.assertEquals( "http://tile.openstreetmap.org/5/10/12.png", this.tile.getUrl().toString()); } + + /** + * Make sure we can actually fetch the image of the tile for display. + * + * @throws IOException + */ + @Test + public void testFetchTile() throws IOException { + BufferedImage img = tile.loadImageTileImage(tile); + assertNotNull(img); + assertEquals("wrong height", OSMTile.DEFAULT_TILE_SIZE, img.getHeight()); + assertEquals("wrong width", OSMTile.DEFAULT_TILE_SIZE, img.getWidth()); + } }