Skip to content

Commit

Permalink
Renamed jniwrap/README as README.md for better integration with GitHub.
Browse files Browse the repository at this point in the history
Reformatted the README.md content for Markdown syntax.
Updated some content to reflect the changes applied in build.xml file.
  • Loading branch information
desruisseaux committed Apr 27, 2018
1 parent 27d881a commit f477d60
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 129 deletions.
2 changes: 1 addition & 1 deletion jniwrap/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
EXTRA_DIST = build.xml doxygen.cfg README
EXTRA_DIST = build.xml doxygen.cfg README.md

SUBDIRS = org

Expand Down
128 changes: 0 additions & 128 deletions jniwrap/README

This file was deleted.

120 changes: 120 additions & 0 deletions jniwrap/README.md
Original file line number Diff line number Diff line change
@@ -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!

0 comments on commit f477d60

Please sign in to comment.