public void apply(ConveyorTile convTile) throws RequestFilterException { TileLayer tl = convTile.getLayer(); // SRS srs = convTile.getSRS(); GridSubset gridSubset = tl.getGridSubset(convTile.getGridSetId()); int z = (int) convTile.getTileIndex()[2]; long[] gridCoverage = gridSubset.getCoverage(z); // Figure out the radius long width = gridCoverage[2] - gridCoverage[0]; long height = gridCoverage[3] - gridCoverage[1]; // Rounding must always err on the side of // caution if you want to use KML hierarchies long maxRad = 0; if (width > height) { maxRad = (width / 4) + 1; } else { maxRad = (height / 4) + 1; } // Figure out how the requested bounds relate long midX = gridCoverage[0] + width / 2; long midY = gridCoverage[1] + height / 2; long xDist = midX - convTile.getTileIndex()[0]; long yDist = midY - convTile.getTileIndex()[1]; long rad = Math.round(Math.sqrt(xDist * xDist + yDist * yDist)); if (rad > maxRad) { throw new BlankTileException(this); } }
/** * @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()); } } } }
@Test public void testParseMaplinkAndLayersWithGeoJSONFromJsonTest() throws IOException, ParseException, com.vividsolutions.jts.io.ParseException { XMLConfiguration config = shared.getConfig(); TileLayer tileLayer = config.getTileLayer(layerTemplate); GridSubset gridSubset = tileLayer.getGridSubset(gridSubsetName); MapLayerJSONParser layerJsonParser = new MapLayerJSONParser(props); MaplinkGeoJsonParser parser = new MaplinkGeoJsonParser(); parser.setDebug(true); InputStream inp = MapProducer.class.getResourceAsStream("geojsPrintTest.json"); try { assertTrue(MapLinkGeoJsonParseContext.Default.getPm().buildMap); Map<String, ?> root = parser.parse(inp); assertTrue(root.size() != 0); assertTrue(root.get("layers") != null); assertTrue(root.get("maplink") != null); assertTrue(root.get("state") != null); assertTrue(root.get("layers") != null); MapLink mapLink = layerJsonParser.parseMapLinkJSON(root, shared.getGf(), gridSubset.getResolutions()); assertTrue(mapLink != null); } finally { inp.close(); } }
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"); }
private static String generateHTML( TileLayer layer, String gridSetStr, String formatStr, boolean asPlugin) throws GeoWebCacheException { String layerName = layer.getName(); GridSubset gridSubset = layer.getGridSubset(gridSetStr); BoundingBox bbox = gridSubset.getGridSetBounds(); BoundingBox zoomBounds = gridSubset.getOriginalExtent(); String res = "resolutions: " + Arrays.toString(gridSubset.getResolutions()) + ",\n"; String units = "units: \"" + gridSubset.getGridSet().guessMapUnits() + "\",\n"; String openLayersPath; if (asPlugin) { openLayersPath = "../openlayers/OpenLayers.js"; } else { openLayersPath = "../openlayers/OpenLayers.js"; } String page = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head>\n" + "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n" + "<title>" + layerName + " " + gridSubset.getName() + " " + formatStr + "</title>\n" + "<style type=\"text/css\">\n" + "body { font-family: sans-serif; font-weight: bold; font-size: .8em; }\n" + "body { border: 0px; margin: 0px; padding: 0px; }\n" + "#map { width: 85%; height: 85%; border: 0px; padding: 0px; }\n" + "</style>\n" + "<script src=\"" + openLayersPath + "\"></script> \n" + "<script type=\"text/javascript\"> \n" + "var map, demolayer; \n" + " // sets the chosen modifiable parameter \n" + " function setParam(name, value){ \n" + " str = \"demolayer.mergeNewParams({\" + name + \": '\" + value + \"'})\" \n" + " // alert(str); \n" + " eval(str); \n" + " } \n" + "OpenLayers.DOTS_PER_INCH = " + gridSubset.getDotsPerInch() + ";\n" + "OpenLayers.Util.onImageLoadErrorColor = 'transparent';\n" + "function init(){\n" + "var mapOptions = { \n" + res + "projection: new OpenLayers.Projection('" + gridSubset.getSRS().toString() + "'),\n" + "maxExtent: new OpenLayers.Bounds(" + bbox.toString() + "),\n" + units + "controls: []\n" + "};\n" + "map = new OpenLayers.Map('map', mapOptions );\n" + "map.addControl(new OpenLayers.Control.PanZoomBar({\n" + " position: new OpenLayers.Pixel(2, 15)\n" + "}));\n" + "map.addControl(new OpenLayers.Control.Navigation());\n" + "map.addControl(new OpenLayers.Control.Scale($('scale')));\n" + "map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));\n" + "demolayer = new OpenLayers.Layer.WMS(\n" + "\"" + layerName + "\",\"../service/wms\",\n" + "{layers: '" + layerName + "', format: '" + formatStr + "' },\n" + "{ tileSize: new OpenLayers.Size(" + gridSubset.getTileWidth() + "," + gridSubset.getTileHeight() + ")"; /* * If the gridset has a top left tile origin, lets tell that to open layers. Otherwise it'll * calculate tile bounds based on the bbox bottom left corner, leading to misaligned * requests. */ GridSet gridSet = gridSubset.getGridSet(); if (gridSet.isTopLeftAligned()) { page += ",\n tileOrigin: new OpenLayers.LonLat(" + bbox.getMinX() + ", " + bbox.getMaxY() + ")"; } page += "});\n" + "map.addLayer(demolayer);\n" + "map.zoomToExtent(new OpenLayers.Bounds(" + zoomBounds.toString() + "));\n" + "// The following is just for GetFeatureInfo, which is not cached. Most people do not need this \n" + "map.events.register('click', map, function (e) {\n" + " document.getElementById('nodelist').innerHTML = \"Loading... please wait...\";\n" + " var params = {\n" + " REQUEST: \"GetFeatureInfo\",\n" + " EXCEPTIONS: \"application/vnd.ogc.se_xml\",\n" + " BBOX: map.getExtent().toBBOX(),\n" + " X: e.xy.x,\n" + " Y: e.xy.y,\n" + " INFO_FORMAT: 'text/html',\n" + " QUERY_LAYERS: map.layers[0].params.LAYERS,\n" + " FEATURE_COUNT: 50,\n" + " Layers: '" + layerName + "',\n" + " Styles: '',\n" + " Srs: '" + gridSubset.getSRS().toString() + "',\n" + " WIDTH: map.size.w,\n" + " HEIGHT: map.size.h,\n" + " format: \"" + formatStr + "\" };\n" + " OpenLayers.loadURL(\"../service/wms\", params, this, setHTML, setHTML);\n" + " OpenLayers.Event.stop(e);\n" + " });\n" + "}\n" + "function setHTML(response){\n" + " document.getElementById('nodelist').innerHTML = response.responseText;\n" + "};\n" + "</script>\n" + "</head>\n" + "<body onload=\"init()\">\n" + "<div id=\"params\">" + makeModifiableParameters(layer) + "</div>\n" + "<div id=\"map\"></div>\n" + "<div id=\"nodelist\"></div>\n" + "</body>\n" + "</html>"; return page; }
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(); }
@Test @SuppressWarnings({"rawtypes", "unchecked"}) public void testParseMaplinkAndLayersWithGeoJSONFromJsonEmbedded() throws IOException, ParseException, com.vividsolutions.jts.io.ParseException { XMLConfiguration config = shared.getConfig(); TileLayer tileLayer = config.getTileLayer(layerTemplate); GridSubset gridSubset = tileLayer.getGridSubset(gridSubsetName); MapLayerJSONParser layerJsonParser = new MapLayerJSONParser(props); MaplinkGeoJsonParser parser = new MaplinkGeoJsonParser(); parser.setDebug(true); InputStream inp = MapProducer.class.getResourceAsStream("action_route_parcel.json"); try { assertTrue(MapLinkGeoJsonParseContext.Default.getPm().buildMap); Map<String, ?> root = parser.parse(inp); assertTrue(root.size() != 0); assertTrue(root.get("layers") != null); assertTrue(root.get("maplink") != null); assertTrue(root.get("state") != null); assertTrue(root.get("layers") != null); assertTrue(((List<Map<String, Object>>) root.get("layers")).size() == 11); assertTrue( "geojson".equals(((List<Map<String, Object>>) root.get("layers")).get(10).get("type"))); assertTrue( ((List<Map<String, Object>>) root.get("layers")).get(10).get(".data") instanceof FeatureCollection); FeatureCollection fc10 = (FeatureCollection) ((List<Map<String, Object>>) root.get("layers")).get(10).get(".data"); FeatureIterator fi = fc10.features(); assertTrue(fi.hasNext()); Feature f = fc10.features().next(); assertTrue(f != null); assertTrue(f.getProperty("prop0") != null); assertTrue(f.getProperty("prop0").getValue() != null); Object pv = f.getProperty("prop0").getValue(); assertTrue(pv instanceof String); assertTrue("value0forPoints".equals(pv)); assertTrue(f.getDefaultGeometryProperty() != null); GeometryAttribute g = f.getDefaultGeometryProperty(); assertTrue(g.getValue() != null); Object gv = g.getValue(); assertTrue(gv instanceof Point); Point pt = (Point) gv; System.out.println(pt.toText()); Style style = null; new FeatureLayer(fc10, style); MapLink mapLink = layerJsonParser.parseMapLinkJSON(root, shared.getGf(), gridSubset.getResolutions()); /* assertions */ assertTrue(mapLink != null); assertTrue(mapLink.getScale() != null); assertTrue(mapLink.getCentre() != null); assertTrue(Double.valueOf(530163).equals(mapLink.getCentre().getX())); assertTrue(Double.valueOf(6754057).equals(mapLink.getCentre().getY())); assertTrue(Integer.valueOf(11).equals(mapLink.getZoom())); assertTrue(mapLink.getMapLinkLayers() != null); assertTrue(mapLink.getMapLinkLayers().size() == 4); assertTrue("base_35".equals(mapLink.getMapLinkLayers().get(0).getLayerid())); assertTrue(mapLink.getMapLinkLayers().get(0).getGeom() == null); } finally { inp.close(); } }