public static String getFeedDescription(WMSMapContent context) { StringBuffer description = new StringBuffer(); for (Layer layer : context.layers()) { description.append(layer.getUserData().get("abstract")).append("\n"); } if (description.length() == 0) { return "Auto-generated by geoserver"; } else { description.setLength(description.length() - 1); return description.toString(); } }
public static String getFeedTitle(WMSMapContent context) { StringBuffer title = new StringBuffer(); for (Layer layer : context.layers()) { title.append(layer.getTitle()).append(","); } title.setLength(title.length() - 1); return title.toString(); }
private static String commaSeparatedLayers(WMSMapContent con) { StringBuilder layers = new StringBuilder(); List<Layer> mapLayers = con.layers(); for (int i = 0; i < mapLayers.size(); i++) { layers.append(mapLayers.get(i).getTitle()); if (i < mapLayers.size() - 1) layers.append(","); } return layers.toString(); } }
public AbstractFolderGenerator() { this.size = context.getMapContent().layers().size(); }
/** * Returns the name to be used for the database. Should be unique for this * specific regionated layer. * * @param con * @param layer * @return */ protected String getDatabaseName(WMSMapContent con, Layer layer) throws Exception { int index = con.layers().indexOf(layer); return getDatabaseName(featureType); }
/** * Returns a list of the feature types to be encoded. Will provide a feature type only for the * vector layers, a null will be placed where a layer of different nature is found * @return */ public List<SimpleFeatureType> getFeatureTypes() { List<SimpleFeatureType> results = new ArrayList<SimpleFeatureType>(); for(Layer layer : mapContent.layers()) { if(layer instanceof FeatureLayer) { results.add((SimpleFeatureType) layer.getFeatureSource().getSchema()); } else { results.add(null); } } return results; }
private List<String> styleNames(WMSMapContent mapContent) { if (mapContent.layers().size() != 1 || mapContent.getRequest() == null) return Collections.emptyList(); MapLayerInfo info = mapContent.getRequest().getLayers().get(0); return info.getOtherStyleNames(); }
public WMSMapContent(WMSMapContent other, boolean copyLayers) { this.mapWidth = other.mapWidth; this.mapHeight = other.mapHeight; this.bgColor = other.bgColor; this.transparent = other.transparent; this.tileSize = other.tileSize; this.angle = other.angle; this.callbacks = new ArrayList<>(other.callbacks); this.buffer = other.buffer; this.icm = other.icm; this.request = other.request; if (copyLayers) { this.layers().addAll(other.layers()); } this.getViewport().setBounds(other.getViewport().getBounds()); }
boolean isVectorLayer(Layer layer) { int index = mapContent.layers().indexOf(layer); MapLayerInfo info = mapContent.getRequest().getLayers().get(index); return (info.getType() == MapLayerInfo.TYPE_VECTOR || info.getType() == MapLayerInfo.TYPE_REMOTE_VECTOR); }
for (Layer layer : mapContent.layers()) { String title = layer.getTitle(); if (title != null && !title.equals("")) {
final List<Layer> mapLayers = context.layers(); final List<MapLayerInfo> layerInfos = context.getRequest().getLayers(); for (int i = 0; i < mapLayers.size(); i++) {
/** * SUB filtering is useful for raster images with "high" variation, otherwise we go for NONE, * empirically it provides better compression at lower effort * * @param mapContent */ private FilterType getFilterType(WMSMapContent mapContent) { RasterSymbolizerVisitor visitor = new RasterSymbolizerVisitor(); for (Layer layer : mapContent.layers()) { // check if the style has a raster symbolizer, don't trust the layer type as // we don't know in advance if there is a rendering transformation // WMS cascading is a ugly case, we might be cascading a map that is vector, but // we don't get to know Style style = layer.getStyle(); if (style != null) { style.accept(visitor); if (visitor.highChangeRasterSymbolizer) { return FilterType.FILTER_SUB; } } } return FilterType.FILTER_NONE; }
String getGroundOverlayHRef(Layer layer) { WMSMapContent mapContent = context.getMapContent(); if (context.isKmz()) { // embed the ground overlay in the kmz archive int mapLayerOrder = mapContent.layers().indexOf(layer); String href = "images/layers_" + mapLayerOrder + ".png"; context.addKmzGroundOverlay(href, layer); return href; } else { // refer to a GetMap request return WMSRequests.getGetMapUrl(mapContent.getRequest(), layer, 0, mapContent.getRenderingArea(), new String[] { "format", "image/png", "transparent", "true" }); } }
private void checkByLayerInterpolation(RenderedImageMap imageMap, Interpolation expected) { Layer layer = imageMap.getMapContext().layers().get(0); Interpolation actual = (Interpolation) layer.getUserData().get(StreamingRenderer.BYLAYER_INTERPOLATION); assertEquals(expected, actual); }
if (layerBuffer == 0) { layerBuffer = computeLayerBuffer(map.layers().get(i).getStyle(), scaleDenominator);
/** * Guesses if the map context is made only of coverage layers by looking at the wrapping feature * type. Ugly, if you come up with better means of doing so, fix it. * * @param mapContent */ private boolean hasOnlyCoverages(WMSMapContent mapContent) { for (Layer layer : mapContent.layers()) { FeatureType schema = layer.getFeatureSource().getSchema(); boolean grid = schema.getName().getLocalPart().equals("GridCoverage") && schema.getDescriptor("geom") != null && schema.getDescriptor("grid") != null && !(layer instanceof WMSLayer) && !(layer instanceof WMTSMapLayer); if (!grid) return false; } return true; }
@Test public void testChannelDescription() throws Exception { WMSMapContent map = new WMSMapContent(createGetMapRequest(MockData.BASIC_POLYGONS)); map.addLayer(createMapLayer(MockData.BASIC_POLYGONS)); map.layers().get(0).getUserData().put("abstract", "Test Abstract"); Document document; try { document = getRSSResponse(map, AtomGeoRSSTransformer.GeometryEncoding.LATLONG); } finally { map.dispose(); } Element element = document.getDocumentElement(); assertEquals("rss", element.getNodeName()); Element channel = (Element) element.getElementsByTagName("channel").item(0); NodeList description = channel.getElementsByTagName("description"); assertEquals("Test Abstract", description.item(0).getChildNodes().item(0).getNodeValue()); }
@Override public Feature decorate(Feature feature, KmlEncodingContext context) { Document doc = (Document) feature; // create the screen overlay ScreenOverlay go = doc.createAndAddScreenOverlay(); go.setName("Legend"); go.setOverlayXY(createPixelsVec(0, 0)); go.setScreenXY(createPixelsVec(10, 20)); // build the href Icon icon = go.createAndSetIcon(); String legendOptions = (String) context.getRequest().getRawKvp().get("LEGEND_OPTIONS"); String[] kvpArray = null; if (legendOptions != null) { kvpArray = new String[] { "LEGEND_OPTIONS", legendOptions }; } List<Layer> layerList = context.getMapContent().layers(); Layer[] layers = (Layer[]) layerList.toArray(new Layer[layerList.size()]); icon.setHref(WMSRequests.getGetLegendGraphicUrl(context.getRequest(), layers, kvpArray)); return feature; }
private void encodeLayerSuperOverlay(Document container, int layerIndex, Envelope bounds, int zoomLevel) { Layer layer = mapContent.layers().get(layerIndex); Folder folder = container.createAndAddFolder(); folder.setName(layer.getTitle()); LookAtOptions lookAtOptions = new LookAtOptions(request.getFormatOptions()); if (bounds != null) { LookAtDecoratorFactory lookAtFactory = new LookAtDecoratorFactory(); ReferencedEnvelope layerBounds = layer.getBounds(); CoordinateReferenceSystem layerCRS = layerBounds.getCoordinateReferenceSystem(); if(layerCRS != null && !CRS.equalsIgnoreMetadata(layerCRS, DefaultGeographicCRS.WGS84)) { try { layerBounds = layerBounds.transform(DefaultGeographicCRS.WGS84, true); } catch(Exception e) { throw new ServiceException("Failed to transform the layer bounds for " + layer.getTitle() + " to WGS84", e); } } LookAt la = lookAtFactory.buildLookAt(layerBounds, lookAtOptions, false); folder.setAbstractView(la); } encodeNetworkLinks(folder, layer, bounds, zoomLevel); }
int mapLayerOrder = context.getMapContent().layers().indexOf(layer);