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