public String getBoundsStr() { if (bounds == null) { return null; } else { return bounds.getMinimum(0) + "," + bounds.getMinimum(1) + "," + bounds.getMaximum(0) + "," + bounds.getMaximum(1); } }
static ReferencedEnvelope findBounds(GridCoverage2D raster) { org.opengis.geometry.Envelope e = raster.getEnvelope(); return new ReferencedEnvelope( e.getMinimum(0), e.getMaximum(0), e.getMinimum(1), e.getMaximum(1), raster.getCoordinateReferenceSystem()); }
public CRSEnvelope(Envelope envelope) { this.srsName = CRS.toSRS(envelope.getCoordinateReferenceSystem()); // this.srsName = epsgCode; this.minX = envelope.getMinimum(0); this.maxX = envelope.getMaximum(0); this.minY = envelope.getMinimum(1); this.maxY = envelope.getMaximum(1); }
/** * Converts a {@link Envelope} into a {@link ReferencedEnvelope} * * @param envelope * @return */ ReferencedEnvelope reference(Envelope envelope) { ReferencedEnvelope env = new ReferencedEnvelope(envelope.getCoordinateReferenceSystem()); env.expandToInclude(envelope.getMinimum(0), envelope.getMinimum(1)); env.expandToInclude(envelope.getMaximum(0), envelope.getMaximum(1)); return env; }
/** * Converts a {@link Envelope} into a {@link ReferencedEnvelope} * * @param envelope * @return */ ReferencedEnvelope reference(Envelope envelope) { ReferencedEnvelope env = new ReferencedEnvelope(envelope.getCoordinateReferenceSystem()); env.expandToInclude(envelope.getMinimum(0), envelope.getMinimum(1)); env.expandToInclude(envelope.getMaximum(0), envelope.getMaximum(1)); return env; }
/** * Gets the maximum number of digits in the integer part of envelope corner coordinates. * * @param env the envelope * @return maximum number of digits */ private int getMaxIntegerLen(Envelope env) { int len = integerPartLen(env.getMinimum(0)); len = Math.max(len, integerPartLen(env.getMinimum(1))); len = Math.max(len, integerPartLen(env.getMaximum(0))); len = Math.max(len, integerPartLen(env.getMaximum(1))); // Add 1 to allow for negative sign return len + 1; }
/** Sets BBOX and SRS using the provided Envelope. */ public void setBBox(Envelope envelope) { String version = properties.getProperty(VERSION); boolean forceXY = version == null || !version.startsWith("1.3"); String srsName = CRS.toSRS(envelope.getCoordinateReferenceSystem()); CoordinateReferenceSystem crs = toServerCRS(srsName, forceXY); Envelope bbox; try { bbox = CRS.transform(envelope, crs); } catch (TransformException e) { bbox = envelope; } StringBuffer sb = new StringBuffer(); sb.append(bbox.getMinimum(0)); sb.append(","); sb.append(bbox.getMinimum(1) + ","); sb.append(bbox.getMaximum(0) + ","); sb.append(bbox.getMaximum(1)); setBBox(sb.toString()); } /**
/** * Creates a new envelope from an existing OGC envelope. * * <p>NOTE: if the envelope is empty, the resulting ReferencedEnvelope will not be. In case this * is needed use {@link #create(org.opengis.geometry.Envelope, CoordinateReferenceSystem) * ReferencedEnvelope.create(envelope, envelope.getCoordinateReferenceSystem())} * * @param envelope The envelope to initialize from. * @throws MismatchedDimensionException if the CRS dimension is not valid. * @since 2.4 */ public ReferencedEnvelope(final org.opengis.geometry.Envelope envelope) throws MismatchedDimensionException { super( envelope.getMinimum(0), envelope.getMaximum(0), envelope.getMinimum(1), envelope.getMaximum(1)); this.crs = envelope.getCoordinateReferenceSystem(); checkCoordinateReferenceSystemDimension(); }
assertEquals(399960, coverageEnvelope.getMinimum(0), 1); assertEquals(5190240, coverageEnvelope.getMinimum(1), 1); assertEquals(509760, coverageEnvelope.getMaximum(0), 1); assertEquals(5300040, coverageEnvelope.getMaximum(1), 1);
public void testTransformWgs84PolarStereographic() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); Envelope2D envelope = new Envelope2D(DefaultGeographicCRS.WGS84); envelope.add(-180, -90); envelope.add(180, 0); Envelope transformed = CRS.transform(envelope, crs); // the result is a square assertEquals(transformed.getMaximum(0), transformed.getMaximum(1), 1d); assertEquals(transformed.getMinimum(0), transformed.getMinimum(1), 1d); assertEquals(Math.abs(transformed.getMinimum(0)), transformed.getMaximum(0), 1d); assertEquals(transformed.getMaximum(0), 1.236739621845986E7, 1d); }
private Ring processBoundsToRing(Envelope bounds, LineSegment segment, final int D) { DirectPosition one = getPositionFactory().createDirectPosition(segment.getStartPoint().getCoordinate()); one.setOrdinate(D, bounds.getMinimum(D)); DirectPosition two = getPositionFactory().createDirectPosition(segment.getEndPoint().getCoordinate()); two.setOrdinate(D, bounds.getMinimum(D)); DirectPosition three = getPositionFactory().createDirectPosition(two.getCoordinate()); three.setOrdinate(D, bounds.getMaximum(D)); DirectPosition four = getPositionFactory().createDirectPosition(one.getCoordinate()); four.setOrdinate(D, bounds.getMaximum(D)); LineSegment edge1 = getGeometryFactory().createLineSegment(one, two); LineSegment edge2 = getGeometryFactory().createLineSegment(two, three); LineSegment edge3 = getGeometryFactory().createLineSegment(three, four); LineSegment edge4 = getGeometryFactory().createLineSegment(four, one); List<OrientableCurve> edges = new ArrayList<OrientableCurve>(); edges.add(createCurve(Arrays.asList(edge1))); edges.add(createCurve(Arrays.asList(edge2))); edges.add(createCurve(Arrays.asList(edge3))); edges.add(createCurve(Arrays.asList(edge4))); return createRing(edges); }
/** * Reduces the given grid geometry by at most one pixel on each side, in an attempt to make it * fit the * * @param gg * @return */ public GridGeometry2D reduce(GridGeometry2D gg) { if (gg.getEnvelope().getMaximum(1) > validArea.getMaximum(1)) { gg = reduceGridGeometrySide(gg, Side.TOP); } if (gg.getEnvelope().getMaximum(0) > validArea.getMaximum(0)) { gg = reduceGridGeometrySide(gg, Side.RIGHT); } if (gg.getEnvelope().getMinimum(1) < validArea.getMinimum(1)) { gg = reduceGridGeometrySide(gg, Side.BOTTOM); } if (gg.getEnvelope().getMinimum(0) < validArea.getMinimum(0)) { gg = reduceGridGeometrySide(gg, Side.LEFT); } return gg; }
public void testTransformLambertAzimuthalEqualAreaWgs84NonPolar() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3035", true); // a bbox that does _not_ include the pole Envelope2D envelope = new Envelope2D(crs); envelope.setFrameFromDiagonal(4029000, 2676000, 4696500, 3567700); Envelope transformed = CRS.transform(envelope, DefaultGeographicCRS.WGS84); // check we did _not_ get the whole range of longitudes assertEquals(5.42, transformed.getMinimum(0), 1e-2); assertEquals(15.88, transformed.getMaximum(0), 1e-2); }
public void testTransformPolarStereographicToOther() throws Exception { CoordinateReferenceSystem antarcticPs = CRS.decode("EPSG:3031", true); CoordinateReferenceSystem australianPs = CRS.decode("EPSG:3032", true); Envelope2D envelope = new Envelope2D(antarcticPs); envelope.add(-4223632.8125, -559082.03125); envelope.add(5053710.9375, 3347167.96875); Envelope transformed = CRS.transform(envelope, australianPs); // has a false easting and northing, we can only check the spans are equal assertEquals(transformed.getSpan(0), transformed.getSpan(1), 1d); assertEquals(transformed.getMaximum(0), 1.2309982175378662E7, 1d); }
@Test public void testZoomlevel3() throws IOException { MBTilesReader reader = new MBTilesReader(getClass().getResource("world_lakes.mbtiles"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D( new GridEnvelope2D(new Rectangle(500, 500)), new ReferencedEnvelope(0, 90.0, -85.0, 0, MBTilesReader.WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read(parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0), 0.01); assertEquals(-20037508.34, gc.getEnvelope().getMinimum(1), 0.01); assertEquals(15028131.25, gc.getEnvelope().getMaximum(0), 0.01); assertEquals(0, gc.getEnvelope().getMaximum(1), 0.01); assertEquals(768, img.getWidth()); assertEquals(1024, img.getHeight()); }
public void testTransformLambertAzimuthalEqualAreaWgs84() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3574", true); Envelope2D envelope = new Envelope2D(crs); // random bbox that does include the pole envelope.add(-3142000, -3142000); envelope.add(3142000, 3142000); Envelope transformed = CRS.transform(envelope, DefaultGeographicCRS.WGS84); // check we got the whole range of longitudes, since the original bbox contains the pole assertEquals(-180d, transformed.getMinimum(0), 0d); assertEquals(180d, transformed.getMaximum(0), 0d); }
@Test public void testZoomlevel4() throws IOException { MBTilesReader reader = new MBTilesReader(getClass().getResource("world_lakes.mbtiles"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D( new GridEnvelope2D(new Rectangle(500, 500)), new ReferencedEnvelope(0, 45.0, -85.0, 0, MBTilesReader.WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read(parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0), 0.01); assertEquals(-20037508.34, gc.getEnvelope().getMinimum(1), 0.01); assertEquals(7514065.62, gc.getEnvelope().getMaximum(0), 0.01); assertEquals(0, gc.getEnvelope().getMaximum(1), 0.01); assertEquals(768, img.getWidth()); assertEquals(2048, img.getHeight()); } }
public void testTransformPolarStereographicWgs84FalseOrigin() throws Exception { // this one has false origins at 6000000/6000000 CoordinateReferenceSystem crs = CRS.decode("EPSG:3032", true); Envelope2D envelope = new Envelope2D(crs); envelope.add(5900000, 5900000); envelope.add(6100000, 6100000); Envelope transformed = CRS.transform(envelope, DefaultGeographicCRS.WGS84); // check we got the whole range of longitudes, since the original bbox contains the pole assertEquals(-180d, transformed.getMinimum(0), 0d); assertEquals(180d, transformed.getMaximum(0), 0d); }
private LineSegment processBoundsToSegment(Envelope bounds) { final int D = 0; CoordinateReferenceSystem crs = bounds.getCoordinateReferenceSystem(); CoordinateSystemAxis axis = crs.getCoordinateSystem().getAxis(D); DirectPosition positionA = getPositionFactory().createDirectPosition(null); DirectPosition positionB = getPositionFactory().createDirectPosition(null); if (axis.getDirection() != AxisDirection.OTHER) { positionA.setOrdinate(D, bounds.getMinimum(D)); positionB.setOrdinate(D, bounds.getMaximum(D)); } return getGeometryFactory().createLineSegment(positionA, positionB); }
public void testTransformPolarStereographicWgs84() throws Exception { CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); Envelope2D envelope = new Envelope2D(crs); // random bbox that does include the pole envelope.add(-4223632.8125, -559082.03125); envelope.add(5053710.9375, 3347167.96875); Envelope transformed = CRS.transform(envelope, DefaultGeographicCRS.WGS84); // check we got the whole range of longitudes, since the original bbox contains the pole assertEquals(-180d, transformed.getMinimum(0), 0d); assertEquals(180d, transformed.getMaximum(0), 0d); // another bbox envelope = new Envelope2D(crs); // random bbox that does not include the pole, but it's really just slightly off it envelope.add(-10718812.640513, -10006238.053703); envelope.add(12228504.561708, -344209.75803081); transformed = CRS.transform(envelope, DefaultGeographicCRS.WGS84); assertEquals(-90, transformed.getMinimum(1), 0.1d); }