Statistics
| Revision:

svn-gvsig-desktop / tags / Root_v061 / libraries / libjni-gdal / src / gdal_interfaz.c @ 4812

History | View | Annotate | Download (12.6 KB)

1
 /**********************************************************************
2
 * $Id: gdal_interfaz.c 4812 2006-04-11 15:11:52Z  $
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
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
11
*
12
* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
13
*
14
* This program is free software; you can redistribute it and/or
15
* modify it under the terms of the GNU General Public License
16
* as published by the Free Software Foundation; either version 2
17
* of the License, or (at your option) any later version.
18
*
19
* This program is distributed in the hope that it will be useful,
20
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
* GNU General Public License for more details.
23
*
24
* You should have received a copy of the GNU General Public License
25
* along with this program; if not, write to the Free Software
26
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
27
*
28
* For more information, contact:
29
*
30
*  Generalitat Valenciana
31
*   Conselleria d'Infraestructures i Transport
32
*   Av. Blasco Ib??ez, 50
33
*   46010 VALENCIA
34
*   SPAIN
35
*
36
*      +34 963862235
37
*   gvsig@gva.es
38
*      www.gvsig.gva.es
39
*
40
*    or
41
*
42
*   IVER T.I. S.A
43
*   Salamanca 50
44
*   46005 Valencia
45
*   Spain
46
*
47
*   +34 963163400
48
*   dac@iver.es
49
* 
50
* [01] 01-Oct-2005 nbt OpenArray function to support name parameter in char array
51
*/
52

    
53

    
54
#include <jni.h>
55
#include "es_gva_cit_jgdal_Gdal.h"
56
#include "es_gva_cit_jgdal_JNIBase.h"
57
#include "gdal.h"
58
#include "cpl_string.h"
59

    
60

    
61

    
62
/******************************************************************************/
63
//                                                                Open
64
/******************************************************************************/
65

    
66

    
67
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_openNat
68
  (JNIEnv *env, jobject obj, jstring pszF, jint acc){
69
          
70
          const char *pszFilename;
71
          GDALDatasetH *dataset;
72
          jlong jresult = 0 ;
73
          FILE *fich;
74
          
75
          pszFilename = (*env)->GetStringUTFChars(env, pszF, 0);
76

    
77
        fich=fopen( pszFilename, "r" );
78
        if( fich )
79
                fclose(fich);
80
        else
81
           {
82
              fclose(fich);
83
              return -1;
84
           }
85
          
86
          GDALAllRegister();
87
          dataset = GDALOpen((char *)pszFilename,(int)acc);
88
          
89
          *(GDALDatasetH **)&jresult = dataset;
90
          
91
    (*env)->ReleaseStringUTFChars(env, pszF, pszFilename);
92
          
93
  
94
          if(dataset==NULL)return -1; 
95
          else return jresult; 
96
                  
97
  }
98
  
99
/******************************************************************************/
100
//                                                                OpenArray
101
/******************************************************************************/
102

    
103

    
104
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_openArrayNat
105
  (JNIEnv *env, jobject obj, jbyteArray pszF, jint acc){
106
          
107
          jbyte *pszFilename = NULL;
108
          GDALDatasetH *dataset;
109
          jlong jresult = 0 ;
110
          FILE *fich;
111
          jsize longitud = 0, i;
112
          char *p;
113
                    
114
          longitud = (*env)->GetArrayLength(env, pszF); 
115
          pszFilename = (*env)->GetByteArrayElements(env, pszF, 0);
116
        pszFilename = (jbyte *)realloc(pszFilename, longitud + 1);
117
        pszFilename[longitud] = '\0';
118
        
119
        fich = fopen( pszFilename, "r" );
120
        if( fich )
121
                fclose(fich);
122
        else                
123
              return -1;
124
           
125
           GDALAllRegister();
126
          dataset = GDALOpen((char *)pszFilename,(int)acc);
127
          
128
          *(GDALDatasetH **)&jresult = dataset;
129
          
130
    (*env)->ReleaseByteArrayElements(env, pszF, pszFilename, 0);
131
          
132
          if(dataset == NULL)
133
                  return -1; 
134
          else 
135
                  return jresult; 
136
                  
137
  }
138

    
139

    
140
/******************************************************************************/  
141
//                                                                GetRasterXSize
142
/******************************************************************************/
143

    
144
  
145
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterXSizeNat
146
  (JNIEnv *env, jobject obj, jlong cPtr){
147
          
148
          int res=-1;
149
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
150
  
151
          dt = *(GDALDatasetH **)&cPtr;
152
          if(dt!=NULL)
153
                  res = GDALGetRasterXSize(dt);
154
  
155
                    
156
          return res;
157
                          
158
  }
159

    
160
  
161
/******************************************************************************/  
162
//                                                                GetRasterYSize
163
/******************************************************************************/  
164
  
165
  
166
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterYSizeNat
167
  (JNIEnv *env, jobject obj, jlong cPtr){
168
          
169
          int res=-1;
170
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
171
          
172
          dt = *(GDALDatasetH **)&cPtr;
173
          if(dt!=NULL)
174
                  res = GDALGetRasterYSize(dt);
175
  
176
                    
177
          return res;
178
          
179
  }
180

    
181
/******************************************************************************/   
182
//                                                                GetRasterCount
183
/******************************************************************************/
184
 
185
 
186
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterCountNat
187
  (JNIEnv *env, jobject obj, jlong cPtr){
188
          
189
          int res=-1;
190
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
191
          
192
          dt = *(GDALDatasetH **)&cPtr;
193
          if(dt!=NULL)
194
                  res = GDALGetRasterCount(dt);
195
  
196
                    
197
          return res;
198
  }
199
  
200
  
201
/******************************************************************************/ 
202
//                                                                 GetMetadata
203
/******************************************************************************/
204

    
205

    
206
JNIEXPORT jobjectArray JNICALL Java_es_gva_cit_jgdal_Gdal_getMetadataNat
207
  (JNIEnv *env, jobject obj, jlong cPtr, jstring pszDomain){
208
          
209
           char                **papszMetadata;
210
           GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
211
           int i,nmetadatos;
212
           
213
           jclass class_string;
214
           jobjectArray vector_str;
215
           
216
           //Obtenemos los metadatos sobre papszMetadata
217
            
218
           dt = *(GDALDatasetH **)&cPtr;
219
                    
220
           
221
           if(dt!=NULL){
222
                 papszMetadata = GDALGetMetadata( dt, NULL );
223
                 
224
                 
225
                 //Si hay metadatos devolvemos creamos el vector de String de java y los devolvemos
226
                 
227
                 nmetadatos = CSLCount(papszMetadata);
228
             if( nmetadatos > 0 )
229
              {
230
                class_string = (*env)->FindClass (env, "java/lang/String");
231
                         vector_str=(*env)->NewObjectArray(env, nmetadatos, class_string, (*env)->NewStringUTF(env,""));
232
                         
233
                         //Cargamos los metadatos
234
                         
235
                for( i = 0; papszMetadata[i] != NULL; i++ )
236
                        (*env)->SetObjectArrayElement(env,vector_str,i,(*env)->NewStringUTF(env,papszMetadata[i]));
237
                        
238
                           return vector_str;            
239
              }
240
           }
241
     
242
           return NULL;
243
  }
244

    
245

    
246

    
247

    
248

    
249
/******************************************************************************/   
250
//                                                                GetRasterBand  
251
/******************************************************************************/
252

    
253

    
254
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getRasterBandNat
255
  (JNIEnv *env, jobject obj, jlong cPtr, jint hBand){
256
          
257
                         
258
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
259
          GDALRasterBandH *rasterband=NULL;
260
          jlong jresult = 0;
261

    
262
        dt = *(GDALDatasetH **)&cPtr;
263
    
264
    if(dt!=NULL){
265
                rasterband = GDALGetRasterBand(dt,(int)hBand);
266
                *(GDALDatasetH **)&jresult = rasterband;
267
    }else return -1;
268
    
269
   return jresult;
270
    
271
  }
272
  
273

    
274
/******************************************************************************/
275
//                                                                GetGeoTransform
276
/******************************************************************************/
277

    
278

    
279
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getGeoTransformNat
280
  (JNIEnv *env, jobject obj, jlong cPtr, jobject gt){
281
          
282
          jclass class_geotransform;
283
          jfieldID id_campo;
284
          double adfgt[6];
285
          jdoubleArray doublearray;
286
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
287
          
288

    
289
        dt = *(GDALDatasetH **)&cPtr;
290
                  
291
          if(dt!=NULL){
292
                          
293
          //Obtenemos el objeto java que contendr? el vector geotransform
294
                
295
                          
296
                  class_geotransform = (*env)->GetObjectClass(env, gt);
297
                  id_campo = (*env)->GetFieldID(env, class_geotransform, "adfgeotransform", "[D");
298

    
299

    
300
           //Cargamos el buffer llamando a GDALRasterIO
301
                                   
302
                  
303
                  if(GDALGetGeoTransform(dt,adfgt)==CE_None){
304
                          doublearray = (*env)->NewDoubleArray(env,6);
305
                    if(doublearray!=NULL){
306
                                  (*env)->SetDoubleArrayRegion(env, doublearray, 0, 6,(jdouble *)adfgt); 
307
                                  (*env)->SetObjectField(env, gt, id_campo, doublearray);
308
                        }
309
                  }else return -1;                
310
                        
311
          }else return -1;
312
          
313
          return 0;
314
                                    
315
  }
316
  
317
/******************************************************************************/
318
//                                                                setGeoTransformNat
319
/******************************************************************************/
320

    
321
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setGeoTransformNat
322
  (JNIEnv *env, jobject obj, jlong cPtr, jobject gt){
323
          
324
          jclass class_geotransform;
325
          jfieldID id_campo;
326
          double adfgt[6];
327
          jdoubleArray doublearray;
328
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
329
          
330
          dt = *(GDALDatasetH **)&cPtr;
331
          
332
          if(dt!=NULL){
333
                  
334
                  //Obtenemos los valores pasados en el vector gt
335
                  
336
                  class_geotransform = (*env)->GetObjectClass(env, gt);
337
                  id_campo = (*env)->GetFieldID(env, class_geotransform, "adfgeotransform", "[D");
338
                  doublearray =(jdoubleArray)(*env)->GetObjectField(env, gt, id_campo);
339
                  (*env)->GetDoubleArrayRegion(env,doublearray,0,6,(jdouble *)adfgt);
340
                  
341
                  GDALSetGeoTransform( dt, adfgt );
342
                  return 0;
343
          }
344
          return -1;
345
          
346
  }  
347
  
348
/******************************************************************************/
349
//                                                                GetProjectionRef
350
/******************************************************************************/
351

    
352

    
353
JNIEXPORT jstring JNICALL Java_es_gva_cit_jgdal_Gdal_getProjectionRefNat
354
  (JNIEnv *env, jobject obj, jlong cPtr){
355
          
356
        char *pszProjection=NULL;
357
          jstring pszP=NULL;
358
        GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
359
          
360
                  
361
          dt = *(GDALDatasetH **)&cPtr;
362
                  
363
          //Llamamos a la funci?n y cargamos el jstring con el resultado         
364
                  
365
        if(dt!=NULL){          
366
                   pszProjection = (char *) GDALGetProjectionRef(dt);
367
                   if(pszProjection!=NULL)
368
                           pszP = (*env)->NewStringUTF(env, pszProjection); 
369
        }
370
           
371
           return pszP;
372
          
373
  }
374
  
375
/************************************************************************/
376
/*                        getDriverShortNameNat()                       */
377
/************************************************************************/
378

    
379
JNIEXPORT jstring JNICALL Java_es_gva_cit_jgdal_Gdal_getDriverShortNameNat
380
  (JNIEnv *env, jobject obj, jlong cPtr){
381
          
382
          char                         *pszShortName=NULL;
383
          jstring                 pszSN=NULL;
384
        GDALDatasetH         *dt  = (GDALDatasetH *) 0 ;
385
        GDALDriverH                hDriver;
386
        
387
        dt = *(GDALDatasetH **)&cPtr;
388
        
389
        //Llamamos a la funci?n y cargamos el jstring con el resultado         
390
                  
391
        if(dt!=NULL){          
392
                hDriver = GDALGetDatasetDriver( dt );
393
                   pszShortName = (char *) GDALGetDriverShortName(hDriver);
394
                   if(pszShortName!=NULL)
395
                           pszSN = (*env)->NewStringUTF(env, pszShortName); 
396
        }
397
           
398
           return pszSN;
399
  }
400
  
401
/******************************************************************************/  
402
//                                                                setProjection
403
/******************************************************************************/  
404
  
405
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setProjectionNat
406
  (JNIEnv *env, jobject obj, jlong cPtr, jstring proj){
407
          
408
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
409
          
410
          dt = *(GDALDatasetH **)&cPtr;
411
          if(dt!=NULL){
412
                  const char *projeccion = (*env)->GetStringUTFChars(env, proj, 0);
413
                  GDALSetProjection( dt, projeccion );
414
                  (*env)->ReleaseStringUTFChars(env, proj, projeccion);
415
                  return 1;
416
          }
417
          
418
          return -1;
419
  }
420
  
421
  
422
/******************************************************************************/  
423
//                                                                        Close
424
/******************************************************************************/
425

    
426

    
427
JNIEXPORT void JNICALL Java_es_gva_cit_jgdal_Gdal_closeNat
428
  (JNIEnv *env, jobject obj, jlong cPtr){
429

    
430
        GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
431
          
432
          dt = *(GDALDatasetH **)&cPtr;
433
        GDALClose(dt);        
434

    
435
  }
436
  
437

    
438
/************************************************************************/
439
/*                        GDALGetDriverByName()                         */
440
/************************************************************************/
441

    
442
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_getDriverByNameNat
443
  (JNIEnv *env, jclass clase, jstring name){
444
          
445
          const char *namedrv;
446
          GDALDriverH *drv;
447
 
448
          jlong jresult=-1;
449
  
450
    if(GDALGetDriverCount()<=0)GDALAllRegister();
451
            
452
          namedrv = (*env)->GetStringUTFChars(env, name, 0);
453
          
454
          drv=GDALGetDriverByName(namedrv);  
455
                  
456
          *(GDALDriverH **)&jresult = drv;
457

    
458
          (*env)->ReleaseStringUTFChars(env, name, namedrv);
459
         
460
           return (long)jresult;
461
  }
462
  
463

    
464
/************************************************************************/
465
/*                        getGCPCountNat()                              */
466
/************************************************************************/
467

    
468
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getGCPCountNat
469
  (JNIEnv *env, jobject obj, jlong cPtr){
470
          
471
          int res=-1;
472
          GDALDatasetH *dt  = (GDALDatasetH *) 0 ;
473
          
474
          dt = *(GDALDatasetH **)&cPtr;
475
          if(dt!=NULL)
476
                  res = GDALGetGCPCount(dt);
477
  
478
                    
479
          return res;
480
  }
481
 
482
 
483