Hi Martin and Adrian,

We were discussing my image transform/projection problem in IRC yesterday. I've run into a snag that I'm hoping you might be able to shed some light on. I've managed to create a WarpTransform2D and from that a DefaultDerivedCRS for my image. Next I created a GridCoverage2D of my image with the new CRS (at least I think everything up to this point works, it's the next part that causes errors so I'm not sure if one of these previous steps is the problem). When I try to run Operations.resample() on my coverage, I get the attached error.

I'm not sure if there is a problem with the points I've chosen, or some of my code. Any ideas? Also attached is a snippet of my code for this process.

--
Graham Davis
Refractions Research Inc.
gda...@refractions.net

                // create a WarpTransform2D of the source and dest points
                Point2D[] dstCoords = getImagePoints(selectedGeoImage, 
imageMarkers);
                Point2D[] srcCoords = getBasemapPoints(map, basemapMarkers);
                WarpTransform2D warpTransform = new WarpTransform2D(srcCoords, 
dstCoords, 0);

                // create a DefaultDerivedCRS for the CRS of the image
                CoordinateReferenceSystem crs = map.getViewportModel().getCRS();
                DefaultDerivedCRS derivedCRS =
                                new DefaultDerivedCRS("imageCRS",  crs, 
warpTransform,
                                        DefaultCartesianCS.GENERIC_2D);

                // now create a gridcoverage for the new warped image
                BufferedImage image = (BufferedImage) 
selectedGeoImage.getAWTImage();
        GridCoverageFactory factory = new GridCoverageFactory();
        ReferencedEnvelope ref = new 
ReferencedEnvelope(selectedGeoImage.getPosX(),
                        selectedGeoImage.getPosX()+image.getWidth(null), 
selectedGeoImage.getPosY(),
                        selectedGeoImage.getPosY()+image.getHeight(null), 
derivedCRS);
        GridCoverage2D coverage = (GridCoverage2D) 
factory.create("GridCoverage", image, ref); //$NON-NLS-1$

        // resample the new image with the world CRS
        RenderableImage renderableImage = null;
        try {
                Operations ops = new Operations(null);
                Coverage resample = ops.resample(coverage, crs);
                renderableImage = resample.getRenderableImage(0, 0);
        }
        catch (Exception e) {
                e.printStackTrace();
                return;
        }

        BufferedImage buffImage = new 
BufferedImage(selectedGeoImage.getScaledWidth(),
                        selectedGeoImage.getScaledHeight(),
                        
((BufferedImage)selectedGeoImage.getScaledAWTImage()).getType());
        Graphics2D graphics = buffImage.createGraphics();
        graphics.drawRenderableImage(renderableImage, null);
        selectedGeoImage.setScaledAWTImage(buffImage);
java.lang.IllegalArgumentException: Illegal transform of type 
"AffineTransform2D".
        at 
org.geotools.coverage.grid.GridGeometry2D.inverse(GridGeometry2D.java:656)
        at 
org.geotools.coverage.grid.GridGeometry2D.<init>(GridGeometry2D.java:501)
        at 
org.geotools.coverage.grid.GridGeometry2D.<init>(GridGeometry2D.java:452)
        at 
org.geotools.coverage.processing.operation.Resampler2D.reproject(Resampler2D.java:392)
        at 
org.geotools.coverage.processing.operation.Resample.doOperation(Resample.java:207)
        at 
org.geotools.coverage.processing.DefaultProcessor.doOperation(DefaultProcessor.java:307)
        at 
org.geotools.coverage.processing.Operations.doOperation(Operations.java:823)
        at 
org.geotools.coverage.processing.Operations.resample(Operations.java:396)
        at 
net.refractions.udig.imagegeoreference.internal.PlaceMarkersTool.warpImage(PlaceMarkersTool.java:281)
        at 
net.refractions.udig.imagegeoreference.internal.PlaceMarkersTool.mousePressed(PlaceMarkersTool.java:248)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.sendMousePressedEvent(EventJob.java:309)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.runEvent(EventJob.java:83)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.tryForDoubleClick(EventJob.java:161)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.fire(EventJob.java:52)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventHandler.mouseMove(EventHandler.java:175)
        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventHandler.handleEvent(EventHandler.java:40)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at 
net.refractions.udig.internal.ui.UDIGApplication.start(UDIGApplication.java:81)
        at 
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        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:549)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Caused by: org.opengis.referencing.operation.NoninvertibleTransformException: 
Determinant is 0
        at 
org.geotools.referencing.operation.transform.AffineTransform2D.inverse(AffineTransform2D.java:190)
        at 
org.geotools.coverage.grid.GridGeometry2D.inverse(GridGeometry2D.java:654)
        ... 40 more
Caused by: java.awt.geom.NoninvertibleTransformException: Determinant is 0
        at java.awt.geom.AffineTransform.createInverse(Unknown Source)
        at 
org.geotools.referencing.operation.transform.AffineTransform2D.inverse(AffineTransform2D.java:186)
        ... 41 more
------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to