private Envelope transform( Envelope bbox, SpatialReference requestSr, SpatialReference nativeSr ) { double[][] points = getBoundarySamplePointsAndEnsureXyOrder( bbox ); CoordinateTransformation transform = CreateCoordinateTransformation( requestSr, nativeSr ); transform.TransformPoints( points ); transform.delete(); double[] minXY = new double[] { points[0][0], points[0][1] }; double[] maxXY = new double[] { points[0][0], points[0][1] }; for ( double[] point : points ) { if ( point[0] < minXY[0] ) { minXY[0] = point[0]; } if ( point[1] < minXY[1] ) { minXY[1] = point[1]; } if ( point[0] > maxXY[0] ) { maxXY[0] = point[0]; } if ( point[1] > maxXY[1] ) { maxXY[1] = point[1]; } } Point min = new DefaultPoint( null, null, null, minXY ); Point max = new DefaultPoint( null, null, null, maxXY ); return new DefaultEnvelope( min, max ); }