diff --git a/core/src/main/java/org/locationtech/proj4j/InvalidValueException.java b/core/src/main/java/org/locationtech/proj4j/InvalidValueException.java index eaed61e..1563c55 100755 --- a/core/src/main/java/org/locationtech/proj4j/InvalidValueException.java +++ b/core/src/main/java/org/locationtech/proj4j/InvalidValueException.java @@ -28,4 +28,8 @@ public class InvalidValueException extends Proj4jException { public InvalidValueException(String message) { super(message); } + + public InvalidValueException(String message, Exception cause) { + super(message, cause); + } } diff --git a/core/src/main/java/org/locationtech/proj4j/Proj4jException.java b/core/src/main/java/org/locationtech/proj4j/Proj4jException.java index 32917d3..505b5b7 100755 --- a/core/src/main/java/org/locationtech/proj4j/Proj4jException.java +++ b/core/src/main/java/org/locationtech/proj4j/Proj4jException.java @@ -34,4 +34,8 @@ public Proj4jException() { public Proj4jException(String message) { super(message); } + + public Proj4jException(String message, Exception cause) { + super(message, cause); + } } diff --git a/core/src/main/java/org/locationtech/proj4j/datum/Grid.java b/core/src/main/java/org/locationtech/proj4j/datum/Grid.java index 07bb65e..6984a12 100755 --- a/core/src/main/java/org/locationtech/proj4j/datum/Grid.java +++ b/core/src/main/java/org/locationtech/proj4j/datum/Grid.java @@ -376,7 +376,7 @@ private static DataInputStream resolveGridDefinition(String gridName) throws IOE // search path for grid definition files, but for now we only check the // working directory and the classpath (in that order.) File file = new File(gridName); - if (file.exists()) return new DataInputStream(new FileInputStream(file)); + if (file.exists()) return new DataInputStream(new BufferedInputStream(new FileInputStream(file))); InputStream resource = Grid.class.getResourceAsStream("/proj4/nad/" + gridName); if (resource != null) return new DataInputStream(new BufferedInputStream(resource)); diff --git a/core/src/main/java/org/locationtech/proj4j/parser/Proj4Parser.java b/core/src/main/java/org/locationtech/proj4j/parser/Proj4Parser.java index 684cc95..b15950b 100755 --- a/core/src/main/java/org/locationtech/proj4j/parser/Proj4Parser.java +++ b/core/src/main/java/org/locationtech/proj4j/parser/Proj4Parser.java @@ -205,7 +205,7 @@ private void parseDatum(Map params, DatumParameters datumParam) { try { datumParam.setGrids(Grid.fromNadGrids(nadgrids)); } catch (IOException e) { - throw new InvalidValueException("Unknown nadgrid: " + nadgrids); + throw new InvalidValueException("Unknown nadgrid: " + nadgrids, e); } } } diff --git a/core/src/test/java/org/locationtech/proj4j/datum/NTV2Test.java b/core/src/test/java/org/locationtech/proj4j/datum/NTV2Test.java index de08d52..f46be09 100644 --- a/core/src/test/java/org/locationtech/proj4j/datum/NTV2Test.java +++ b/core/src/test/java/org/locationtech/proj4j/datum/NTV2Test.java @@ -24,6 +24,8 @@ import org.locationtech.proj4j.CoordinateTransformFactory; import org.locationtech.proj4j.ProjCoordinate; +import java.net.URISyntaxException; + /** * Using grid shifts for Catalonia * @see https://geoinquiets.cat/ @@ -77,4 +79,18 @@ public void gridShiftNTV2Inverse() { Assert.assertTrue(expected2.areXOrdinatesEqual(result2, 0.001) && expected2.areYOrdinatesEqual(result2, 0.001)); } + + @Test + public void nadGridExternalTest() throws URISyntaxException { + String path = this.getClass().getResource("/proj4/nad/100800401.gsb").toURI().getPath(); + CRSFactory crsFactory = new CRSFactory(); + + CoordinateReferenceSystem tmercWithNadGridV2 = + crsFactory.createFromParameters("EPSG:2100", + "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +nadgrids=" + + path + " +no_defs" + ); + + Assert.assertEquals(Datum.TYPE_GRIDSHIFT, tmercWithNadGridV2.getDatum().getTransformType()); + } }