Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libjni-gdal / src / gdal_interfaz.c @ 834

History | View | Annotate | Download (10.3 KB)

1 716 igbrotru
 /**********************************************************************
2
 * $Id$
3
 *
4
 * Name:     gdal_interfaz.c
5
 * Project:  JGDAL. Interface java to gdal (Frank Warmerdam).
6
 * Purpose:  dataset's Basic Funcions.
7
 * Author:   Nacho Brodin, brodin_ign@gva.es
8
 *
9
 **********************************************************************/
10
/*Copyright (C) 2004  Nacho Brodin <brodin_ign@gva.es>
11

12
 This program is free software; you can redistribute it and/or
13
 modify it under the terms of the GNU General Public License
14
 as published by the Free Software Foundation; either version 2
15
 of the License, or (at your option) any later version.
16

17
 This program is distributed in the hope that it will be useful,
18
 but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
 GNU General Public License for more details.
21

22
 You should have received a copy of the GNU General Public License
23
 along with this program; if not, write to the Free Software
24
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
 */
26
27
28
#include <jni.h>
29 791 igbrotru
#include "es_gva_cit_jgdal_Gdal.h"
30
#include "es_gva_cit_jgdal_JNIBase.h"
31 716 igbrotru
#include "gdal.h"
32
#include "cpl_string.h"
33
34
35
36
/******************************************************************************/
37
//                                                                Open
38
/******************************************************************************/
39
40
41 791 igbrotru
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_openNat
42 716 igbrotru
  (JNIEnv *env, jobject obj, jstring pszF, jint acc){
43
44
          const char *pszFilename;
45
          GDALDatasetH *dataset;
46
          jlong jresult = 0 ;
47
          FILE *fich;
48
49
          pszFilename = (*env)->GetStringUTFChars(env, pszF, 0);
50
51
        fich=fopen( pszFilename, "r" );
52
        if( fich )
53
                fclose(fich);
54
        else
55
           {
56
              fclose(fich);
57
              return -1;
58
           }
59
60
          GDALAllRegister();
61
          dataset = GDALOpen((char *)pszFilename,(int)acc);
62
63
          *(GDALDatasetH **)&jresult = dataset;
64
65
    (*env)->ReleaseStringUTFChars(env, pszF, pszFilename);
66
67
68
          if(dataset==NULL)return -1;
69
          else return jresult;
70
71
  }
72
73
74
/******************************************************************************/
75
//                                                                GetRasterXSize
76
/******************************************************************************/
77
78
79 791 igbrotru
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterXSizeNat
80 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
81
82
          int res=-1;
83
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
84
85
          dt = *(GDALDatasetH **)&cPtr;
86
          if(dt!=NULL)
87
                  res = GDALGetRasterXSize(dt);
88
89
90
          return res;
91
92
  }
93
94
95
/******************************************************************************/
96
//                                                                GetRasterYSize
97
/******************************************************************************/
98
99
100 791 igbrotru
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterYSizeNat
101 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
102
103
          int res=-1;
104
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
105
106
          dt = *(GDALDatasetH **)&cPtr;
107
          if(dt!=NULL)
108
                  res = GDALGetRasterYSize(dt);
109
110
111
          return res;
112
113
  }
114
115
/******************************************************************************/
116
//                                                                GetRasterCount
117
/******************************************************************************/
118
119
120 791 igbrotru
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterCountNat
121 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
122
123
          int res=-1;
124
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
125
126
          dt = *(GDALDatasetH **)&cPtr;
127
          if(dt!=NULL)
128
                  res = GDALGetRasterCount(dt);
129
130
131
          return res;
132
  }
133
134
135
/******************************************************************************/
136
//                                                                 GetMetadata
137
/******************************************************************************/
138
139
140 791 igbrotru
JNIEXPORT jobjectArray JNICALL Java_es_gva_cit_jgdal_Gdal_getMetadataNat
141 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr, jstring pszDomain){
142
143
           char                **papszMetadata;
144
           GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
145
           int i,nmetadatos;
146
147
           jclass class_string;
148
           jobjectArray vector_str;
149
150
           //Obtenemos los metadatos sobre papszMetadata
151
152
           dt = *(GDALDatasetH **)&cPtr;
153
154
155
           if(dt!=NULL){
156
                 papszMetadata = GDALGetMetadata( dt, NULL );
157
158
159
                 //Si hay metadatos devolvemos creamos el vector de String de java y los devolvemos
160
161
                 nmetadatos = CSLCount(papszMetadata);
162
             if( nmetadatos > 0 )
163
              {
164
                class_string = (*env)->FindClass (env, "java/lang/String");
165
                         vector_str=(*env)->NewObjectArray(env, nmetadatos, class_string, (*env)->NewStringUTF(env,""));
166
167
                         //Cargamos los metadatos
168
169
                for( i = 0; papszMetadata[i] != NULL; i++ )
170
                        (*env)->SetObjectArrayElement(env,vector_str,i,(*env)->NewStringUTF(env,papszMetadata[i]));
171
172
                           return vector_str;
173
              }
174
           }
175
176
           return NULL;
177
  }
178
179
180
181
182
183
/******************************************************************************/
184
//                                                                GetRasterBand
185
/******************************************************************************/
186
187
188 791 igbrotru
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getRasterBandNat
189 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr, jint hBand){
190
191
192
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
193
          GDALRasterBandH *rasterband=NULL;
194
          jlong jresult = 0;
195
196
        dt = *(GDALDatasetH **)&cPtr;
197
198
    if(dt!=NULL){
199
                rasterband = GDALGetRasterBand(dt,(int)hBand);
200
                *(GDALDatasetH **)&jresult = rasterband;
201
    }else return -1;
202
203
   return jresult;
204
205
  }
206
207
208
/******************************************************************************/
209
//                                                                GetGeoTransform
210
/******************************************************************************/
211
212
213 791 igbrotru
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getGeoTransformNat
214 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr, jobject gt){
215
216
          jclass class_geotransform;
217
          jfieldID id_campo;
218
          double adfgt[6];
219
          jdoubleArray doublearray;
220
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
221
222
223
        dt = *(GDALDatasetH **)&cPtr;
224
225
          if(dt!=NULL){
226
227
          //Obtenemos el objeto java que contendr? el vector geotransform
228
229
230
                  class_geotransform = (*env)->GetObjectClass(env, gt);
231
                  id_campo = (*env)->GetFieldID(env, class_geotransform, "adfgeotransform", "[D");
232
233
234
           //Cargamos el buffer llamando a GDALRasterIO
235
236
237
                  if(GDALGetGeoTransform(dt,adfgt)==CE_None){
238
                          doublearray = (*env)->NewDoubleArray(env,6);
239
                    if(doublearray!=NULL){
240
                                  (*env)->SetDoubleArrayRegion(env, doublearray, 0, 6,(jdouble *)adfgt);
241
                                  (*env)->SetObjectField(env, gt, id_campo, doublearray);
242
                        }
243
                  }else return -1;
244
245
          }else return -1;
246
247
          return 0;
248
249
  }
250
251
/******************************************************************************/
252
//                                                                setGeoTransformNat
253
/******************************************************************************/
254
255 791 igbrotru
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setGeoTransformNat
256 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr, jobject gt){
257
258
          jclass class_geotransform;
259
          jfieldID id_campo;
260
          double adfgt[6];
261
          jdoubleArray doublearray;
262
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
263
264
          dt = *(GDALDatasetH **)&cPtr;
265
266
          if(dt!=NULL){
267
268
                  //Obtenemos los valores pasados en el vector gt
269
270
                  class_geotransform = (*env)->GetObjectClass(env, gt);
271
                  id_campo = (*env)->GetFieldID(env, class_geotransform, "adfgeotransform", "[D");
272
                  doublearray =(jdoubleArray)(*env)->GetObjectField(env, gt, id_campo);
273
                  (*env)->GetDoubleArrayRegion(env,doublearray,0,6,(jdouble *)adfgt);
274
275
                  GDALSetGeoTransform( dt, adfgt );
276
                  return 0;
277
          }
278
          return -1;
279
280
  }
281
282
/******************************************************************************/
283
//                                                                GetProjectionRef
284
/******************************************************************************/
285
286
287 791 igbrotru
JNIEXPORT jstring JNICALL Java_es_gva_cit_jgdal_Gdal_getProjectionRefNat
288 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
289
290
        char *pszProjection=NULL;
291
          jstring pszP=NULL;
292
        GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
293
294
295
          dt = *(GDALDatasetH **)&cPtr;
296
297
          //Llamamos a la funci?n y cargamos el jstring con el resultado
298
299
        if(dt!=NULL){
300
                   pszProjection = (char *) GDALGetProjectionRef(dt);
301
                   if(pszProjection!=NULL)
302
                           pszP = (*env)->NewStringUTF(env, pszProjection);
303
        }
304
305
           return pszP;
306
307
  }
308
309
/******************************************************************************/
310
//                                                                setProjection
311
/******************************************************************************/
312
313 791 igbrotru
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setProjectionNat
314 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr, jstring proj){
315
316
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
317
318
          dt = *(GDALDatasetH **)&cPtr;
319
          if(dt!=NULL){
320
                  const char *projeccion = (*env)->GetStringUTFChars(env, proj, 0);
321
                  GDALSetProjection( dt, projeccion );
322
                  (*env)->ReleaseStringUTFChars(env, proj, projeccion);
323
                  return 1;
324
          }
325
326
          return -1;
327
  }
328
329
330
/******************************************************************************/
331
//                                                                        Close
332
/******************************************************************************/
333
334
335 791 igbrotru
JNIEXPORT void JNICALL Java_es_gva_cit_jgdal_Gdal_closeNat
336 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
337
338
        GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
339
340
          dt = *(GDALDatasetH **)&cPtr;
341
        GDALClose(dt);
342
343
  }
344
345
346
/************************************************************************/
347
/*                        GDALGetDriverByName()                         */
348
/************************************************************************/
349
350 791 igbrotru
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_getDriverByNameNat
351 716 igbrotru
  (JNIEnv *env, jclass clase, jstring name){
352
353
          const char *namedrv;
354
          GDALDriverH *drv;
355
356
          jlong jresult=-1;
357
358 834 igbrotru
    if(GDALGetDriverCount()<=0)GDALAllRegister();
359
360 716 igbrotru
          namedrv = (*env)->GetStringUTFChars(env, name, 0);
361
362
          drv=GDALGetDriverByName(namedrv);
363
364
          *(GDALDriverH **)&jresult = drv;
365
366
          (*env)->ReleaseStringUTFChars(env, name, namedrv);
367
368
           return (long)jresult;
369
  }
370
371
372
/************************************************************************/
373
/*                        getGCPCountNat()                              */
374
/************************************************************************/
375
376 791 igbrotru
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getGCPCountNat
377 716 igbrotru
  (JNIEnv *env, jobject obj, jlong cPtr){
378
379
          int res=-1;
380
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
381
382
          dt = *(GDALDatasetH **)&cPtr;
383
          if(dt!=NULL)
384
                  res = GDALGetGCPCount(dt);
385
386
387
          return res;
388
  }
389
390