/** * This transforms all external graphics references that are relative to absolute. This is a * workaround to be able to visualize png and svg in relative mode, which doesn't work right now * in geotools. See: http://jira.codehaus.org/browse/GEOT-3235 * * <p>This will not be necessary any more as soon as the geotools bug is fixed. * * @param relatedFile the related shapefile. * @param style the style to check. */ private void makeGraphicsAbsolute(File relatedFile, Style style) { File parentFolder = relatedFile.getParentFile(); Rule[] rules = SLDs.rules(style); for (Rule rule : rules) { Symbolizer[] onlineResource = rule.getSymbolizers(); for (Symbolizer symbolizer : onlineResource) { if (symbolizer instanceof PointSymbolizer) { PointSymbolizer pointSymbolizer = (PointSymbolizer) symbolizer; Graphic graphic = SLDs.graphic(pointSymbolizer); List<GraphicalSymbol> graphicalSymbols = graphic.graphicalSymbols(); for (GraphicalSymbol graphicalSymbol : graphicalSymbols) { if (graphicalSymbol instanceof ExternalGraphic) { ExternalGraphic externalGraphic = (ExternalGraphic) graphicalSymbol; try { URL location = externalGraphic.getLocation(); File urlToFile = URLUtils.urlToFile(location); if (urlToFile != null && !urlToFile.exists()) { File newFile = new File(parentFolder, urlToFile.getPath()); if (newFile.exists()) { externalGraphic.setLocation(newFile.toURI().toURL()); } } } catch (MalformedURLException e) { e.printStackTrace(); } } } } } } }
@SuppressWarnings("nls") private void setExternalGraphicPath(String externalGraphicPath, ExternalGraphic extGraphic) throws MalformedURLException { URL url = null; File f = new File(externalGraphicPath); String format = Utilities.getFormat(externalGraphicPath); if (!f.exists()) { if (externalGraphicPath.startsWith("http://") || externalGraphicPath.startsWith("file:")) { url = new URL(externalGraphicPath); } } if (url == null) { url = f.toURI().toURL(); if (externalGraphicPath.equals("")) { url = new URL("file:"); } } extGraphic.setLocation(url); extGraphic.setFormat(format); }
private String getExternalGraphicPath(ExternalGraphic extGraphic) throws MalformedURLException { if (extGraphic == null) { return ""; } URL location = extGraphic.getLocation(); String urlString = location.toExternalForm(); if (urlString.startsWith("http://")) { return urlString; } else { File urlToFile = URLUtils.urlToFile(location); if (urlString.equals("file:")) { return ""; } else { return urlToFile.getAbsolutePath(); } } }