aboutsummaryrefslogtreecommitdiff
path: root/jniwrap/native/jniproj.c
diff options
context:
space:
mode:
Diffstat (limited to 'jniwrap/native/jniproj.c')
-rw-r--r--jniwrap/native/jniproj.c170
1 files changed, 170 insertions, 0 deletions
diff --git a/jniwrap/native/jniproj.c b/jniwrap/native/jniproj.c
new file mode 100644
index 00000000..5e180f95
--- /dev/null
+++ b/jniwrap/native/jniproj.c
@@ -0,0 +1,170 @@
+/*!
+* \file jniproj.c
+*
+* \brief
+* functions used by the java/jni wrappers of jproj4
+*
+*
+* $Id$
+*
+* \author Antonello Andrea
+* \date Wed Oct 20 23:10:24 CEST 2004
+*/
+#include <projects.h>
+#include "org_proj4_Projections.h"
+#include <jni.h>
+
+#define arraysize 300
+
+/*!
+ * \brief
+ * executes reprojection
+ *
+ * JNI informations:
+ * Class: org_proj4_Projections
+ * Method: transform
+ * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V
+ *
+ *
+ * \param env - parameter used by jni (see JNI specification)
+ * \param parent - parameter used by jni (see JNI specification)
+ * \param firstcoord - array of x coordinates
+ * \param secondcoord - array of y coordinates
+ * \param values - array of z coordinates
+ * \param src - definition of the source projection
+ * \param dest - definition of the destination projection
+ * \param pcount
+ * \param poffset
+*/
+JNIEXPORT void JNICALL Java_org_proj4_Projections_transform
+ (JNIEnv * env, jobject parent, jdoubleArray firstcoord, jdoubleArray secondcoord, jdoubleArray values, jstring src, jstring dest, jlong pcount, jint poffset)
+{
+ int i;
+ projPJ src_pj, dst_pj;
+ char * srcproj_def = (char *) (*env)->GetStringUTFChars (env, src, 0);
+ char * destproj_def = (char *) (*env)->GetStringUTFChars (env, dest, 0);
+
+ if (!(src_pj = pj_init_plus(srcproj_def)))
+ exit(1);
+ if (!(dst_pj = pj_init_plus(destproj_def)))
+ exit(1);
+
+ double *xcoord = (* env)-> GetDoubleArrayElements(env, firstcoord, NULL);
+ double *ycoord = (* env) -> GetDoubleArrayElements(env, secondcoord, NULL);
+ double *zcoord = (* env) -> GetDoubleArrayElements(env, values, NULL);
+
+ jint sizeofdata = (*env)->GetArrayLength(env, firstcoord);
+ for(i = 0;i<sizeofdata;i++)
+ {
+ pj_transform( src_pj, dst_pj, pcount,poffset, xcoord, ycoord, zcoord);
+ xcoord++;
+ ycoord++;
+ zcoord++;
+ }
+ xcoord = xcoord - sizeofdata;
+ ycoord = ycoord - sizeofdata;
+ zcoord = zcoord - sizeofdata;
+
+ (* env)->ReleaseDoubleArrayElements(env,firstcoord,(jdouble *) xcoord,JNI_COMMIT);
+ (* env)->ReleaseDoubleArrayElements(env,secondcoord,(jdouble *) ycoord,JNI_COMMIT);
+ (* env)->ReleaseDoubleArrayElements(env,values,(jdouble *) zcoord,JNI_COMMIT);
+
+ pj_free( src_pj );
+ pj_free( dst_pj );
+}
+
+/*!
+ * \brief
+ * retrieves projection parameters
+ *
+ * JNI informations:
+ * Class: org_proj4_Projections
+ * Method: getProjInfo
+ * Signature: (Ljava/lang/String;)Ljava/lang/String;
+ *
+ *
+ * \param env - parameter used by jni (see JNI specification)
+ * \param parent - parameter used by jni (see JNI specification)
+ * \param projdefinition - definition of the projection
+*/
+JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo
+ (JNIEnv * env, jobject parent, jstring projdefinition)
+{
+ PJ *pj;
+ char * pjdesc;
+ char info[arraysize];
+
+ char * proj_def = (char *) (*env)->GetStringUTFChars (env, projdefinition, 0);
+
+ if (!(pj = pj_init_plus(proj_def)))
+ exit(1);
+
+ // put together all the info of the projection and free the pointer to pjdesc
+ pjdesc = pj_get_def(pj, 0);
+ strcpy(info,pjdesc);
+ pj_dalloc(pjdesc);
+
+ return (*env)->NewStringUTF(env,info);
+}
+
+
+/*!
+ * \brief
+ * retrieves ellipsoid parameters
+ *
+ * JNI informations:
+ * Class: org_proj4_Projections
+ * Method: getEllipsInfo
+ * Signature: (Ljava/lang/String;)Ljava/lang/String;
+ *
+ *
+ * \param env - parameter used by jni (see JNI specification)
+ * \param parent - parameter used by jni (see JNI specification)
+ * \param projdefinition - definition of the projection
+*/
+JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo
+ (JNIEnv * env, jobject parent, jstring projdefinition)
+{
+ PJ *pj;
+ char * pjdesc;
+ char ellipseinfo[arraysize];
+ char temp[50];
+
+ char * proj_def = (char *) (*env)->GetStringUTFChars (env, projdefinition, 0);
+
+ if (!(pj = pj_init_plus(proj_def)))
+ exit(1);
+
+ // put together all the info of the ellipsoid
+/* sprintf(temp,"name: %s;", pj->descr); */
+ sprintf(temp,"name: not available;");
+ strcpy(ellipseinfo,temp);
+ sprintf(temp,"a: %lf;", pj->a);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"e: %lf;", pj->e);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"es: %lf;", pj->es);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"ra: %lf;", pj->ra);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"one_es: %lf;", pj->one_es);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"rone_es: %lf;", pj->rone_es);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"lam0: %lf;", pj->lam0);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"phi0: %lf;", pj->phi0);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"x0: %lf;", pj->x0);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"y0: %lf;", pj->y0);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"k0: %lf;", pj->k0);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"to_meter: %lf;", pj->to_meter);
+ strcat(ellipseinfo,temp);
+ sprintf(temp,"fr_meter: %lf;", pj->fr_meter);
+ strcat(ellipseinfo,temp);
+
+ return (*env)->NewStringUTF(env,ellipseinfo);
+}