All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.debugrastertiles.api.resource.DebugRasterTileResource Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.ext.debugrastertiles.api.resource;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.CacheControl;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import javax.imageio.ImageIO;
import org.locationtech.jts.geom.Envelope;
import org.opentripplanner.api.parameter.MIMEImageFormat;
import org.opentripplanner.api.resource.WebMercatorTile;
import org.opentripplanner.ext.debugrastertiles.MapTile;
import org.opentripplanner.ext.debugrastertiles.TileRenderer;
import org.opentripplanner.ext.debugrastertiles.TileRendererManager;
import org.opentripplanner.standalone.api.OtpServerRequestContext;

/**
 * Slippy raster map tile API for rendering various graph information for inspection/debugging
 * purpose (bike safety factor, connectivity...). Vector tile alternatives should be preferably used
 * instead.
 * 

* Tile rendering goes through TileRendererManager which select the appropriate renderer for the * given layer. * * @author laurent * @see TileRendererManager * @see TileRenderer */ @Path("/debugrastertiles") public class DebugRasterTileResource { private final TileRendererManager tileRendererManager; public DebugRasterTileResource(@Context OtpServerRequestContext serverContext) { this.tileRendererManager = new TileRendererManager( serverContext.graph(), serverContext.defaultRouteRequest().preferences().wheelchair() ); } @GET @Path("/{layer}/{z}/{x}/{y}.{ext}") @Produces("image/*") public Response tileGet( @PathParam("x") int x, @PathParam("y") int y, @PathParam("z") int z, @PathParam("layer") String layer, @PathParam("ext") String ext ) throws Exception { // Re-use analyst Envelope env = WebMercatorTile.tile2Envelope(x, y, z); MapTile mapTile = new MapTile(env, 256, 256); BufferedImage image = tileRendererManager.renderTile(mapTile, layer); MIMEImageFormat format = new MIMEImageFormat("image/" + ext); ByteArrayOutputStream baos = new ByteArrayOutputStream( (image.getWidth() * image.getHeight()) / 4 ); ImageIO.write(image, format.type, baos); CacheControl cc = new CacheControl(); cc.setMaxAge(3600); cc.setNoCache(false); return Response.ok(baos.toByteArray()).type(format.toString()).cacheControl(cc).build(); } /** * Returns all layers. *

* Used in the classic debug client to create a layer menu. */ @GET @Path("layers") @Produces(MediaType.APPLICATION_JSON) public DebugLayersList getLayers() { return new DebugLayersList(tileRendererManager.getRenderers()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy