svn-gvsig-desktop / tags / v1_0_2_Build_902 / libraries / libjni-mrsid / src / ltimetadatarecord.cpp @ 33793
History | View | Annotate | Download (14 KB)
1 | 720 | igbrotru | /**********************************************************************
|
---|---|---|---|
2 | * $Id$
|
||
3 | *
|
||
4 | * Name: ltimetadatarecord.c
|
||
5 | * Project: JMRSID. Interfaz java to MrSID (Lizardtech).
|
||
6 | * Purpose:
|
||
7 | * Author: Nacho Brodin, brodin_ign@gva.es
|
||
8 | *
|
||
9 | **********************************************************************/
|
||
10 | 2214 | igbrotru | /* 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 | 720 | igbrotru | |
51 | |||
52 | #include <jni.h> |
||
53 | 1127 | igbrotru | #include <string.h> |
54 | 720 | igbrotru | #include "es_gva_cit_jmrsid_LTIMetadataRecord.h" |
55 | #include "es_gva_cit_jmrsid_JNIBase.h" |
||
56 | |||
57 | #include "lt_types.h" |
||
58 | #include "lt_base.h" |
||
59 | #include "lt_fileSpec.h" |
||
60 | #include "lti_geoCoord.h" |
||
61 | #include "lti_pixel.h" |
||
62 | #include "lti_navigator.h" |
||
63 | #include "lti_sceneBuffer.h" |
||
64 | #include "lti_metadataDatabase.h" |
||
65 | #include "lti_metadataRecord.h" |
||
66 | #include "lti_utils.h" |
||
67 | #include "MrSIDImageReader.h" |
||
68 | #include "J2KImageReader.h" |
||
69 | #include "lti_imageReader.h" |
||
70 | #include "lti_sceneBuffer.h" |
||
71 | #include "lti_scene.h" |
||
72 | //#include "cpl_conv.h"
|
||
73 | #include "TIFFImageWriter.h" |
||
74 | |||
75 | LT_USE_NAMESPACE(LizardTech); |
||
76 | |||
77 | /******************************************************************************/
|
||
78 | // getTagName
|
||
79 | /******************************************************************************/
|
||
80 | |||
81 | JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getTagNameNat |
||
82 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
83 | |||
84 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
85 | jstring res=NULL;
|
||
86 | const char *tagname; |
||
87 | |||
88 | record = *(LTIMetadataRecord **)&cPtr; |
||
89 | |||
90 | if(record!=NULL){ |
||
91 | tagname=record->getTagName(); |
||
92 | res = env->NewStringUTF(tagname); |
||
93 | } |
||
94 | |||
95 | return res;
|
||
96 | |||
97 | } |
||
98 | |||
99 | /******************************************************************************/
|
||
100 | // isScalar
|
||
101 | /******************************************************************************/
|
||
102 | |||
103 | JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isScalarNat |
||
104 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
105 | |||
106 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
107 | |||
108 | record = *(LTIMetadataRecord **)&cPtr; |
||
109 | |||
110 | if(record!=NULL){ |
||
111 | if (record->isScalar())return 1; |
||
112 | else return 0; |
||
113 | }else return -1; |
||
114 | } |
||
115 | |||
116 | |||
117 | /******************************************************************************/
|
||
118 | // isVector
|
||
119 | /******************************************************************************/
|
||
120 | |||
121 | JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isVectorNat |
||
122 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
123 | |||
124 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
125 | |||
126 | record = *(LTIMetadataRecord **)&cPtr; |
||
127 | |||
128 | if(record!=NULL){ |
||
129 | if (record->isVector())return 1; |
||
130 | else return 0; |
||
131 | }else return -1; |
||
132 | } |
||
133 | |||
134 | /******************************************************************************/
|
||
135 | // isArray
|
||
136 | /******************************************************************************/
|
||
137 | |||
138 | JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isArrayNat |
||
139 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
140 | |||
141 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
142 | |||
143 | record = *(LTIMetadataRecord **)&cPtr; |
||
144 | |||
145 | if(record!=NULL){ |
||
146 | if (record->isArray())return 1; |
||
147 | else return 0; |
||
148 | }else return -1; |
||
149 | } |
||
150 | |||
151 | /******************************************************************************/
|
||
152 | // getDataType
|
||
153 | /******************************************************************************/
|
||
154 | |||
155 | JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDataTypeNat |
||
156 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
157 | |||
158 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
159 | |||
160 | record = *(LTIMetadataRecord **)&cPtr; |
||
161 | |||
162 | if(record!=NULL){ |
||
163 | switch (record->getDataType())
|
||
164 | { |
||
165 | case LTI_METADATA_DATATYPE_UINT8:
|
||
166 | case LTI_METADATA_DATATYPE_SINT8:
|
||
167 | case LTI_METADATA_DATATYPE_UINT16:
|
||
168 | case LTI_METADATA_DATATYPE_SINT16:
|
||
169 | case LTI_METADATA_DATATYPE_UINT32:
|
||
170 | case LTI_METADATA_DATATYPE_SINT32:
|
||
171 | case LTI_METADATA_DATATYPE_UINT64:
|
||
172 | case LTI_METADATA_DATATYPE_SINT64:return 0;break; |
||
173 | case LTI_METADATA_DATATYPE_FLOAT32:
|
||
174 | case LTI_METADATA_DATATYPE_FLOAT64:return 1;break; |
||
175 | case LTI_METADATA_DATATYPE_ASCII:return 2;break; |
||
176 | } |
||
177 | } |
||
178 | |||
179 | return -1; |
||
180 | } |
||
181 | |||
182 | /******************************************************************************/
|
||
183 | // getScalarData
|
||
184 | /******************************************************************************/
|
||
185 | |||
186 | JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getScalarDataNat |
||
187 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
188 | |||
189 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
190 | record = *(LTIMetadataRecord **)&cPtr; |
||
191 | |||
192 | if(record!=NULL){ |
||
193 | 1127 | igbrotru | char dato[8192]; |
194 | 720 | igbrotru | const void* data = record->getScalarData(); |
195 | switch (record->getDataType())
|
||
196 | { |
||
197 | case LTI_METADATA_DATATYPE_UINT8:
|
||
198 | sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[0]); |
||
199 | break;
|
||
200 | case LTI_METADATA_DATATYPE_SINT8:
|
||
201 | sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[0]); |
||
202 | break;
|
||
203 | case LTI_METADATA_DATATYPE_UINT16:
|
||
204 | sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[0]); |
||
205 | break;
|
||
206 | case LTI_METADATA_DATATYPE_SINT16:
|
||
207 | sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[0]); |
||
208 | break;
|
||
209 | case LTI_METADATA_DATATYPE_UINT32:
|
||
210 | sprintf(dato, "%d", ((lt_uint32*)data)[0]); |
||
211 | break;
|
||
212 | case LTI_METADATA_DATATYPE_SINT32:
|
||
213 | sprintf(dato, "%d", ((lt_int32*)data)[0]); |
||
214 | break;
|
||
215 | case LTI_METADATA_DATATYPE_UINT64:
|
||
216 | sprintf(dato, "%I64u", ((lt_uint64*)data)[0]); |
||
217 | break;
|
||
218 | case LTI_METADATA_DATATYPE_SINT64:
|
||
219 | sprintf(dato, "%I64d", ((lt_int64*)data)[0]); |
||
220 | break;
|
||
221 | case LTI_METADATA_DATATYPE_FLOAT32:
|
||
222 | sprintf(dato, "%f", ((float*)data)[0]); |
||
223 | break;
|
||
224 | case LTI_METADATA_DATATYPE_FLOAT64:
|
||
225 | sprintf(dato, "%f", ((double*)data)[0]); |
||
226 | break;
|
||
227 | case LTI_METADATA_DATATYPE_ASCII:
|
||
228 | { |
||
229 | 1127 | igbrotru | |
230 | 720 | igbrotru | const char* p = ((const char**)data)[0]; |
231 | 1127 | igbrotru | if(strlen(p)>8192) |
232 | strncpy(dato,p,8192);
|
||
233 | else
|
||
234 | sprintf(dato,"%s", p);
|
||
235 | 720 | igbrotru | } |
236 | break;
|
||
237 | } |
||
238 | |||
239 | return env->NewStringUTF(dato);
|
||
240 | |||
241 | |||
242 | }else return NULL; |
||
243 | } |
||
244 | |||
245 | |||
246 | |||
247 | |||
248 | /******************************************************************************/
|
||
249 | // getVectorData
|
||
250 | /******************************************************************************/
|
||
251 | |||
252 | JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getVectorDataNat |
||
253 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
254 | |||
255 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
256 | char dato[255]; |
||
257 | jclass clase; |
||
258 | jmethodID metodo; |
||
259 | jobject obj_stringarray; |
||
260 | jfieldID id_campo; |
||
261 | jobjectArray arr_string; |
||
262 | |||
263 | record = *(LTIMetadataRecord **)&cPtr; |
||
264 | |||
265 | if(record!=NULL){ |
||
266 | lt_uint32 len=0;
|
||
267 | const void* data = record->getVectorData(len); |
||
268 | |||
269 | clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
|
||
270 | metodo = env->GetMethodID(clase, "reserva", "(I)V"); |
||
271 | obj_stringarray = env->NewObject (clase,metodo,len); |
||
272 | id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;"); |
||
273 | arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo); |
||
274 | |||
275 | for (lt_uint32 i=0; i<len; i++) |
||
276 | { |
||
277 | switch (record->getDataType())
|
||
278 | { |
||
279 | case LTI_METADATA_DATATYPE_UINT8:
|
||
280 | sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
|
||
281 | break;
|
||
282 | case LTI_METADATA_DATATYPE_SINT8:
|
||
283 | sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
|
||
284 | break;
|
||
285 | case LTI_METADATA_DATATYPE_UINT16:
|
||
286 | sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
|
||
287 | break;
|
||
288 | case LTI_METADATA_DATATYPE_SINT16:
|
||
289 | sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
|
||
290 | break;
|
||
291 | case LTI_METADATA_DATATYPE_UINT32:
|
||
292 | sprintf(dato, "%d", ((lt_uint32*)data)[i]);
|
||
293 | break;
|
||
294 | case LTI_METADATA_DATATYPE_SINT32:
|
||
295 | sprintf(dato, "%d", ((lt_int32*)data)[i]);
|
||
296 | break;
|
||
297 | case LTI_METADATA_DATATYPE_UINT64:
|
||
298 | sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
|
||
299 | break;
|
||
300 | case LTI_METADATA_DATATYPE_SINT64:
|
||
301 | sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
|
||
302 | break;
|
||
303 | case LTI_METADATA_DATATYPE_FLOAT32:
|
||
304 | sprintf(dato, "%f", ((float*)data)[i]); |
||
305 | break;
|
||
306 | case LTI_METADATA_DATATYPE_FLOAT64:
|
||
307 | sprintf(dato, "%f", ((double*)data)[i]); |
||
308 | break;
|
||
309 | case LTI_METADATA_DATATYPE_ASCII:
|
||
310 | { |
||
311 | const char* p = ((const char**)data)[i]; |
||
312 | sprintf(dato,"%s", p);
|
||
313 | } |
||
314 | break;
|
||
315 | } |
||
316 | |||
317 | env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato)); |
||
318 | |||
319 | } |
||
320 | |||
321 | } |
||
322 | |||
323 | return obj_stringarray;
|
||
324 | |||
325 | } |
||
326 | |||
327 | /******************************************************************************/
|
||
328 | // getArrayData
|
||
329 | /******************************************************************************/
|
||
330 | |||
331 | JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getArrayDataNat |
||
332 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
333 | |||
334 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
335 | char dato[255]; |
||
336 | jclass clase; |
||
337 | jmethodID metodo; |
||
338 | jobject obj_stringarray; |
||
339 | jfieldID id_campo; |
||
340 | jobjectArray arr_string; |
||
341 | |||
342 | record = *(LTIMetadataRecord **)&cPtr; |
||
343 | |||
344 | if(record!=NULL){ |
||
345 | |||
346 | lt_uint32 numDims=0;
|
||
347 | const lt_uint32* dims=NULL; |
||
348 | const void* data = record->getArrayData(numDims, dims); |
||
349 | lt_uint32 i=0;
|
||
350 | lt_uint32 d=0;
|
||
351 | |||
352 | |||
353 | clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
|
||
354 | metodo = env->GetMethodID(clase, "reserva", "(I)V"); |
||
355 | obj_stringarray = env->NewObject (clase,metodo,numDims*(*dims)); |
||
356 | id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;"); |
||
357 | arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo); |
||
358 | |||
359 | for (d=0; d<numDims; d++) |
||
360 | { |
||
361 | |||
362 | lt_uint32 nd=0;
|
||
363 | for (nd=0; nd<dims[d]; nd++) |
||
364 | { |
||
365 | switch (record->getDataType())
|
||
366 | { |
||
367 | case LTI_METADATA_DATATYPE_UINT8:
|
||
368 | sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
|
||
369 | break;
|
||
370 | case LTI_METADATA_DATATYPE_SINT8:
|
||
371 | sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
|
||
372 | break;
|
||
373 | case LTI_METADATA_DATATYPE_UINT16:
|
||
374 | sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
|
||
375 | break;
|
||
376 | case LTI_METADATA_DATATYPE_SINT16:
|
||
377 | sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
|
||
378 | break;
|
||
379 | case LTI_METADATA_DATATYPE_UINT32:
|
||
380 | sprintf(dato, "%d", ((lt_uint32*)data)[i]);
|
||
381 | break;
|
||
382 | case LTI_METADATA_DATATYPE_SINT32:
|
||
383 | sprintf(dato, "%d", ((lt_int32*)data)[i]);
|
||
384 | break;
|
||
385 | case LTI_METADATA_DATATYPE_UINT64:
|
||
386 | sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
|
||
387 | break;
|
||
388 | case LTI_METADATA_DATATYPE_SINT64:
|
||
389 | sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
|
||
390 | break;
|
||
391 | case LTI_METADATA_DATATYPE_FLOAT32:
|
||
392 | sprintf(dato, "%f", ((float*)data)[i]); |
||
393 | break;
|
||
394 | case LTI_METADATA_DATATYPE_FLOAT64:
|
||
395 | sprintf(dato, "%f", ((double*)data)[i]); |
||
396 | break;
|
||
397 | case LTI_METADATA_DATATYPE_ASCII:
|
||
398 | { |
||
399 | const char* p = ((const char**)data)[i]; |
||
400 | sprintf(dato,"%s", p);
|
||
401 | } |
||
402 | break;
|
||
403 | } |
||
404 | |||
405 | env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato)); |
||
406 | |||
407 | ++i; |
||
408 | } |
||
409 | } |
||
410 | |||
411 | } |
||
412 | |||
413 | return obj_stringarray;
|
||
414 | } |
||
415 | |||
416 | 840 | igbrotru | /******************************************************************************/
|
417 | // getNumDims
|
||
418 | /******************************************************************************/
|
||
419 | |||
420 | JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getNumDimsNat |
||
421 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
422 | |||
423 | jint dims=-1;
|
||
424 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
425 | record = *(LTIMetadataRecord **)&cPtr; |
||
426 | if(record!=NULL){ |
||
427 | dims = (jint)record->getNumDims(); |
||
428 | } |
||
429 | return dims;
|
||
430 | } |
||
431 | |||
432 | /******************************************************************************/
|
||
433 | // getDims
|
||
434 | /******************************************************************************/
|
||
435 | |||
436 | JNIEXPORT jintArray JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDimsNat |
||
437 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
438 | |||
439 | jintArray longitudes=NULL;
|
||
440 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
441 | record = *(LTIMetadataRecord **)&cPtr; |
||
442 | if(record!=NULL){ |
||
443 | const lt_uint32* dims = record->getDims();
|
||
444 | const lt_uint32 numdims = record->getNumDims();
|
||
445 | longitudes = env->NewIntArray((int)numdims);
|
||
446 | 1180 | igbrotru | env->SetIntArrayRegion( longitudes, 0, (int)numdims,(jint *)dims); |
447 | 840 | igbrotru | |
448 | } |
||
449 | return longitudes;
|
||
450 | } |
||
451 | 1124 | igbrotru | |
452 | |||
453 | /******************************************************************************/
|
||
454 | // ~LTIMetadataRecord
|
||
455 | /******************************************************************************/
|
||
456 | |||
457 | JNIEXPORT void JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_FreeLTIMetadataRecordNat
|
||
458 | (JNIEnv *env, jobject obj, jlong cPtr){ |
||
459 | |||
460 | LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
|
||
461 | |||
462 | record = *(LTIMetadataRecord **)&cPtr; |
||
463 | if(record!=NULL){ |
||
464 | delete record;
|
||
465 | } |
||
466 | |||
467 | 3539 | nacho | } |