我使用uDig设置了图层样式,并将样式导出为SLD文件。然后,我使用Geotools将相同的样式应用于代码中的图层(相同的shapefile)。但是,uDig绘制的地图看起来比我的要好得多。
我的项目使用的是geotools版本21.2,Java 1.8,并且我正在使用Geotools的JMapPane渲染地图。注意到uDig版本看起来比我的更好,我尝试深入研究uDig源代码以查看形状文件的呈现方式。我发现形状文件是通过ShapefileFeatureRenderer在uDig中呈现的,所以我认为。然后,我复制并粘贴了渲染器的初始化代码,并将其应用到我的项目中,但没有发现任何区别。
renderer = new StreamingRenderer();
HashMap<String, Object> rendererHints = new HashMap<String, Object>();
rendererHints.put("optimizedDataLoadingEnabled", true); //$NON-NLS-1$
renderer.setRendererHints(rendererHints);
// renderer.removeRenderListener(StreamingRenderer.DEFAULT_LISTENER);
renderer.addRenderListener(listener);
// JG - these may be overriden by the preferences before use?
RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
renderer.setJava2DHints(hints)
mapPane.setRenderer(renderer);
如何使我的地图渲染与uDig一样好(uDig的渲染在下面的屏幕快照的左侧)?
我希望有人指出正确的方向。任何帮助将不胜感激。
答案 0 :(得分:0)
我认为您应该将默认渲染器保留在原处,只需添加其提示即可,例如:
renderer = frame.getMapPane().getRenderer();
Map<Object, Object> rendererHints = renderer.getRendererHints();
rendererHints.put("optimizedDataLoadingEnabled", true);
renderer.setRendererHints(rendererHints);
RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
renderer.setJava2DHints(hints);
如果这样做不可行,则可能需要查看设置GeoServer渲染的提示,例如here