diff options
Diffstat (limited to 'jniwrap/README.md')
| -rw-r--r-- | jniwrap/README.md | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/jniwrap/README.md b/jniwrap/README.md new file mode 100644 index 00000000..45772d1f --- /dev/null +++ b/jniwrap/README.md @@ -0,0 +1,120 @@ +# Proj bridge to Java + +This is the third release of JNI wrappers for the main Proj functions. +The first release of JNI wrappers were created by http://www.hydrologis.com. +The second release of JNI wrappers were created by http://www.geoapi.org. + + + +## What is "Proj bridge to Java" + +_Proj bridge to Java_ is a small library of Java classes that wrap a few Proj functions +by using the Java Native Interface (JNI). The main Java class is `org.proj4.PJ`. + + + +### Compilation + +To compile the native part, `configure` has to be run in the Proj directory like this: + + CFLAGS=-Iinclude2 ./configure --with-jni=include1 + +where + +* `include1` = folder in which the header file `jni.h` resides (usually `$JAVA_HOME/include`) +* `include2` = folder in which the header file `jni_md.h` resides (usually `$JAVA_HOME/include/linux` or whatever) + +On MacOS, those two folders are `/Library/Java/JavaVirtualMachines/.../Contents/Home/include/`. + + +The java part is compiled by running Ant inside the `jniwrap` folder. +This will compile the classes and archive them in a JAR file. +It applies to Linux, MacOS and Windows (and virtually to every system supporting java). + + + +### Requirements + +Beyond the ones already put by Proj, you need: + +* For compilation: + * Java 9+, the Java standard development kit version 9 or above + * Ant 1.9.8+, to run the build. +* For execution: + * If a Java version less than the current version on the local machine is desired, + add an `release` attribute in the `javac` task of `build.xml`. + + + +### Documentation + +The documentation is held inside the code and can be retrieved by running +doxygen inside the folder jniwrap. This will create the HTML format +documentation inside of jniwrap/docs + +The standard way to achieve this is to use an Ant target: + + ant do_make_help + + + +### License + +GPL for the first release. +Proj.4 license for the second release. + + + +### Authors + +* Andrea Antonello (andrea.antonello@hydrologis.com) +* Martin Desruisseaux (martin.desruisseaux@geomatys.com) + + + +## Usage & a fast example: + +The `proj.jar` is all is needed to implement Proj support in java applications. +The whole job is done by the Proj library, so there are just a couple of functions that be used. + +The best way is to see everything through an example. +In the following example we create two Coordinate Reference System and transform 3 points. +The Coordinate Reference Systems and the points are hard-coded for simplicity. +Of course, real applications would read them from a file or other data source. + + import org.proj4.*; + import java.util.Arrays; + + /** + * Converts coordinates from EPSG:32632 (WGS 84 / UTM zone 32N) to WGS84, + * then prints the result to the standard output stream. + */ + public class Main { + public static void main(String[] args) throws PJException { + PJ sourcePJ = new PJ("+init=epsg:32632"); // (x,y) axis order + PJ targetPJ = new PJ("+proj=latlong +datum=WGS84"); // (λ,φ) axis order + double[] coordinates = { + 500000, 0, // First coordinate + 400000, 100000, // Second coordinate + 600000, -100000 // Third coordinate + }; + sourcePJ.transform(targetPJ, 2, coordinates, 0, 3); + System.out.println(Arrays.toString(coordinates)); + } + } + + + +### compile the Main code + +we assume that Proj was compiled with the right flag to support the bridge to Java +Therefore we have a library called `proj.jar`. +Thus we compile the `Main.java` with the command: + + javac -classpath <path to the jar library>/proj.jar Main.java + +and execute the created test case with: + + java -cp .:<path to the jar library>/proj.jar -Djava.library.path=<path to the libproj, if needed> Main + +That's it, enjoy! |
