private void layerGridSubSets(StringBuilder str, TileLayer layer) { Iterator<GridSubset> gridSubsets = layer.getGridSubsets().values().iterator(); while (gridSubsets.hasNext()) { GridSubset gridSubset = gridSubsets.next(); str.append(" <TileMatrixSetLink>"); str.append(" <TileMatrixSet>" + gridSubset.getName() + "</TileMatrixSet>\n"); if (!gridSubset.fullGridSetCoverage()) { String[] levelNames = gridSubset.getGridNames(); long[][] wmtsLimits = gridSubset.getWMTSCoverages(); str.append(" <TileMatrixSetLimits>\n"); for (int i = 0; i < levelNames.length; i++) { str.append(" <TileMatrixLimits>\n"); str.append(" <TileMatrix>" + levelNames[i] + "</TileMatrix>\n"); str.append(" <MinTileRow>" + wmtsLimits[i][1] + "</MinTileRow>\n"); str.append(" <MaxTileRow>" + wmtsLimits[i][3] + "</MaxTileRow>\n"); str.append(" <MinTileCol>" + wmtsLimits[i][0] + "</MinTileCol>\n"); str.append(" <MaxTileCol>" + wmtsLimits[i][2] + "</MaxTileCol>\n"); str.append(" </TileMatrixLimits>\n"); } str.append(" </TileMatrixSetLimits>\n"); } str.append(" </TileMatrixSetLink>"); } }
/** * @see * org.geoserver.wms.ExtendedCapabilitiesProvider#encode(org.geoserver.wms.ExtendedCapabilitiesProvider.Translator, * org.geoserver.wms.WMSInfo, org.geotools.util.Version) */ public void encode(final Translator tx, final WMSInfo wms, final GetCapabilitiesRequest request) throws IOException { Version version = WMS.version(request.getVersion(), true); if (!WMS.VERSION_1_1_1.equals(version) || !isTiled(request)) { return; } String namespacePrefixFilter = request.getNamespace(); Iterable<TileLayer> tileLayers = gwc.getTileLayersByNamespacePrefix(namespacePrefixFilter); for (TileLayer layer : tileLayers) { Set<String> layerGrids = layer.getGridSubsets(); for (String gridId : layerGrids) { GridSubset grid = layer.getGridSubset(gridId); for (MimeType mime : layer.getMimeTypes()) { vendorSpecificTileset(tx, layer, grid, mime.getFormat()); } } } }
private void capabilityVendorSpecific(StringBuilder str) { str.append(" <VendorSpecificCapabilities>\n"); Iterable<TileLayer> layerIter = tld.getLayerList(); for (TileLayer layer : layerIter) { if (!layer.isEnabled()) { continue; } for (String gridSetId : layer.getGridSubsets()) { GridSubset grid = layer.getGridSubset(gridSetId); List<String> formats = new ArrayList<String>(2); if (layer.getMimeTypes() != null) { for (MimeType mime : layer.getMimeTypes()) { formats.add(mime.getFormat()); } } else { formats.add(ImageMime.png.getFormat()); formats.add(ImageMime.jpeg.getFormat()); } List<String> styles = getStyles(layer.getParameterFilters()); for (String format : formats) { for (String style : styles) { try { capabilityVendorSpecificTileset(str, layer, grid, format, style); } catch (GeoWebCacheException e) { log.error(e.getMessage()); } } } } } str.append(" </VendorSpecificCapabilities>\n"); }
private void capabilityLayerInner(StringBuilder str, TileLayer layer) throws GeoWebCacheException { if (layer.isQueryable()) { str.append(" <Layer queryable=\"1\">\n"); } else { str.append(" <Layer>\n"); } str.append(" <Name>" + layer.getName() + "</Name>\n"); if (layer.getMetaInformation() != null) { LayerMetaInformation metaInfo = layer.getMetaInformation(); str.append(" <Title>" + metaInfo.getTitle() + "</Title>\n"); str.append(" <Abstract>" + metaInfo.getDescription() + "</Abstract>\n"); } else { str.append(" <Title>" + layer.getName() + "</Title>\n"); } TreeSet<SRS> srsSet = new TreeSet<SRS>(); StringBuilder boundingBoxStr = new StringBuilder(); for (String gridSetId : layer.getGridSubsets()) { GridSubset curGridSubSet = layer.getGridSubset(gridSetId); SRS curSRS = curGridSubSet.getSRS(); if (!srsSet.contains(curSRS)) { str.append(" <SRS>" + curSRS.toString() + "</SRS>\n"); // Save bounding boxes for later String[] bs = boundsPrep(curGridSubSet.getCoverageBestFitBounds()); boundingBoxStr.append( " <BoundingBox SRS=\"" + curGridSubSet.getSRS().toString() + "\" minx=\"" + bs[0] + "\" miny=\"" + bs[1] + "\" maxx=\"" + bs[2] + "\" maxy=\"" + bs[3] + "\"/>\n"); srsSet.add(curSRS); } } GridSubset epsg4326GridSubSet = layer.getGridSubsetForSRS(SRS.getEPSG4326()); if (null != epsg4326GridSubSet) { String[] bs = boundsPrep(epsg4326GridSubSet.getCoverageBestFitBounds()); str.append( " <LatLonBoundingBox minx=\"" + bs[0] + "\" miny=\"" + bs[1] + "\" maxx=\"" + bs[2] + "\" maxy=\"" + bs[3] + "\"/>\n"); } // Bounding boxes gathered earlier str.append(boundingBoxStr); // WMS 1.1 Dimensions if (layer.getParameterFilters() != null) { StringBuilder dims = new StringBuilder(); StringBuilder extents = new StringBuilder(); for (ParameterFilter parameterFilter : layer.getParameterFilters()) { if (parameterFilter instanceof WMSDimensionProvider) { ((WMSDimensionProvider) parameterFilter).appendDimensionElement(dims, " "); ((WMSDimensionProvider) parameterFilter).appendExtentElement(extents, " "); } } if (dims.length() > 0 && extents.length() > 0) { str.append(dims); str.append(extents); } } // TODO style? str.append(" </Layer>\n"); }
public static void makeMap( TileLayerDispatcher tileLayerDispatcher, GridSetBroker gridSetBroker, String action, HttpServletRequest request, HttpServletResponse response) throws GeoWebCacheException { String page = null; // Do we have a layer, or should we make a list? if (action != null) { String layerName = ServletUtils.URLDecode(action, request.getCharacterEncoding()); TileLayer layer = tileLayerDispatcher.getTileLayer(layerName); String rawGridSet = request.getParameter("gridSet"); String gridSetStr = null; if (rawGridSet != null) gridSetStr = ServletUtils.URLDecode(rawGridSet, request.getCharacterEncoding()); if (gridSetStr == null) { gridSetStr = request.getParameter("srs"); if (gridSetStr == null) { gridSetStr = layer.getGridSubsets().iterator().next(); } } String formatStr = request.getParameter("format"); if (formatStr != null) { if (!layer.supportsFormat(formatStr)) { throw new GeoWebCacheException("Unknow or unsupported format " + formatStr); } } else { formatStr = layer.getDefaultMimeType().getFormat(); } if (request.getPathInfo().startsWith("/demo")) { // Running in GeoServer page = generateHTML(layer, gridSetStr, formatStr, true); } else { page = generateHTML(layer, gridSetStr, formatStr, false); } } else { if (request.getRequestURI().endsWith("/")) { try { String reqUri = request.getRequestURI(); response.sendRedirect( response.encodeRedirectURL(reqUri.substring(0, reqUri.length() - 1))); } catch (IOException e) { e.printStackTrace(); } return; } else { page = generateHTML(tileLayerDispatcher, gridSetBroker); } } response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); try { response.getOutputStream().write(page.getBytes()); } catch (IOException ioe) { throw new GeoWebCacheException("failed to render HTML"); } }
private static String tableRows( TileLayerDispatcher tileLayerDispatcher, GridSetBroker gridSetBroker) throws GeoWebCacheException { StringBuffer buf = new StringBuffer(); Set<String> layerList = new TreeSet<String>(tileLayerDispatcher.getLayerNames()); for (String layerName : layerList) { TileLayer layer = tileLayerDispatcher.getTileLayer(layerName); buf.append( "<tr><td style=\"min-width: 100px;\"><strong>" + layer.getName() + "</strong><br />\n"); buf.append("<a href=\"rest/seed/" + layer.getName() + "\">Seed this layer</a>\n"); buf.append("</td><td>" + layer.isEnabled() + "</td>"); buf.append("<td><table width=\"100%\">"); int count = 0; for (String gridSetId : layer.getGridSubsets()) { GridSubset gridSubset = layer.getGridSubset(gridSetId); String gridSetName = gridSubset.getName(); if (gridSetName.length() > 20) { gridSetName = gridSetName.substring(0, 20) + "..."; } buf.append("<tr><td style=\"width: 170px;\">").append(gridSetName); buf.append("</td><td>OpenLayers: ["); Iterator<MimeType> mimeIter = layer.getMimeTypes().iterator(); boolean prependComma = false; while (mimeIter.hasNext()) { MimeType mime = mimeIter.next(); if (mime instanceof ImageMime) { if (prependComma) { buf.append(", "); } else { prependComma = true; } buf.append(generateDemoUrl(layer.getName(), gridSubset.getName(), (ImageMime) mime)); } } buf.append("]</td><td>\n"); if (gridSubset.getName().equals(gridSetBroker.WORLD_EPSG4326.getName())) { buf.append(" KML: ["); String prefix = ""; prependComma = false; Iterator<MimeType> kmlIter = layer.getMimeTypes().iterator(); while (kmlIter.hasNext()) { MimeType mime = kmlIter.next(); if (mime instanceof ImageMime || mime == XMLMime.kml) { if (prependComma) { buf.append(", "); } else { prependComma = true; } buf.append( "<a href=\"" + prefix + "service/kml/" + layer.getName() + "." + mime.getFileExtension() + ".kml\">" + mime.getFileExtension() + "</a>"); } else if (mime == XMLMime.kmz) { if (prependComma) { buf.append(", "); } else { prependComma = true; } buf.append( "<a href=\"" + prefix + "service/kml/" + layer.getName() + ".kml.kmz\">kmz</a>"); } } buf.append("]"); } else { // No Google Earth support } buf.append("</td></tr>"); count++; } // if(count == 0) { // buf.append("<tr><td colspan=\"2\"><i>None</i></td></tr>\n"); // } buf.append("</table></td>\n"); buf.append("</tr>\n"); } return buf.toString(); }