Я пытаюсь отобразить плитки OSM с помощью GTRenderer следующим образом:
MapContent map = new MapContent();
String baseURL = "http://<url>"; // OSM url
TileService service = new OSMService("OSM", baseURL);
TileLayer tileLayer = new TileLayer(service);
map.addLayer(tileLayer);
Затем я отправляю мой map
на
public static void saveImage(final MapContent map,
final String file,
ReferencedEnvelope envelope,
final int imageWidth,
String formatName) {
GTRenderer renderer = new StreamingRenderer();
renderer.setMapContent(map);
java.awt.Rectangle imageBounds = null;
ReferencedEnvelope mapBounds = null;
try {
mapBounds = envelope;
double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
imageBounds = new java.awt.Rectangle(
0, 0, imageWidth, (int) Math.round(imageWidth * heightToWidth));
} catch (Exception e) {
// failed to access map layers
throw new RuntimeException(e);
}
BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
Graphics2D gr = image.createGraphics();
gr.setPaint(Color.WHITE);
gr.fill(imageBounds);
try {
renderer.paint(gr, imageBounds, mapBounds);
File fileToSave = new File(file);
ImageIO.write(image, formatName, fileToSave);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Однако он возвращает изображение «белого пространства».
В то же время моя saveImage
процедура прекрасно работает со слоями WMS. В чем может быть проблема этого?
Я также проверил мой сервис OSM по
Tile t = new OSMTile(
new OSMTileIdentifier(79234, 40978, new WebMercatorZoomLevel(17), service.getName()),
service);
BufferedImage image = t.loadImageTileImage(t);
Возвращает правильную плитку.
ИЗД.
Я также нашел следующее сообщение в журнале:
[pool-2-thread-1] org.geotools.tile Reached tile limit of 128. Returning an empty collection.