Statistics
| Revision:

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

History | View | Annotate | Download (10.3 KB)

1
 /**********************************************************************
2
 * $Id: gdal_interfaz.c 834 2005-01-05 14:04:27Z igbrotru $
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
#include "es_gva_cit_jgdal_Gdal.h"
30
#include "es_gva_cit_jgdal_JNIBase.h"
31
#include "gdal.h"
32
#include "cpl_string.h"
33

    
34

    
35

    
36
/******************************************************************************/
37
//                                                                Open
38
/******************************************************************************/
39

    
40

    
41
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_openNat
42
  (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
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterXSizeNat
80
  (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
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterYSizeNat
101
  (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
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getRasterCountNat
121
  (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
JNIEXPORT jobjectArray JNICALL Java_es_gva_cit_jgdal_Gdal_getMetadataNat
141
  (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
  JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getRasterBandNat
189
  (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
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_getGeoTransformNat
214
  (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
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setGeoTransformNat
256
  (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
JNIEXPORT jstring JNICALL Java_es_gva_cit_jgdal_Gdal_getProjectionRefNat
288
  (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
JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_Gdal_setProjectionNat
314
  (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
JNIEXPORT void JNICALL Java_es_gva_cit_jgdal_Gdal_closeNat
336
  (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
JNIEXPORT jlong JNICALL Java_es_gva_cit_jgdal_Gdal_getDriverByNameNat
351
  (JNIEnv *env, jclass clase, jstring name){
352
          
353
          const char *namedrv;
354
          GDALDriverH *drv;
355
 
356
          jlong jresult=-1;
357
  
358
    if(GDALGetDriverCount()<=0)GDALAllRegister();
359
            
360
          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
 JNIEXPORT jint JNICALL Java_es_gva_cit_jgdal_JNIBase_getGCPCountNat
377
  (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
 
391