assertNotNull(cv.getGrid().getGridRange()); assertNotNull(cv.getCRS()); assertNotNull(cv.getGrid().getGridToCRS()); assertEquals(cv.getGrid().getGridRange().getLow(0), 0);
writer.write("<axisName>" + cs.getAxis(i).getName().getCode() + "</axisName>\n"); if (geometry.getGridToCRS() instanceof AffineTransform) { AffineTransform aTX = (AffineTransform) geometry.getGridToCRS(); writer.write("<geoTransform>"); writer.write("<scaleX>" + aTX.getScaleX() + "</scaleX>\n");
MathTransform crsToGrid = meta.getGrid().getGridToCRS().inverse(); GeneralEnvelope requestedGrid = CRS.transform(crsToGrid, requestedEnvelope); double[] spans = new double[requestedGrid.getDimension()];
/** * Creates a new grid geometry with the same values than the given grid geometry. This is a copy * constructor useful when the instance must be a {@code GeneralGridGeometry}. * * @param other The other grid geometry to copy. * @since 2.5 */ public GeneralGridGeometry(final GridGeometry other) { if (other instanceof GeneralGridGeometry) { // Uses this path when possible in order to accept null values. final GeneralGridGeometry general = (GeneralGridGeometry) other; gridRange = general.gridRange; // Do not clone; we assume it is safe to share. gridToCRS = general.gridToCRS; cornerToCRS = general.cornerToCRS; envelope = general.envelope; } else { gridRange = other.getGridRange(); gridToCRS = other.getGridToCRS(); if (gridRange != null && gridToCRS != null) { envelope = new GeneralEnvelope(gridRange, PixelInCell.CELL_CENTER, gridToCRS, null); } else { envelope = null; } } }
final AffineTransform gridToWorld = (AffineTransform) gc.getGridGeometry().getGridToCRS(); final boolean lonFirst = (XAffineTransform.getSwapXY(gridToWorld) != -1);
gridToCRS = gridGeometry.getGridToCRS(); } else { gridToCRS = GridGeometry2D.wrap(gridGeometry).getGridToCRS2D(); if (reducedCRS == sourceCRS) { reduced = source.getEnvelope(); gridToCRS = gridGeometry.getGridToCRS(); } else { reduced = CoverageUtilities.getEnvelope2D(source);
/** * Creates a new grid geometry with the same values than the given grid geometry. This * is a copy constructor useful when the instance must be a {@code GeneralGridGeometry}. * * @param other The other grid geometry to copy. * * @since 2.5 */ public GeneralGridGeometry(final GridGeometry other) { if (other instanceof GeneralGridGeometry) { // Uses this path when possible in order to accept null values. final GeneralGridGeometry general = (GeneralGridGeometry) other; gridRange = general.gridRange; // Do not clone; we assume it is safe to share. gridToCRS = general.gridToCRS; cornerToCRS = general.cornerToCRS; envelope = general.envelope; } else { gridRange = other.getGridRange(); gridToCRS = other.getGridToCRS(); if (gridRange!=null && gridToCRS!=null) { envelope = new GeneralEnvelope(gridRange, PixelInCell.CELL_CENTER, gridToCRS, null); } else { envelope = null; } } }
public NetCDFCRSWriter(NetcdfFileWriter writer, GridCoverage2D sampleGranule) { this.writer = writer; this.sampleGranule = sampleGranule; GridGeometry gridGeometry = sampleGranule.getGridGeometry(); transform = gridGeometry.getGridToCRS(); crs = sampleGranule.getCoordinateReferenceSystem(); netcdfCrsType = NetCDFCoordinateReferenceSystemType.parseCRS(crs); }
public static DirectPosition worldToGridPos(GridCoverage2D srcCoverage, DirectPosition realPos) throws TransformException { GridGeometry gg2D = srcCoverage.getGridGeometry(); MathTransform gridToCRS = gg2D.getGridToCRS(); MathTransform crsToGrid = gridToCRS.inverse(); DirectPosition gridPos = new DirectPosition2D(); crsToGrid.transform(realPos, gridPos); return gridPos; }
GridEnvelope2D guessGridLimits() { try { String coverageName = coverage.getModelObject(); Catalog catalog = GeoServerApplication.get().getCatalog(); CoverageInfo ci = catalog.getCoverageByName(coverageName); ReferencedEnvelope boundsNative = getCoverage.bounds.transform(ci.getCRS(), true); MathTransform w2g = ci.getGrid().getGridToCRS().inverse(); Envelope ge = JTS.transform(boundsNative, w2g); GridEnvelope2D grid = new GridEnvelope2D(new Rectangle(0, 0, (int) ge.getWidth(), (int) ge.getHeight())); return grid; } catch(Exception e) { LOGGER.log(Level.SEVERE, "Failed to guess native grid", e); error("Failed to guess native grid: " + e.getMessage()); return null; } }
GridEnvelope2D guessGridLimits() { try { String coverageName = coverage.getModelObject(); Catalog catalog = GeoServerApplication.get().getCatalog(); CoverageInfo ci = catalog.getCoverageByName(coverageName); ReferencedEnvelope boundsNative = getCoverage.bounds.transform(ci.getCRS(), true); MathTransform w2g = ci.getGrid().getGridToCRS().inverse(); Envelope ge = JTS.transform(boundsNative, w2g); GridEnvelope2D grid = new GridEnvelope2D( new Rectangle(0, 0, (int) ge.getWidth(), (int) ge.getHeight())); return grid; } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to guess native grid", e); error("Failed to guess native grid: " + e.getMessage()); return null; } }
public static Rectangle worldToGrid(GridCoverage2D srcCoverage, ReferencedEnvelope envelope) throws TransformException { GridGeometry gg2D = srcCoverage.getGridGeometry(); MathTransform gridToCRS = gg2D.getGridToCRS(); MathTransform crsToGrid = gridToCRS.inverse(); DirectPosition lcGrid = new DirectPosition2D(); crsToGrid.transform(envelope.getLowerCorner(), lcGrid); DirectPosition ucGrid = new DirectPosition2D(); crsToGrid.transform(envelope.getUpperCorner(), ucGrid); int x = (int) Math.min(lcGrid.getOrdinate(0), ucGrid.getOrdinate(0)); int y = (int) Math.min(lcGrid.getOrdinate(1), ucGrid.getOrdinate(1)); int width = (int) Math.abs(lcGrid.getOrdinate(0) - ucGrid.getOrdinate(0)); int height = (int) Math.abs(lcGrid.getOrdinate(1) - ucGrid.getOrdinate(1)); return new Rectangle(x, y, width, height); }
final GridGeometry originalGrid = ci.getGrid(); final GridEnvelope gridRange = originalGrid.getGridRange(); final AffineTransform2D gridToCRS = (AffineTransform2D) originalGrid.getGridToCRS(); final int gridDimension = (gridToCRS != null ? gridToCRS.getSourceDimensions() : 0);
protected void handleGridCRS(CoverageInfo ci) throws Exception { start("wcs:GridCRS"); element("wcs:GridBaseCRS", urnIdentifier(ci.getCRS())); element("wcs:GridType", GridType.GT2dGridIn2dCrs.getXmlConstant()); // TODO: go back to using the metadata once they can be trusted final LinearTransform tx = (LinearTransform) ci.getGrid().getGridToCRS(); final Matrix matrix = tx.getMatrix(); // origin StringBuffer origins = new StringBuffer(); for (int i = 0; i < matrix.getNumRow() - 1; i++) { origins.append(matrix.getElement(i, matrix.getNumCol() - 1)); if (i < matrix.getNumRow() - 2) origins.append(" "); } element("wcs:GridOrigin", origins.toString()); // offsets StringBuffer offsets = new StringBuffer(); for (int i = 0; i < matrix.getNumRow() - 1; i++) { for (int j = 0; j < matrix.getNumCol() - 1; j++) { offsets.append(matrix.getElement(i, j)); if (j < matrix.getNumCol() - 2) offsets.append(" "); } if (i < matrix.getNumRow() - 2) offsets.append(" "); } element("wcs:GridOffsets", offsets.toString()); element("wcs:GridCS", "urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS"); end("wcs:GridCRS"); }
/** * Returns the "Sample to geophysics" transform as an affine transform, or {@code null} if none. * Note that the returned instance may be an immutable one, not necessarly the default Java2D * implementation. * * @param coverage The coverage for which to get the "grid to CRS" affine transform. * @return The "grid to CRS" affine transform of the given coverage, or {@code null} if none or * if the transform is not affine. */ protected static AffineTransform getAffineTransform(final Coverage coverage) { if (coverage instanceof GridCoverage) { final GridGeometry geometry = ((GridCoverage) coverage).getGridGeometry(); if (geometry != null) { final MathTransform gridToCRS; if (geometry instanceof GridGeometry2D) { gridToCRS = ((GridGeometry2D) geometry).getGridToCRS(); } else { gridToCRS = geometry.getGridToCRS(); } if (gridToCRS instanceof AffineTransform) { return (AffineTransform) gridToCRS; } } } return null; }
private void handleGridCRS(CoverageInfo ci) throws Exception { start("wcs:GridCRS"); element("wcs:GridBaseCRS", urnIdentifier(ci.getCrs())); element("wcs:GridType", GridType.GT2dGridIn2dCrs.getXmlConstant()); // TODO: go back to using the metadata once they can be trusted final LinearTransform tx = (LinearTransform) ci.getGrid().getGridToCRS(); final Matrix matrix = tx.getMatrix(); // origin StringBuffer origins = new StringBuffer(); for (int i = 0; i < matrix.getNumRow() - 1; i++) { origins.append(matrix.getElement(i, matrix.getNumCol() - 1)); if (i < matrix.getNumRow() - 2) origins.append(" "); } element("wcs:GridOrigin", origins.toString()); // offsets StringBuffer offsets = new StringBuffer(); for (int i = 0; i < matrix.getNumRow() - 1; i++) { for (int j = 0; j < matrix.getNumCol() - 1; j++) { offsets.append(matrix.getElement(i, j)); if (j < matrix.getNumCol() - 2) offsets.append(" "); } if (i < matrix.getNumRow() - 2) offsets.append(" "); } element("wcs:GridOffsets", offsets.toString()); element("wcs:GridCS", "urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS"); end("wcs:GridCRS"); }
@Test public void testDefaultGridOrigin() throws Exception { Map<String, Object> raw = new HashMap<String, Object>(baseMap()); final String getLayerId = getLayerId(TASMANIA_BM); raw.put("identifier", getLayerId); raw.put("format", "image/geotiff"); // use a bbox larger than the source raw.put("BoundingBox", "-45,146,-42,149,urn:ogc:def:crs:EPSG:6.6:4326"); GridCoverage[] coverages = executeGetCoverageKvp(raw); AffineTransform2D tx = (AffineTransform2D) coverages[0].getGridGeometry().getGridToCRS(); // take into account the "pixel is area" convention assertEquals(0.0, tx.getTranslateX() + tx.getScaleX() / 2, 1e-9); assertEquals(0.0, tx.getTranslateY() + tx.getScaleY() / 2, 1e-9); }
public void testDomainSubsetRxRy() throws Exception { final AffineTransform2D expectedTx = (AffineTransform2D) baseCoverage.getGridGeometry().getGridToCRS(); final GeneralEnvelope originalEnvelope = (GeneralEnvelope) baseCoverage.getEnvelope(); final GeneralEnvelope newEnvelope=new GeneralEnvelope(originalEnvelope);
catalog.getCoverageByName(TASMANIA_BM.getLocalPart()).getGridCoverage(null, null); final AffineTransform2D expectedTx = (AffineTransform2D) baseCoverage.getGridGeometry().getGridToCRS(); final GeneralEnvelope originalEnvelope = (GeneralEnvelope) baseCoverage.getEnvelope(); final GeneralEnvelope newEnvelope = new GeneralEnvelope(originalEnvelope);
new GridGeometry2D( grid.getGridRange(), grid.getGridToCRS(), resourceInfo.getCRS()));