Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libjni-gdal-macosx / src / ogrdatasource_interfaz.cpp @ 22616

History | View | Annotate | Download (14.2 KB)

1 8219 nacho
 /**********************************************************************
2
 * $Id$
3
 *
4
 * Name:     ogrdatasource_interfaz.c
5
 * Project:  JGDAL. Interface java to gdal (Frank Warmerdam).
6
 * Purpose:
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
51
52
#include <jni.h>
53
#include "es_gva_cit_jogr_OGRDataSource.h"
54
#include "es_gva_cit_jogr_JNIBase.h"
55
#include "ogr_api.h"
56
#include "ogrsf_frmts.h"
57
58
59
60
/******************************************************************************/
61
//                                                                getName
62
/******************************************************************************/
63
64
JNIEXPORT jstring JNICALL Java_es_gva_cit_jogr_OGRDataSource_getNameNat
65
  (JNIEnv *env, jobject obj, jlong cPtr){
66
67
          OGRDataSource                         *ds = (OGRDataSource *) 0 ;
68
          jstring                                        nom_ds;
69
70
          ds = *(OGRDataSource **)&cPtr;
71
          const char *name = ds->GetName();
72
73
          if(name!=NULL)
74
                  nom_ds = env->NewStringUTF(name);
75
          else return NULL;
76
77
          return nom_ds;
78
79
  }
80
81
/******************************************************************************/
82
//                                                                getLayerCount
83
/******************************************************************************/
84
85
 JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_getLayerCountNat
86
  (JNIEnv *env, jobject obj, jlong cPtr){
87
88
          int res=-1;
89
          OGRDataSource *ds  = (OGRDataSource *) 0 ;
90
91
          ds = *(OGRDataSource **)&cPtr;
92
          if(ds!=NULL)
93
                  res = ds->GetLayerCount();
94
95
          return res;
96
  }
97
98
/******************************************************************************/
99
//                                                                        getLayer
100
/******************************************************************************/
101
102
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_getLayerNat
103
  (JNIEnv *env, jobject obj, jlong cPtr, jint iLayer){
104
105
          OGRDataSource                         *ds  = (OGRDataSource *) 0 ;
106
          OGRLayer                                 *capa;
107
          long                                        layer=-1;
108
109
          ds = *(OGRDataSource **)&cPtr;
110
          if(ds!=NULL){
111
                  capa = ds->GetLayer(iLayer);
112
                  if(capa!=NULL)layer = (long)&(*capa);
113
          }
114
115
          return (jlong)layer;
116
117
  }
118
119
/******************************************************************************/
120
//                                                                ~OGRDataSource
121
/******************************************************************************/
122
123
JNIEXPORT void JNICALL Java_es_gva_cit_jogr_OGRDataSource_FreeOGRDataSource
124
  (JNIEnv *env, jobject obj, jlong cPtr){
125
126
          OGRDataSource *df = (OGRDataSource *) 0 ;
127
128
          df = *(OGRDataSource **)&cPtr;
129
          if(df!=NULL){
130
                  delete df;
131
          }
132
  }
133
134
/******************************************************************************/
135
//                                                                reference
136
/******************************************************************************/
137
138
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_referenceNat
139
  (JNIEnv *env, jobject obj, jlong cPtr){
140
141
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
142
          int                         res=-1;
143
144
          ds = *(OGRDataSource **)&cPtr;
145
          if(ds!=NULL){
146
                  res=ds->Reference();
147
          }
148
          return res;
149
150
  }
151
152
/******************************************************************************/
153
//                                                                dereference
154
/******************************************************************************/
155
156
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_dereferenceNat
157
  (JNIEnv *env, jobject obj, jlong cPtr){
158
159
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
160
          int                         res=-1;
161
162
          ds = *(OGRDataSource **)&cPtr;
163
          if(ds!=NULL){
164
                  res = ds->Dereference();
165
          }
166
          return res;
167
168
  }
169
170
/******************************************************************************/
171
//                                                                getRefCount
172
/******************************************************************************/
173
174
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_getRefCountNat
175
  (JNIEnv *env, jobject obj, jlong cPtr){
176
177
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
178
          int                         res = -1;
179
180
          ds = *(OGRDataSource **)&cPtr;
181
          if(ds!=NULL){
182
                  res = ds->GetRefCount();
183
          }
184
          return res;
185
186
187
  }
188
189
/******************************************************************************/
190
//                                                                getSummaryRefCount
191
/******************************************************************************/
192
193
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_getSummaryRefCountNat
194
  (JNIEnv *env, jobject obj, jlong cPtr){
195
196
          OGRDataSource   *ds = (OGRDataSource *) 0 ;
197
          int                         res = -1;
198
199
          ds = *(OGRDataSource **)&cPtr;
200
          if(ds!=NULL){
201
                  res = ds->GetSummaryRefCount();
202
          }
203
          return res;
204
205
  }
206
207
/******************************************************************************/
208
//                                                                OGRDataSource
209
/******************************************************************************/
210
211
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_getLayerByNameNat
212
  (JNIEnv *env, jobject obj, jlong cPtr, jstring name){
213
214
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
215
          const char                 *layername;
216
          OGRLayer                *layer;
217
          long                        ptro_layer=-1;
218
219
          ds = *(OGRDataSource **)&cPtr;
220
          layername = env->GetStringUTFChars( name, 0 );
221
          if(ds!=NULL){
222
                  layer=ds->GetLayerByName(layername);
223
                  if(layer!=NULL)ptro_layer = (long)&(*layer);
224
          }
225
          env->ReleaseStringUTFChars( name, layername );
226
          return (jlong)ptro_layer;
227
  }
228
229
/******************************************************************************/
230
//                                                                deleteLayer
231
/******************************************************************************/
232
233
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_OGRDataSource_deleteLayerNat
234
  (JNIEnv *env, jobject obj, jlong cPtr, jint layer){
235
236
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
237
          int                         ogrerr;
238
239
          ds = *(OGRDataSource **)&cPtr;
240
          if(ds!=NULL){
241
                  ogrerr = ds->DeleteLayer(layer);
242
          }
243
          return ogrerr;
244
  }
245
246
/******************************************************************************/
247
//                                                                testCapability
248
/******************************************************************************/
249
250
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_OGRDataSource_testCapabilityNat
251
  (JNIEnv *env, jobject obj, jlong cPtr, jstring cap){
252
253
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
254
          int                         res=-1;
255
          const char                 *capability;
256
257
          ds = *(OGRDataSource **)&cPtr;
258
          if(ds!=NULL){
259
                  capability = env->GetStringUTFChars( cap, 0 );
260
                  res = ds->TestCapability(capability);
261
                  env->ReleaseStringUTFChars( cap, capability );
262
          }
263
          return res;
264
265
  }
266
267
/******************************************************************************/
268
//                                                                createLayer
269
/******************************************************************************/
270
271
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_createLayerNat
272
  (JNIEnv *env, jobject obj, jlong cPtr, jstring pszName, jlong poSpatialRef, jstring eGType, jobjectArray papszOptions){
273
274
          OGRDataSource                 *ds = (OGRDataSource *) 0 ;
275
          int                                 longitud;
276
          char                                **opciones;
277
          OGRLayer                        *layer_dstno;
278
        OGRSpatialReference        *spatialRef;
279
          long                                 ptr_dtno=-1;
280
          OGRwkbGeometryType        geomtype;
281
282
          ds = *(OGRDataSource **)&cPtr;
283
284
        spatialRef = *(OGRSpatialReference **)&poSpatialRef;
285
286
          if(ds!=NULL){
287
                  longitud = env->GetArrayLength( papszOptions);
288
                  opciones = (char **)malloc(sizeof(char *)*longitud);
289
                  for(int i=0;i<longitud;i++){
290
                          jstring el = (jstring)env->GetObjectArrayElement(papszOptions,i);
291
                          const char *simple_option = env->GetStringUTFChars( el, 0);
292
                          opciones[i]=(char *)malloc(strlen(simple_option));
293
                          strcpy(opciones[i],simple_option);
294
                          env->ReleaseStringUTFChars( el, simple_option);
295
                  }
296
297
                  const char *type = env->GetStringUTFChars( eGType, 0);
298
                  const char *name = env->GetStringUTFChars( pszName, 0);
299
                  if(strcmp(type,"wkbUnknown")==0)geomtype = wkbUnknown;
300
                  else if(strcmp(type,"wkbPoint")==0)geomtype = wkbPoint;
301
                  else if(strcmp(type,"wkbLineString")==0)geomtype = wkbLineString;
302
                  else if(strcmp(type,"wkbPolygon")==0)geomtype = wkbPolygon;
303
                  else if(strcmp(type,"wkbMultiPoint")==0)geomtype = wkbMultiPoint;
304
                  else if(strcmp(type,"wkbMultiLineString")==0)geomtype = wkbMultiLineString;
305
                  else if(strcmp(type,"wkbMultiPolygon")==0)geomtype = wkbMultiPolygon;
306
                  else if(strcmp(type,"wkbGeometryCollection")==0)geomtype = wkbGeometryCollection;
307
                  else if(strcmp(type,"wkbNone")==0)geomtype = wkbNone;
308
                  else if(strcmp(type,"wkbLinearRing")==0)geomtype = wkbLinearRing;
309
                else if(strcmp(type,"wkbPoint25D")==0)geomtype = wkbPoint25D;
310
                  else if(strcmp(type,"wkbLineString25D")==0)geomtype = wkbLineString25D;
311
                  else if(strcmp(type,"wkbPolygon25D")==0)geomtype = wkbPolygon25D;
312
                  else if(strcmp(type,"wkbMultiPoint25D")==0)geomtype = wkbMultiPoint25D;
313
                  else if(strcmp(type,"wkbMultiLineString25D")==0)geomtype = wkbMultiLineString25D;
314
                  else if(strcmp(type,"wkbMultiPolygon25D")==0)geomtype = wkbMultiPolygon25D;
315
                  else if(strcmp(type,"wkbGeometryCollection25D")==0)geomtype = wkbGeometryCollection25D;
316
317
                  layer_dstno = ds->CreateLayer(name, spatialRef, geomtype, opciones);
318
                  env->ReleaseStringUTFChars( eGType, type);
319
                  env->ReleaseStringUTFChars( pszName, name);
320
          }
321
322
          for(int i=0;i<longitud;i++)free(opciones[i]);
323
          free(opciones);
324
325
          if(layer_dstno==NULL)return -1;
326
327
          ptr_dtno = (long)&(*layer_dstno);
328
          return (jlong)ptr_dtno;
329
  }
330
331
/******************************************************************************/
332
//                                                                copyLayer
333
/******************************************************************************/
334
335
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_copyLayerNat
336
  (JNIEnv *env, jobject obj, jlong cPtr, jlong poSrcLayer, jstring pszNewName, jobjectArray papszOptions){
337
338
          OGRDataSource                 *ds = (OGRDataSource *) 0 ;
339
          int                                 longitud;
340
          char                                **opciones;
341
          OGRLayer                        *layer_dstno;
342
          OGRLayer                        *layer;
343
          long                                 ptr_dtno=-1;
344
345
          ds = *(OGRDataSource **)&cPtr;
346
          layer = *(OGRLayer **)&poSrcLayer;
347
          if(ds!=NULL && layer!=NULL){
348
                  longitud = env->GetArrayLength( papszOptions);
349
                  opciones = (char **)malloc(sizeof(char *)*longitud);
350
                  for(int i=0;i<longitud;i++){
351
                          jstring el = (jstring)env->GetObjectArrayElement(papszOptions,i);
352
                          const char *simple_option = env->GetStringUTFChars( el, 0);
353
                          opciones[i]=(char *)malloc(strlen(simple_option));
354
                          strcpy(opciones[i],simple_option);
355
                          env->ReleaseStringUTFChars( el, simple_option);
356
                  }
357
358
                  const char *name = env->GetStringUTFChars( pszNewName, 0);
359
                  layer_dstno = ds->CopyLayer(layer, name, opciones);
360
                  env->ReleaseStringUTFChars( pszNewName, name);
361
362
          }
363
364
          for(int i=0;i<longitud;i++)free(opciones[i]);
365
          free(opciones);
366
367
          if(layer_dstno==NULL)return -1;
368
369
          ptr_dtno = (long)&(*layer_dstno);
370
          return (jlong)ptr_dtno;
371
  }
372
373
/******************************************************************************/
374
//                                                                getStyleTable
375
/******************************************************************************/
376
377
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_getStyleTableNat
378
  (JNIEnv *env, jobject obj, jlong cPtr){
379
380
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
381
          OGRStyleTable        *styletable;
382
          long                        ptro_styletable=-1;
383
384
          ds = *(OGRDataSource **)&cPtr;
385
          if(ds!=NULL){
386
                  styletable = ds->GetStyleTable();
387
                  if(styletable!=NULL)
388
                          ptro_styletable = (long)&(*styletable);
389
          }
390
          return ptro_styletable;
391
  }
392
393
/******************************************************************************/
394
//                                                                executeSQL
395
/******************************************************************************/
396
397
JNIEXPORT jlong JNICALL Java_es_gva_cit_jogr_OGRDataSource_executeSQLNat
398
  (JNIEnv *env, jobject obj, jlong cPtr, jstring pszStatement, jlong ptr_spatialFilter, jstring pszDialect){
399
400
          OGRDataSource                 *ds = (OGRDataSource *) 0 ;
401
          OGRGeometry                        *geom = (OGRGeometry *) 0 ;
402
           OGRLayer                        *layer;
403
           long                                ptro_layer=-1;
404
405
          ds = *(OGRDataSource **)&cPtr;
406
          geom = *(OGRGeometry **)&ptr_spatialFilter;
407
          if(ds!=NULL ){
408
                  const char *stat = env->GetStringUTFChars( pszStatement, 0);
409
                  const char *dialect = env->GetStringUTFChars( pszDialect, 0);
410
                  layer = ds->ExecuteSQL(stat, geom, dialect);
411
                  env->ReleaseStringUTFChars( pszStatement, stat);
412
                  env->ReleaseStringUTFChars( pszDialect, dialect);
413
                  if(layer!=NULL)
414
                          ptro_layer = (long)&(*layer);
415
          }
416
          return ptro_layer;
417
  }
418
419
/******************************************************************************/
420
//                                                          releaseResultSet
421
/******************************************************************************/
422
423
JNIEXPORT void JNICALL Java_es_gva_cit_jogr_OGRDataSource_releaseResultSetNat
424
  (JNIEnv *env, jobject obj, jlong cPtr, jlong ptr_poResultsSet){
425
426
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
427
          OGRLayer                *layer = (OGRLayer *) 0 ;
428
429
          ds = *(OGRDataSource **)&cPtr;
430
          layer = *(OGRLayer **)&ptr_poResultsSet;
431
          if(ds!=NULL ){
432
                  ds->ReleaseResultSet(layer);
433
          }
434
  }
435
436
/******************************************************************************/
437
//                                                                syncToDisk
438
/******************************************************************************/
439
440
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_OGRDataSource_syncToDiskNat
441
  (JNIEnv *env, jobject obj, jlong cPtr){
442
443
          OGRDataSource         *ds = (OGRDataSource *) 0 ;
444
          int                         ogrerr;
445
446
          ds = *(OGRDataSource **)&cPtr;
447
          if(ds!=NULL ){
448
                  ogrerr = ds->SyncToDisk();
449
          }
450
          return ogrerr;
451
  }