Dear list,

I’m having troubles adding a GridCoverage2D layer to a SwtMapPane. The goal
is to avoid the creation of a GeoTiff to display the GridCoverage2D, which
drastically reduces the application performance.


Geotools offers the possibility of adding a GridCoverage or a
GridCoverage2D as a layer directly to the SwtMapPane, nevertheless, I
always get the following error:



GRAVE: org.geotools.feature.simple.SimpleFeatureImpl cannot be cast to
org.geotools.coverage.grid.GridCoverage2D

*java.lang.ClassCastException*:
org.geotools.feature.simple.SimpleFeatureImpl cannot be cast to
org.geotools.coverage.grid.GridCoverage2D

       at org.geotools.renderer.lite.StreamingRenderer.processSymbolizers(
*StreamingRenderer.java:2446*)

       at org.geotools.renderer.lite.StreamingRenderer.process(
*StreamingRenderer.java:2385*)

       at org.geotools.renderer.lite.StreamingRenderer.drawPlain(
*StreamingRenderer.java:2241*)

       at org.geotools.renderer.lite.StreamingRenderer.processStylers(
*StreamingRenderer.java:1940*)

       at org.geotools.renderer.lite.StreamingRenderer.paint(
*StreamingRenderer.java:773*)

       at org.geotools.swt.SwtMapPane.handleEvent(*SwtMapPane.java:1120*)

       at org.eclipse.swt.widgets.EventTable.sendEvent(*EventTable.java:84*)

       at org.eclipse.swt.widgets.Display.sendEvent(*Display.java:4353*)

       at org.eclipse.swt.widgets.Widget.sendEvent(*Widget.java:1061*)

       at org.eclipse.swt.widgets.Widget.sendEvent(*Widget.java:1085*)

       at org.eclipse.swt.widgets.Widget.sendEvent(*Widget.java:1070*)

       at org.eclipse.swt.widgets.Composite.WM_PAINT(*Composite.java:1491*)

       at org.eclipse.swt.widgets.Control.windowProc(*Control.java:4667*)

       at org.eclipse.swt.widgets.Canvas.windowProc(*Canvas.java:339*)

       at org.eclipse.swt.widgets.Display.windowProc(*Display.java:5023*)

       at org.eclipse.swt.internal.win32.OS.DispatchMessageW(*Native Method*
)

       at org.eclipse.swt.internal.win32.OS.DispatchMessage(*OS.java:2549*)

       at org.eclipse.swt.widgets.Display.readAndDispatch(
*Display.java:3759*)

       at
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(
*PartRenderingEngine.java:1151*)

       at org.eclipse.core.databinding.observable.Realm.runWithDefault(
*Realm.java:331*)

       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(
*PartRenderingEngine.java:1032*)

       at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(
*E4Workbench.java:148*)

       at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(
*E4Application.java:164*)

       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(
*EclipseAppHandle.java:196*)

       at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(
*EclipseAppLauncher.java:134*)

       at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(
*EclipseAppLauncher.java:104*)

       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
*EclipseStarter.java:380*)

       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
*EclipseStarter.java:235*)

       at sun.reflect.NativeMethodAccessorImpl.invoke0(*Native Method*)

       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

       at java.lang.reflect.Method.invoke(Unknown Source)

       at org.eclipse.equinox.launcher.Main.invokeFramework(*Main.java:648*)

       at org.eclipse.equinox.launcher.Main.basicRun(*Main.java:603*)

       at org.eclipse.equinox.launcher.Main.run(*Main.java:1465*)

       at org.eclipse.equinox.launcher.Main.main(*Main.java:1438*)



Here’s the code I’ve used:



*final* final GridCoverage2D *gridCoverage* = gcf.create("GridCoverage",
baseImage, mapPane.getDisplayArea());

       *final* GridCoverage2D *geoGridCoverage* =
gridCoverage.view(ViewType.*GEOPHYSICS*);



       Display.*getDefault*().syncExec(*new* Runnable() {

             @Override

              *public* *void* *run*() {

                    mapPane.getMapContext().addLayer(geoGridCoverage,
style);

                   gridCoverage.dispose(*true*);

                    geoGridCoverage.dispose(*true*);

              }
       });

Any advice on the "best practices" for such use-case?


In case you want to understand the question's context: I am developing a
TMS client to overlay tiles on a SwtMapPane as they are received from the
remote server.


Thanks in advance for any helping hand :)


-Piero
------------------------------------------------------------------------------
_______________________________________________
GeoTools-GT2-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to