| gaiaexif.h | | gaiaexif.h | |
| /* | | /* | |
| gaiaexif.h -- Gaia common EXIF Metadata reading functions | | gaiaexif.h -- Gaia common EXIF Metadata reading functions | |
| | | | |
|
| version 2.4, 2009 September 17 | | version 3.0, 2011 July 20 | |
| | | | |
| Author: Sandro Furieri a.furieri@lqt.it | | Author: Sandro Furieri a.furieri@lqt.it | |
| | | | |
| --------------------------------------------------------------------------
---- | | --------------------------------------------------------------------------
---- | |
| | | | |
| Version: MPL 1.1/GPL 2.0/LGPL 2.1 | | Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |
| | | | |
| The contents of this file are subject to the Mozilla Public License Versio
n | | The contents of this file are subject to the Mozilla Public License Versio
n | |
| 1.1 (the "License"); you may not use this file except in compliance with | | 1.1 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | | the License. You may obtain a copy of the License at | |
| | | | |
| skipping to change at line 45 | | skipping to change at line 45 | |
| of those above. If you wish to allow use of your version of this file only | | of those above. If you wish to allow use of your version of this file only | |
| under the terms of either the GPL or the LGPL, and not to allow others to | | under the terms of either the GPL or the LGPL, and not to allow others to | |
| use your version of this file under the terms of the MPL, indicate your | | use your version of this file under the terms of the MPL, indicate your | |
| decision by deleting the provisions above and replace them with the notice | | decision by deleting the provisions above and replace them with the notice | |
| and other provisions required by the GPL or the LGPL. If you do not delete | | and other provisions required by the GPL or the LGPL. If you do not delete | |
| the provisions above, a recipient may use your version of this file under | | the provisions above, a recipient may use your version of this file under | |
| the terms of any one of the MPL, the GPL or the LGPL. | | the terms of any one of the MPL, the GPL or the LGPL. | |
| | | | |
| */ | | */ | |
| | | | |
|
| | | /** | |
| | | \file gaiaexif.h | |
| | | | |
| | | EXIF/image: supporting functions and constants | |
| | | */ | |
| | | | |
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| #ifdef DLL_EXPORT | | #ifdef DLL_EXPORT | |
| #define GAIAEXIF_DECLARE __declspec(dllexport) | | #define GAIAEXIF_DECLARE __declspec(dllexport) | |
| #else | | #else | |
| #define GAIAEXIF_DECLARE extern | | #define GAIAEXIF_DECLARE extern | |
| #endif | | #endif | |
|
| | | #endif | |
| | | | |
| #ifndef _GAIAEXIF_H | | #ifndef _GAIAEXIF_H | |
|
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| #define _GAIAEXIF_H | | #define _GAIAEXIF_H | |
|
| | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #endif | | #endif | |
| | | | |
| /* constants used for BLOB value types */ | | /* constants used for BLOB value types */ | |
|
| | | /** generic hexadecimal BLOB */ | |
| #define GAIA_HEX_BLOB 0 | | #define GAIA_HEX_BLOB 0 | |
|
| | | /** this BLOB does actually contain a GIF image */ | |
| #define GAIA_GIF_BLOB 1 | | #define GAIA_GIF_BLOB 1 | |
|
| | | /** this BLOB does actually containt a PNG image */ | |
| #define GAIA_PNG_BLOB 2 | | #define GAIA_PNG_BLOB 2 | |
|
| | | /** this BLOB does actually contain a generic JPEG image */ | |
| #define GAIA_JPEG_BLOB 3 | | #define GAIA_JPEG_BLOB 3 | |
|
| | | /** this BLOB does actually contain a JPEG-EXIF image */ | |
| #define GAIA_EXIF_BLOB 4 | | #define GAIA_EXIF_BLOB 4 | |
|
| | | /** this BLOB does actually contain a JPEG-EXIF image including GPS data */ | |
| #define GAIA_EXIF_GPS_BLOB 5 | | #define GAIA_EXIF_GPS_BLOB 5 | |
|
| | | /** this BLOB does actually contain a ZIP compressed file */ | |
| #define GAIA_ZIP_BLOB 6 | | #define GAIA_ZIP_BLOB 6 | |
|
| | | /** this BLOB does actually contain a PDF document */ | |
| #define GAIA_PDF_BLOB 7 | | #define GAIA_PDF_BLOB 7 | |
|
| | | /** this BLOB does actually contain a SpatiaLite Geometry */ | |
| #define GAIA_GEOMETRY_BLOB 8 | | #define GAIA_GEOMETRY_BLOB 8 | |
|
| | | /** this BLOB does actually contain a TIFF image */ | |
| #define GAIA_TIFF_BLOB 9 | | #define GAIA_TIFF_BLOB 9 | |
| | | | |
| /* constants used for EXIF value types */ | | /* constants used for EXIF value types */ | |
|
| | | /** unrecognized EXIF value */ | |
| #define GAIA_EXIF_NONE 0 | | #define GAIA_EXIF_NONE 0 | |
|
| | | /** EXIF value of the BYTE type */ | |
| #define GAIA_EXIF_BYTE 1 | | #define GAIA_EXIF_BYTE 1 | |
|
| | | /** EXIF value of the SHORT type */ | |
| #define GAIA_EXIF_SHORT 2 | | #define GAIA_EXIF_SHORT 2 | |
|
| | | /** EXIF value of the STRING type */ | |
| #define GAIA_EXIF_STRING 3 | | #define GAIA_EXIF_STRING 3 | |
|
| | | /** EXIF value of the LONG type */ | |
| #define GAIA_EXIF_LONG 4 | | #define GAIA_EXIF_LONG 4 | |
|
| | | /** EXIF value of the RATIONAL type */ | |
| #define GAIA_EXIF_RATIONAL 5 | | #define GAIA_EXIF_RATIONAL 5 | |
|
| | | /** EXIF value of the SLONG type */ | |
| #define GAIA_EXIF_SLONG 9 | | #define GAIA_EXIF_SLONG 9 | |
|
| | | /** EXIF value of the SRATIONAL type */ | |
| #define GAIA_EXIF_SRATIONAL 10 | | #define GAIA_EXIF_SRATIONAL 10 | |
| | | | |
|
| | | /** | |
| | | Container for an EXIF tag | |
| | | */ | |
| typedef struct gaiaExifTagStruct | | typedef struct gaiaExifTagStruct | |
| { | | { | |
| /* an EXIF TAG */ | | /* an EXIF TAG */ | |
|
| | | /** GPS data included (0/1) */ | |
| char Gps; | | char Gps; | |
|
| | | /** EXIF tag ID */ | |
| unsigned short TagId; | | unsigned short TagId; | |
|
| | | /** EXIF value type */ | |
| unsigned short Type; | | unsigned short Type; | |
|
| | | /** number of values */ | |
| unsigned short Count; | | unsigned short Count; | |
|
| | | /** tag offset [big- little-endian encoded] */ | |
| unsigned char TagOffset[4]; | | unsigned char TagOffset[4]; | |
|
| | | /** array of BYTE values */ | |
| unsigned char *ByteValue; | | unsigned char *ByteValue; | |
|
| | | /** array of STRING values */ | |
| char *StringValue; | | char *StringValue; | |
|
| | | /** array of SHORT values */ | |
| unsigned short *ShortValues; | | unsigned short *ShortValues; | |
|
| | | /** array of LONG values ] */ | |
| unsigned int *LongValues; | | unsigned int *LongValues; | |
|
| | | /** array of RATIONAL values [numerators] */ | |
| unsigned int *LongRationals1; | | unsigned int *LongRationals1; | |
|
| | | /** array of RATIONAL values [denominators] */ | |
| unsigned int *LongRationals2; | | unsigned int *LongRationals2; | |
|
| | | /** array of Signed SHORT values */ | |
| short *SignedShortValues; | | short *SignedShortValues; | |
|
| | | /** array of Signed LONG values */ | |
| int *SignedLongValues; | | int *SignedLongValues; | |
|
| | | /** array of Signed RATIONAL values [numerators] */ | |
| int *SignedLongRationals1; | | int *SignedLongRationals1; | |
|
| | | /** array of Signed RATIONAL values [denominators] */ | |
| int *SignedLongRationals2; | | int *SignedLongRationals2; | |
|
| | | /** array of FLOAT values */ | |
| float *FloatValues; | | float *FloatValues; | |
|
| | | /** array of DOUBLE values */ | |
| double *DoubleValues; | | double *DoubleValues; | |
|
| | | /** pointer to next item into the linked list */ | |
| struct gaiaExifTagStruct *Next; | | struct gaiaExifTagStruct *Next; | |
| } gaiaExifTag; | | } gaiaExifTag; | |
|
| | | /** | |
| | | Typedef for EXIF tag structure. | |
| | | | |
| | | \sa gaiaExifTagStruct | |
| | | */ | |
| typedef gaiaExifTag *gaiaExifTagPtr; | | typedef gaiaExifTag *gaiaExifTagPtr; | |
| | | | |
|
| | | /** | |
| | | Container for a list of EXIF tags | |
| | | */ | |
| typedef struct gaiaExifTagListStruct | | typedef struct gaiaExifTagListStruct | |
| { | | { | |
| /* an EXIF TAG LIST */ | | /* an EXIF TAG LIST */ | |
|
| | | /** pointer to first item into the linked list */ | |
| gaiaExifTagPtr First; | | gaiaExifTagPtr First; | |
|
| | | /** pointer to the last item into the linked list */ | |
| gaiaExifTagPtr Last; | | gaiaExifTagPtr Last; | |
|
| | | /** number of items */ | |
| int NumTags; | | int NumTags; | |
|
| | | /** an array of pointers to items */ | |
| gaiaExifTagPtr *TagsArray; | | gaiaExifTagPtr *TagsArray; | |
| } gaiaExifTagList; | | } gaiaExifTagList; | |
|
| | | /** | |
| | | Typedef for EXIF tag structure | |
| | | | |
| | | \sa gaiaExifTagListStruct | |
| | | */ | |
| typedef gaiaExifTagList *gaiaExifTagListPtr; | | typedef gaiaExifTagList *gaiaExifTagListPtr; | |
| | | | |
| /* function prototipes */ | | /* function prototipes */ | |
| | | | |
|
| | | /** | |
| | | Creates a list of EXIF tags by parsing a BLOB of the JPEG-EXIF type | |
| | | | |
| | | \param blob the BLOB to be parsed | |
| | | \param size the BLOB size (in bytes) | |
| | | | |
| | | \return a list of EXIF tags: or NULL if any error is encountered | |
| | | | |
| | | \sa gaiaExifTagsFree | |
| | | | |
| | | \note you must explicitly destroy the list when it's any longer used. | |
| | | */ | |
| GAIAEXIF_DECLARE gaiaExifTagListPtr gaiaGetExifTags (const unsigned cha
r | | GAIAEXIF_DECLARE gaiaExifTagListPtr gaiaGetExifTags (const unsigned cha
r | |
| *blob, int size); | | *blob, int size); | |
|
| | | | |
| | | /** | |
| | | Destroy a list of EXIF tags | |
| | | | |
| | | \param tag_list the list to be destroied | |
| | | | |
| | | \sa gaiaGetExifTags | |
| | | | |
| | | \note the pointer passed to this function must be one returned by a | |
| | | previous call to gaiaGetExifTags | |
| | | */ | |
| GAIAEXIF_DECLARE void gaiaExifTagsFree (gaiaExifTagListPtr tag_list); | | GAIAEXIF_DECLARE void gaiaExifTagsFree (gaiaExifTagListPtr tag_list); | |
|
| | | | |
| | | /** | |
| | | Return the total number of EXIF tags into the list | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | | |
| | | \return the EXIF tag count. | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list)
; | | GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list)
; | |
|
| | | | |
| | | /** | |
| | | Retrieves an EXIF tag by its relative position into the list | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | \param pos relative item position [first item is 0] | |
| | | | |
| | | \return a pointer to the corresponding EXIF tag: NULL if not found | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree, gaiaExifTagsCount | |
| | | */ | |
| GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByPos (gaiaExifTagListPtr | | GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByPos (gaiaExifTagListPtr | |
| tag_list, | | tag_list, | |
| const int pos); | | const int pos); | |
|
| | | | |
| | | /** | |
| | | Return the total number of EXIF tags into the list | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | | |
| | | \return the EXIF tag count. | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree | |
| | | */ | |
| | | GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list) | |
| | | ; | |
| | | | |
| | | /** | |
| | | Retrieves an EXIF tag by its Tag ID | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | \param tag_id the Tag ID to be found | |
| | | | |
| | | \return a pointer to the corresponding EXIF tag: NULL if not found | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree | |
| | | */ | |
| GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagById (const gaiaExifTagLi
stPtr | | GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagById (const gaiaExifTagLi
stPtr | |
| tag_list, | | tag_list, | |
| const unsigned short | | const unsigned short | |
| tag_id); | | tag_id); | |
|
| | | | |
| | | /** | |
| | | Retrieves an EXIF-GPS tag by its Tag ID | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | \param tag_id the GPS Tag ID to be found | |
| | | | |
| | | \return a pointer to the corresponding EXIF tag: NULL if not found | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree | |
| | | */ | |
| GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifGpsTagById (const | | GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifGpsTagById (const | |
| gaiaExifTagListPt
r | | gaiaExifTagListPt
r | |
| tag_list, | | tag_list, | |
| const unsigned sh
ort | | const unsigned sh
ort | |
| tag_id); | | tag_id); | |
|
| | | | |
| | | /** | |
| | | Retrieves an EXIF tag by its name | |
| | | | |
| | | \param tag_list pointer to an EXIF tag list. | |
| | | \param tag_name the Tag Name to be found | |
| | | | |
| | | \return a pointer to the corresponding EXIF tag: NULL if not found | |
| | | | |
| | | \sa gaiaGetExifTags, gaiaExifTagsFree | |
| | | */ | |
| GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByName (const | | GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByName (const | |
| gaiaExifTagListPtr | | gaiaExifTagListPtr | |
| tag_list, | | tag_list, | |
| const char *tag_na
me); | | const char *tag_na
me); | |
|
| | | | |
| | | /** | |
| | | Return the Tag ID from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag | |
| | | | |
| | | \return the Tag ID | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned short gaiaExifTagGetId (const gaiaExifTagPtr
tag); | | GAIAEXIF_DECLARE unsigned short gaiaExifTagGetId (const gaiaExifTagPtr
tag); | |
|
| | | | |
| | | /** | |
| | | Return the Tag Name from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag | |
| | | \param tag_name receiving buffer: the Tag Name will be copied here | |
| | | \param len length of the receiving buffer | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE void gaiaExifTagGetName (const gaiaExifTagPtr tag, | | GAIAEXIF_DECLARE void gaiaExifTagGetName (const gaiaExifTagPtr tag, | |
| char *tag_name, int len); | | char *tag_name, int len); | |
|
| | | | |
| | | /** | |
| | | Checks if an EXIF tag actually is an EXIF-GPS tag | |
| | | | |
| | | \param tag pointer to an EXIF tag | |
| | | | |
| | | \return 0 if false: any other value if true | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaIsExifGpsTag (const gaiaExifTagPtr tag); | | GAIAEXIF_DECLARE int gaiaIsExifGpsTag (const gaiaExifTagPtr tag); | |
|
| | | | |
| | | /** | |
| | | Return the value type for an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag | |
| | | | |
| | | \return the value type: one of GAIA_EXIF_NONE, GAIA_EXIF_BYTE, | |
| | | GAIA_EXIF_SHORT, GAIA_EXIF_STRING, GAIA_EXIF_LONG, GAIA_EXIF_RATIONAL, | |
| | | GAIA_EXIF_SLONG, GAIA_EXIF_SRATIONAL | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned short gaiaExifTagGetValueType (const | | GAIAEXIF_DECLARE unsigned short gaiaExifTagGetValueType (const | |
| gaiaExifTagPtr | | gaiaExifTagPtr | |
| tag); | | tag); | |
|
| | | | |
| | | /** | |
| | | Return the total count of values from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag | |
| | | | |
| | | \return the number of available values | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned short gaiaExifTagGetNumValues (const | | GAIAEXIF_DECLARE unsigned short gaiaExifTagGetNumValues (const | |
| gaiaExifTagPtr | | gaiaExifTagPtr | |
| tag); | | tag); | |
|
| | | | |
| | | /** | |
| | | Return a BYTE value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the BYTE value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned char gaiaExifTagGetByteValue (const gaiaExifT
agPtr | | GAIAEXIF_DECLARE unsigned char gaiaExifTagGetByteValue (const gaiaExifT
agPtr | |
| tag, const int i
nd, | | tag, const int i
nd, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a STRING value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param str receiving buffer: the STRING value will be copied here. | |
| | | \param len length of the receiving buffer | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE void gaiaExifTagGetStringValue (const gaiaExifTagPtr t
ag, | | GAIAEXIF_DECLARE void gaiaExifTagGetStringValue (const gaiaExifTagPtr t
ag, | |
| char *str, int len, | | char *str, int len, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a SHORT value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the SHORT value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned short gaiaExifTagGetShortValue (const | | GAIAEXIF_DECLARE unsigned short gaiaExifTagGetShortValue (const | |
| gaiaExifTagPtr | | gaiaExifTagPtr | |
| tag, | | tag, | |
| const int ind, | | const int ind, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a LONG value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the LONG value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned int gaiaExifTagGetLongValue (const gaiaExifTa
gPtr | | GAIAEXIF_DECLARE unsigned int gaiaExifTagGetLongValue (const gaiaExifTa
gPtr | |
| tag, const int in
d, | | tag, const int in
d, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a RATIONAL [numerator] value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the RATIONAL [numerator] value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational1Value (const | | GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational1Value (const | |
| gaiaExifTagP
tr | | gaiaExifTagP
tr | |
| tag, | | tag, | |
| const int in
d, | | const int in
d, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a RATIONAL [denominator] value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the RATIONAL [denominator] value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational2Value (const | | GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational2Value (const | |
| gaiaExifTagP
tr | | gaiaExifTagP
tr | |
| tag, | | tag, | |
| const int in
d, | | const int in
d, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a RATIONAL value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the RATIONAL value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE double gaiaExifTagGetRationalValue (const gaiaExifTagP
tr | | GAIAEXIF_DECLARE double gaiaExifTagGetRationalValue (const gaiaExifTagP
tr | |
| tag, const int ind, | | tag, const int ind, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a Signed SHORT value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the Signed SHORT value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE short gaiaExifTagGetSignedShortValue (const gaiaExifTa
gPtr | | GAIAEXIF_DECLARE short gaiaExifTagGetSignedShortValue (const gaiaExifTa
gPtr | |
| tag, const int in
d, | | tag, const int in
d, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a Signed LONG value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the Signed LONG value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaExifTagGetSignedLongValue (const gaiaExifTagPt
r | | GAIAEXIF_DECLARE int gaiaExifTagGetSignedLongValue (const gaiaExifTagPt
r | |
| tag, const int ind, | | tag, const int ind, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a SRATIONAL [numerator] value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the SRATIONAL [numerator] value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational1Value (const | | GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational1Value (const | |
| gaiaExifTagPtr
tag, | | gaiaExifTagPtr
tag, | |
| const int ind, | | const int ind, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a SRATIONAL [denominator] value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the SRATIONAL [denominator] value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational2Value (const | | GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational2Value (const | |
| gaiaExifTagPtr
tag, | | gaiaExifTagPtr
tag, | |
| const int ind, | | const int ind, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a Signed RATIONAL value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the Signed RATIONAL value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE double gaiaExifTagGetSignedRationalValue (const | | GAIAEXIF_DECLARE double gaiaExifTagGetSignedRationalValue (const | |
| gaiaExifTagPt
r | | gaiaExifTagPt
r | |
| tag, | | tag, | |
| const int ind
, | | const int ind
, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Return a FLOAT value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the FLOAT value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE float gaiaExifTagGetFloatValue (const gaiaExifTagPtr t
ag, | | GAIAEXIF_DECLARE float gaiaExifTagGetFloatValue (const gaiaExifTagPtr t
ag, | |
| const int ind, int *ok)
; | | const int ind, int *ok)
; | |
|
| | | | |
| | | /** | |
| | | Return a DOUBLE value from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param ind value index [first value has index 0]. | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \return the DOUBLE value | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaExifTagGetValueType, gaiaExifTagGetNumValues | |
| | | */ | |
| GAIAEXIF_DECLARE double gaiaExifTagGetDoubleValue (const gaiaExifTagPtr
tag, | | GAIAEXIF_DECLARE double gaiaExifTagGetDoubleValue (const gaiaExifTagPtr
tag, | |
| const int ind, int *o
k); | | const int ind, int *o
k); | |
|
| | | | |
| | | /** | |
| | | Return a human readable description from an EXIF tag | |
| | | | |
| | | \param tag pointer to an EXIF tag. | |
| | | \param str receiving buffer: the STRING value will be copied here. | |
| | | \param len length of the receiving buffer | |
| | | \param ok on completion will contain 0 on failure: any other value on succ | |
| | | ess. | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName | |
| | | */ | |
| GAIAEXIF_DECLARE void gaiaExifTagGetHumanReadable (const gaiaExifTagPtr
tag, | | GAIAEXIF_DECLARE void gaiaExifTagGetHumanReadable (const gaiaExifTagPtr
tag, | |
| char *str, int len, | | char *str, int len, | |
| int *ok); | | int *ok); | |
|
| | | | |
| | | /** | |
| | | Attempts to guess the actual content-type of some BLOB | |
| | | | |
| | | \param blob the BLOB to be parsed | |
| | | \param size length of the BLOB (in bytes) | |
| | | | |
| | | \return the BLOB type: one of GAIA_HEX_BLOB, GAIA_GIF_BLOB, GAIA_PNG_BLOB, | |
| | | GAIA_JPEG_BLOB, GAIA_EXIF_BLOB, GAIA_EXIF_GPS_BLOB, GAIA_ZIP_BLOB, | |
| | | GAIA_PDF_BLOB, GAIA_GEOMETRY_BLOB, GAIA_TIFF_BLOB | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaGuessBlobType (const unsigned char *blob, | | GAIAEXIF_DECLARE int gaiaGuessBlobType (const unsigned char *blob, | |
| int size); | | int size); | |
|
| | | /** | |
| | | Return longitude and latitude from an EXIF-GPS tag | |
| | | | |
| | | \param blob the BLOB to be parsed | |
| | | \param size length of the BLOB (in bytes) | |
| | | \param longitude on success will contain the longitude coordinate | |
| | | \param latitude on success will contain the latitude coordinate | |
| | | | |
| | | \return 0 on failure: any other value on success | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaIsExifGpsTag | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaGetGpsCoords (const unsigned char *blob, int s
ize, | | GAIAEXIF_DECLARE int gaiaGetGpsCoords (const unsigned char *blob, int s
ize, | |
| double *longitude, double *latitu
de); | | double *longitude, double *latitu
de); | |
|
| | | /** | |
| | | Return a text string representing DMS coordinates from an EXIF-GPS tag | |
| | | | |
| | | \param blob the BLOB to be parsed | |
| | | \param size length of the BLOB (in bytes) | |
| | | \param latlong receiving buffer: the text string will be copied here. | |
| | | \param ll_size length of the receiving buffer | |
| | | | |
| | | \return 0 on failure: any other value on success | |
| | | | |
| | | \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, | |
| | | gaiaIsExifGpsTag | |
| | | */ | |
| GAIAEXIF_DECLARE int gaiaGetGpsLatLong (const unsigned char *blob, int
size, | | GAIAEXIF_DECLARE int gaiaGetGpsLatLong (const unsigned char *blob, int
size, | |
| char *latlong, int ll_size); | | char *latlong, int ll_size); | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif /* _GAIAEXIF_H */ | | #endif /* _GAIAEXIF_H */ | |
| | | | |
End of changes. 79 change blocks. |
| 1 lines changed or deleted | | 452 lines changed or added | |
|
| gaiageo.h | | gaiageo.h | |
| /* | | /* | |
| gaiageo.h -- Gaia common support for geometries | | gaiageo.h -- Gaia common support for geometries | |
| | | | |
|
| version 2.4, 2009 September 17 | | version 3.0, 2011 July 20 | |
| | | | |
| Author: Sandro Furieri a.furieri@lqt.it | | Author: Sandro Furieri a.furieri@lqt.it | |
| | | | |
| --------------------------------------------------------------------------
---- | | --------------------------------------------------------------------------
---- | |
| | | | |
| Version: MPL 1.1/GPL 2.0/LGPL 2.1 | | Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |
| | | | |
| The contents of this file are subject to the Mozilla Public License Versio
n | | The contents of this file are subject to the Mozilla Public License Versio
n | |
| 1.1 (the "License"); you may not use this file except in compliance with | | 1.1 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | | the License. You may obtain a copy of the License at | |
| | | | |
| skipping to change at line 46 | | skipping to change at line 46 | |
| of those above. If you wish to allow use of your version of this file only | | of those above. If you wish to allow use of your version of this file only | |
| under the terms of either the GPL or the LGPL, and not to allow others to | | under the terms of either the GPL or the LGPL, and not to allow others to | |
| use your version of this file under the terms of the MPL, indicate your | | use your version of this file under the terms of the MPL, indicate your | |
| decision by deleting the provisions above and replace them with the notice | | decision by deleting the provisions above and replace them with the notice | |
| and other provisions required by the GPL or the LGPL. If you do not delete | | and other provisions required by the GPL or the LGPL. If you do not delete | |
| the provisions above, a recipient may use your version of this file under | | the provisions above, a recipient may use your version of this file under | |
| the terms of any one of the MPL, the GPL or the LGPL. | | the terms of any one of the MPL, the GPL or the LGPL. | |
| | | | |
| */ | | */ | |
| | | | |
|
| | | /** | |
| | | \file gaiageo.h | |
| | | | |
| | | Geometry handling functions and constants | |
| | | */ | |
| | | | |
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| /* stdio.h included for FILE objects. */ | | /* stdio.h included for FILE objects. */ | |
| #include <stdio.h> | | #include <stdio.h> | |
|
| | | | |
| #ifdef DLL_EXPORT | | #ifdef DLL_EXPORT | |
| #define GAIAGEO_DECLARE __declspec(dllexport) | | #define GAIAGEO_DECLARE __declspec(dllexport) | |
| #else | | #else | |
| #define GAIAGEO_DECLARE extern | | #define GAIAGEO_DECLARE extern | |
| #endif | | #endif | |
|
| | | #endif | |
| | | | |
| #ifndef _GAIAGEO_H | | #ifndef _GAIAGEO_H | |
|
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| #define _GAIAGEO_H | | #define _GAIAGEO_H | |
|
| | | | |
| #ifdef __cplusplus | | | |
| extern "C" | | | |
| { | | | |
| #endif | | #endif | |
| | | | |
|
| /* constant values for generic geometry classes */ | | #include "gg_const.h" | |
| #define GAIA_TYPE_NONE 0 | | #include "gg_structs.h" | |
| #define GAIA_TYPE_POINT 1 | | #include "gg_core.h" | |
| #define GAIA_TYPE_LINESTRING 2 | | #include "gg_mbr.h" | |
| #define GAIA_TYPE_POLYGON 3 | | #include "gg_formats.h" | |
| | | #include "gg_dynamic.h" | |
| /* constants that defines byte storage order */ | | #include "gg_advanced.h" | |
| #define GAIA_BIG_ENDIAN 0 | | | |
| #define GAIA_LITTLE_ENDIAN 1 | | | |
| | | | |
| /* constants that defines special markers used for encoding of SpatiaLite i | | | |
| nternal BLOB geometries */ | | | |
| #define GAIA_MARK_START 0x00 | | | |
| #define GAIA_MARK_END 0xFE | | | |
| #define GAIA_MARK_MBR 0x7C | | | |
| #define GAIA_MARK_ENTITY 0x69 | | | |
| | | | |
| /* constants that defines GEOMETRY CLASSes */ | | | |
| #define GAIA_UNKNOWN 0 | | | |
| #define GAIA_POINT 1 | | | |
| #define GAIA_LINESTRING 2 | | | |
| #define GAIA_POLYGON 3 | | | |
| #define GAIA_MULTIPOINT 4 | | | |
| #define GAIA_MULTILINESTRING 5 | | | |
| #define GAIA_MULTIPOLYGON 6 | | | |
| #define GAIA_GEOMETRYCOLLECTION 7 | | | |
| #define GAIA_POINTZ 1001 | | | |
| #define GAIA_LINESTRINGZ 1002 | | | |
| #define GAIA_POLYGONZ 1003 | | | |
| #define GAIA_MULTIPOINTZ 1004 | | | |
| #define GAIA_MULTILINESTRINGZ 1005 | | | |
| #define GAIA_MULTIPOLYGONZ 1006 | | | |
| #define GAIA_GEOMETRYCOLLECTIONZ 1007 | | | |
| #define GAIA_POINTM 2001 | | | |
| #define GAIA_LINESTRINGM 2002 | | | |
| #define GAIA_POLYGONM 2003 | | | |
| #define GAIA_MULTIPOINTM 2004 | | | |
| #define GAIA_MULTILINESTRINGM 2005 | | | |
| #define GAIA_MULTIPOLYGONM 2006 | | | |
| #define GAIA_GEOMETRYCOLLECTIONM 2007 | | | |
| #define GAIA_POINTZM 3001 | | | |
| #define GAIA_LINESTRINGZM 3002 | | | |
| #define GAIA_POLYGONZM 3003 | | | |
| #define GAIA_MULTIPOINTZM 3004 | | | |
| #define GAIA_MULTILINESTRINGZM 3005 | | | |
| #define GAIA_MULTIPOLYGONZM 3006 | | | |
| #define GAIA_GEOMETRYCOLLECTIONZM 3007 | | | |
| | | | |
| /* constants that defines Compressed GEOMETRY CLASSes */ | | | |
| #define GAIA_COMPRESSED_LINESTRING 1000002 | | | |
| #define GAIA_COMPRESSED_POLYGON 1000003 | | | |
| #define GAIA_COMPRESSED_LINESTRINGZ 1001002 | | | |
| #define GAIA_COMPRESSED_POLYGONZ 1001003 | | | |
| #define GAIA_COMPRESSED_LINESTRINGM 1002002 | | | |
| #define GAIA_COMPRESSED_POLYGONM 1002003 | | | |
| #define GAIA_COMPRESSED_LINESTRINGZM 1003002 | | | |
| #define GAIA_COMPRESSED_POLYGONZM 1003003 | | | |
| | | | |
| /* constants that defines token codes for WKT parsing */ | | | |
| #define GAIA_COORDINATE 8 | | | |
| #define GAIA_OPENED 9 | | | |
| #define GAIA_CLOSED 10 | | | |
| #define GAIA_COMMA 11 | | | |
| #define GAIA_SPACE 12 | | | |
| | | | |
| /* constants that defines multitype values */ | | | |
| #define GAIA_NULL_VALUE 0 | | | |
| #define GAIA_TEXT_VALUE 1 | | | |
| #define GAIA_INT_VALUE 2 | | | |
| #define GAIA_DOUBLE_VALUE 3 | | | |
| | | | |
| /* constants that defines POINT index for LINESTRING */ | | | |
| #define GAIA_START_POINT 1 | | | |
| #define GAIA_END_POINT 2 | | | |
| #define GAIA_POINTN 3 | | | |
| | | | |
| /* constants that defines MBRs spatial relationships */ | | | |
| #define GAIA_MBR_CONTAINS 1 | | | |
| #define GAIA_MBR_DISJOINT 2 | | | |
| #define GAIA_MBR_EQUAL 3 | | | |
| #define GAIA_MBR_INTERSECTS 4 | | | |
| #define GAIA_MBR_OVERLAPS 5 | | | |
| #define GAIA_MBR_TOUCHES 6 | | | |
| #define GAIA_MBR_WITHIN 7 | | | |
| | | | |
| /* constants used for FilterMBR */ | | | |
| #define GAIA_FILTER_MBR_WITHIN 74 | | | |
| #define GAIA_FILTER_MBR_CONTAINS 77 | | | |
| #define GAIA_FILTER_MBR_INTERSECTS 79 | | | |
| #define GAIA_FILTER_MBR_DECLARE 89 | | | |
| | | | |
| /* constants defining SVG default values */ | | | |
| #define GAIA_SVG_DEFAULT_RELATIVE 0 | | | |
| #define GAIA_SVG_DEFAULT_PRECISION 6 | | | |
| #define GAIA_SVG_DEFAULT_MAX_PRECISION 15 | | | |
| | | | |
| /* constants used for VirtualNetwork */ | | | |
| #define GAIA_NET_START 0x67 | | | |
| #define GAIA_NET64_START 0x68 | | | |
| #define GAIA_NET64_A_STAR_START 0x69 | | | |
| #define GAIA_NET_END 0x87 | | | |
| #define GAIA_NET_HEADER 0xc0 | | | |
| #define GAIA_NET_CODE 0xa6 | | | |
| #define GAIA_NET_ID 0xb5 | | | |
| #define GAIA_NET_NODE 0xde | | | |
| #define GAIA_NET_ARC 0x54 | | | |
| #define GAIA_NET_TABLE 0xa0 | | | |
| #define GAIA_NET_FROM 0xa1 | | | |
| #define GAIA_NET_TO 0xa2 | | | |
| #define GAIA_NET_GEOM 0xa3 | | | |
| #define GAIA_NET_NAME 0xa4 | | | |
| #define GAIA_NET_A_STAR_COEFF 0xa5 | | | |
| #define GAIA_NET_BLOCK 0xed | | | |
| | | | |
| /* constants used for Coordinate Dimensions */ | | | |
| #define GAIA_XY 0x00 | | | |
| #define GAIA_XY_Z 0x01 | | | |
| #define GAIA_XY_M 0x02 | | | |
| #define GAIA_XY_Z_M 0x03 | | | |
| | | | |
| /* constants used for length unit conversion */ | | | |
| #define GAIA_KM 0 | | | |
| #define GAIA_M 1 | | | |
| #define GAIA_DM 2 | | | |
| #define GAIA_CM 3 | | | |
| #define GAIA_MM 4 | | | |
| #define GAIA_KMI 5 | | | |
| #define GAIA_IN 6 | | | |
| #define GAIA_FT 7 | | | |
| #define GAIA_YD 8 | | | |
| #define GAIA_MI 9 | | | |
| #define GAIA_FATH 10 | | | |
| #define GAIA_CH 11 | | | |
| #define GAIA_LINK 12 | | | |
| #define GAIA_US_IN 13 | | | |
| #define GAIA_US_FT 14 | | | |
| #define GAIA_US_YD 15 | | | |
| #define GAIA_US_CH 16 | | | |
| #define GAIA_US_MI 17 | | | |
| #define GAIA_IND_YD 18 | | | |
| #define GAIA_IND_FT 19 | | | |
| #define GAIA_IND_CH 20 | | | |
| #define GAIA_MIN_UNIT GAIA_KM | | | |
| #define GAIA_MAX_UNIT GAIA_IND_CH | | | |
| | | | |
| /* constants used for SHAPES */ | | | |
| #define GAIA_SHP_NULL 0 | | | |
| #define GAIA_SHP_POINT 1 | | | |
| #define GAIA_SHP_POLYLINE 3 | | | |
| #define GAIA_SHP_POLYGON 5 | | | |
| #define GAIA_SHP_MULTIPOINT 8 | | | |
| #define GAIA_SHP_POINTZ 11 | | | |
| #define GAIA_SHP_POLYLINEZ 13 | | | |
| #define GAIA_SHP_POLYGONZ 15 | | | |
| #define GAIA_SHP_MULTIPOINTZ 18 | | | |
| #define GAIA_SHP_POINTM 21 | | | |
| #define GAIA_SHP_POLYLINEM 23 | | | |
| #define GAIA_SHP_POLYGONM 25 | | | |
| #define GAIA_SHP_MULTIPOINTM 28 | | | |
| | | | |
| /* macros */ | | | |
| #define gaiaGetPoint(xy,v,x,y) \ | | | |
| {*x = xy[(v) * 2]; \ | | | |
| *y = xy[(v) * 2 + 1];} | | | |
| | | | |
| #define gaiaSetPoint(xy,v,x,y) \ | | | |
| {xy[(v) * 2] = x; \ | | | |
| xy[(v) * 2 + 1] = y;} | | | |
| | | | |
| #define gaiaGetPointXYZ(xyz,v,x,y,z) \ | | | |
| {*x = xyz[(v) * 3]; \ | | | |
| *y = xyz[(v) * 3 + 1]; \ | | | |
| *z = xyz[(v) * 3 + 2];} | | | |
| | | | |
| #define gaiaSetPointXYZ(xyz,v,x,y,z) \ | | | |
| {xyz[(v) * 3] = x; \ | | | |
| xyz[(v) * 3 + 1] = y; \ | | | |
| xyz[(v) * 3 + 2] = z;} | | | |
| | | | |
| #define gaiaGetPointXYM(xym,v,x,y,m) \ | | | |
| {*x = xym[(v) * 3]; \ | | | |
| *y = xym[(v) * 3 + 1]; \ | | | |
| *m = xym[(v) * 3 + 2];} | | | |
| | | | |
| #define gaiaSetPointXYM(xym,v,x,y,m) \ | | | |
| {xym[(v) * 3] = x; \ | | | |
| xym[(v) * 3 + 1] = y; \ | | | |
| xym[(v) * 3 + 2] = m;} | | | |
| | | | |
| #define gaiaGetPointXYZM(xyzm,v,x,y,z,m) \ | | | |
| {*x = xyzm[(v) * 4]; \ | | | |
| *y = xyzm[(v) * 4 + 1]; \ | | | |
| *z = xyzm[(v) * 4 + 2]; \ | | | |
| *m = xyzm[(v) * 4 + 3];} | | | |
| | | | |
| #define gaiaSetPointXYZM(xyzm,v,x,y,z,m) \ | | | |
| {xyzm[(v) * 4] = x; \ | | | |
| xyzm[(v) * 4 + 1] = y; \ | | | |
| xyzm[(v) * 4 + 2] = z; \ | | | |
| xyzm[(v) * 4 + 3] = m;} | | | |
| | | | |
| typedef struct gaiaPointStruct | | | |
| { | | | |
| /* an OpenGis POINT */ | | | |
| double X; /* X,Y coordinates */ | | | |
| double Y; | | | |
| double Z; /* Z coordinate */ | | | |
| double M; /* M measure */ | | | |
| int DimensionModel; /* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */ | | | |
| struct gaiaPointStruct *Next; /* for double-linked list */ | | | |
| struct gaiaPointStruct *Prev; /* for double-linked list */ | | | |
| } gaiaPoint; | | | |
| typedef gaiaPoint *gaiaPointPtr; | | | |
| | | | |
| typedef struct gaiaDynamicLineStruct | | | |
| { | | | |
| /* a generic DYNAMIC LINE object */ | | | |
| int Error; | | | |
| int Srid; | | | |
| gaiaPointPtr First; /* Points linked list - first */ | | | |
| gaiaPointPtr Last; /* Points linked list - last */ | | | |
| } gaiaDynamicLine; | | | |
| typedef gaiaDynamicLine *gaiaDynamicLinePtr; | | | |
| | | | |
| typedef struct gaiaLinestringStruct | | | |
| { | | | |
| /* an OpenGis LINESTRING */ | | | |
| int Points; /* number of vertices */ | | | |
| double *Coords; /* X,Y [vertices] array */ | | | |
| double MinX; /* MBR - BBOX */ | | | |
| double MinY; /* MBR - BBOX */ | | | |
| double MaxX; /* MBR - BBOX */ | | | |
| double MaxY; /* MBR - BBOX */ | | | |
| int DimensionModel; /* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */ | | | |
| struct gaiaLinestringStruct *Next; /* for linked list */ | | | |
| } gaiaLinestring; | | | |
| typedef gaiaLinestring *gaiaLinestringPtr; | | | |
| | | | |
| typedef struct gaiaRingStruct | | | |
| { | | | |
| /* a GIS ring - OpenGis LINESTRING, closed */ | | | |
| int Points; /* number of vertices */ | | | |
| double *Coords; /* X,Y [vertices] array */ | | | |
| int Clockwise; /* clockwise / counterclockwise */ | | | |
| double MinX; /* MBR - BBOX */ | | | |
| double MinY; /* MBR - BBOX */ | | | |
| double MaxX; /* MBR - BBOX */ | | | |
| double MaxY; /* MBR - BBOX */ | | | |
| int DimensionModel; /* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */ | | | |
| struct gaiaRingStruct *Next; /* for linked list */ | | | |
| struct gaiaPolygonStruct *Link; /* polygon reference */ | | | |
| } gaiaRing; | | | |
| typedef gaiaRing *gaiaRingPtr; | | | |
| | | | |
| typedef struct gaiaPolygonStruct | | | |
| { | | | |
| /* an OpenGis POLYGON */ | | | |
| gaiaRingPtr Exterior; /* exterior ring */ | | | |
| int NumInteriors; /* number of interior rings */ | | | |
| gaiaRingPtr Interiors; /* interior rings array */ | | | |
| int NextInterior; /* first free interior ring */ | | | |
| double MinX; /* MBR - BBOX */ | | | |
| double MinY; /* MBR - BBOX */ | | | |
| double MaxX; /* MBR - BBOX */ | | | |
| double MaxY; /* MBR - BBOX */ | | | |
| int DimensionModel; /* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */ | | | |
| struct gaiaPolygonStruct *Next; /* for linked list */ | | | |
| } gaiaPolygon; | | | |
| typedef gaiaPolygon *gaiaPolygonPtr; | | | |
| | | | |
| typedef struct gaiaGeomCollStruct | | | |
| { | | | |
| /* OpenGis GEOMETRYCOLLECTION */ | | | |
| int Srid; /* the SRID value for this GEOMETRY */ | | | |
| char endian_arch; /* littleEndian - bigEndian arch for targer | | | |
| CPU */ | | | |
| char endian; /* littleEndian - bigEndian */ | | | |
| const unsigned char *blob; /* WKB encoded buffer */ | | | |
| unsigned long size; /* buffer size */ | | | |
| unsigned long offset; /* current offset [for parsing] */ | | | |
| gaiaPointPtr FirstPoint; /* Points linked list - first */ | | | |
| gaiaPointPtr LastPoint; /* Points linked list - last */ | | | |
| gaiaLinestringPtr FirstLinestring; /* Linestrings linked list - | | | |
| first */ | | | |
| gaiaLinestringPtr LastLinestring; /* Linestrings linked list - | | | |
| last */ | | | |
| gaiaPolygonPtr FirstPolygon; /* Polygons linked list - first */ | | | |
| gaiaPolygonPtr LastPolygon; /* Polygons linked list - last */ | | | |
| double MinX; /* MBR - BBOX */ | | | |
| double MinY; /* MBR - BBOX */ | | | |
| double MaxX; /* MBR - BBOX */ | | | |
| double MaxY; /* MBR - BBOX */ | | | |
| int DimensionModel; /* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */ | | | |
| int DeclaredType; /* the declared TYPE for this Geometry */ | | | |
| struct gaiaGeomCollStruct *Next; /* Vanuatu - used for linked | | | |
| list */ | | | |
| } gaiaGeomColl; | | | |
| typedef gaiaGeomColl *gaiaGeomCollPtr; | | | |
| | | | |
| typedef struct gaiaPreRingStruct | | | |
| { | | | |
| /* a LINESTRING used to build rings */ | | | |
| gaiaLinestringPtr Line; /* a LINESTRING pointer */ | | | |
| int AlreadyUsed; /* a switch to mark an already used line ele | | | |
| ment */ | | | |
| struct gaiaPreRingStruct *Next; /* for linked list */ | | | |
| } gaiaPreRing; | | | |
| typedef gaiaPreRing *gaiaPreRingPtr; | | | |
| | | | |
| typedef struct gaiaValueStruct | | | |
| { | | | |
| /* a DBF field multitype value */ | | | |
| short Type; /* the type */ | | | |
| char *TxtValue; /* the text value */ | | | |
| sqlite3_int64 IntValue; /* the integer value */ | | | |
| double DblValue; /* the double value */ | | | |
| } gaiaValue; | | | |
| typedef gaiaValue *gaiaValuePtr; | | | |
| | | | |
| typedef struct gaiaDbfFieldStruct | | | |
| { | | | |
| /* a DBF field definition - shapefile attribute */ | | | |
| char *Name; /* field name */ | | | |
| unsigned char Type; /* field type */ | | | |
| int Offset; /* buffer offset [this field begins at *buff | | | |
| er+offset* and extends for *length* bytes */ | | | |
| unsigned char Length; /* field total lenght [in bytes] */ | | | |
| unsigned char Decimals; /* decimal positions */ | | | |
| gaiaValuePtr Value; /* the current multitype value for this attr | | | |
| ibute */ | | | |
| struct gaiaDbfFieldStruct *Next; /* pointer to next element i | | | |
| n linked list */ | | | |
| } gaiaDbfField; | | | |
| typedef gaiaDbfField *gaiaDbfFieldPtr; | | | |
| | | | |
| typedef struct gaiaDbfListStruct | | | |
| { | | | |
| /* a linked list to containt the DBF fields definitions - shapefile attribu | | | |
| tes */ | | | |
| int RowId; /* the current RowId */ | | | |
| gaiaGeomCollPtr Geometry; /* geometry for current entity */ | | | |
| gaiaDbfFieldPtr First; /* pointer to first element in linked list * | | | |
| / | | | |
| gaiaDbfFieldPtr Last; /* pointer to last element in linker list */ | | | |
| } gaiaDbfList; | | | |
| typedef gaiaDbfList *gaiaDbfListPtr; | | | |
| | | | |
| typedef struct gaiaDbfStruct | | | |
| { | | | |
| /* DBF TYPE */ | | | |
| int endian_arch; | | | |
| int Valid; /* 1 = ready to process */ | | | |
| char *Path; /* the DBF path */ | | | |
| FILE *flDbf; /* the DBF file handle */ | | | |
| gaiaDbfListPtr Dbf; /* the DBF attributes list */ | | | |
| unsigned char *BufDbf; /* the DBF I/O buffer */ | | | |
| int DbfHdsz; /* the DBF header length */ | | | |
| int DbfReclen; /* the DBF record length */ | | | |
| int DbfSize; /* current DBF size */ | | | |
| int DbfRecno; /* current DBF record number */ | | | |
| void *IconvObj; /* opaque reference to ICONV converter */ | | | |
| char *LastError; /* last error message */ | | | |
| } gaiaDbf; | | | |
| typedef gaiaDbf *gaiaDbfPtr; | | | |
| | | | |
| typedef struct gaiaShapefileStruct | | | |
| { | | | |
| /* SHAPEFILE TYPE */ | | | |
| int endian_arch; | | | |
| int Valid; /* 1 = ready to process */ | | | |
| int ReadOnly; /* read or write mode */ | | | |
| char *Path; /* the shapefile abstract path [no suffixes] | | | |
| */ | | | |
| FILE *flShx; /* the SHX file handle */ | | | |
| FILE *flShp; /* the SHP file handle */ | | | |
| FILE *flDbf; /* the DBF file handle */ | | | |
| int Shape; /* the SHAPE code for the whole shapefile */ | | | |
| gaiaDbfListPtr Dbf; /* the DBF attributes list */ | | | |
| unsigned char *BufDbf; /* the DBF I/O buffer */ | | | |
| int DbfHdsz; /* the DBF header length */ | | | |
| int DbfReclen; /* the DBF record length */ | | | |
| int DbfSize; /* current DBF size */ | | | |
| int DbfRecno; /* current DBF record number */ | | | |
| unsigned char *BufShp; /* the SHP I/O buffer */ | | | |
| int ShpBfsz; /* the SHP buffer current size */ | | | |
| int ShpSize; /* current SHP size */ | | | |
| int ShxSize; /* current SHX size */ | | | |
| double MinX; /* the MBR/BBOX for the whole shapefile */ | | | |
| double MinY; | | | |
| double MaxX; | | | |
| double MaxY; | | | |
| void *IconvObj; /* opaque reference to ICONV converter */ | | | |
| char *LastError; /* last error message */ | | | |
| int EffectiveType; /* the effective Geometry-type, as determine | | | |
| d by gaiaShpAnalyze() */ | | | |
| int EffectiveDims; /* the effective Dimensions [XY, XYZ, XYM, X | | | |
| YZM], as determined by gaiaShpAnalyze() */ | | | |
| } gaiaShapefile; | | | |
| typedef gaiaShapefile *gaiaShapefilePtr; | | | |
| | | | |
| typedef struct gaiaOutBufferStruct | | | |
| { | | | |
| /* a struct handling a dynamically growing output buffer */ | | | |
| char *Buffer; | | | |
| int WriteOffset; | | | |
| int BufferSize; | | | |
| int Error; | | | |
| } gaiaOutBuffer; | | | |
| typedef gaiaOutBuffer *gaiaOutBufferPtr; | | | |
| | | | |
| #ifndef OMIT_ICONV /* ICONV enabled: supporting text reader */ | | | |
| | | | |
| #define VRTTXT_FIELDS_MAX 65535 | | | |
| #define VRTTXT_BLOCK_MAX 65535 | | | |
| | | | |
| #define VRTTXT_TEXT 1 | | | |
| #define VRTTXT_INTEGER 2 | | | |
| #define VRTTXT_DOUBLE 3 | | | |
| #define VRTTXT_NULL 4 | | | |
| | | | |
| struct vrttxt_line | | | |
| { | | | |
| /* a struct representing a full LINE (aka Record) */ | | | |
| off_t offset; | | | |
| int len; | | | |
| int field_offsets[VRTTXT_FIELDS_MAX]; | | | |
| int num_fields; | | | |
| int error; | | | |
| }; | | | |
| | | | |
| struct vrttxt_row | | | |
| { | | | |
| /* a struct storing Row offsets */ | | | |
| int line_no; | | | |
| off_t offset; | | | |
| int len; | | | |
| int num_fields; | | | |
| }; | | | |
| | | | |
| struct vrttxt_row_block | | | |
| { | | | |
| /* | | | |
| / for efficiency sake, individuale Row offsets | | | |
| / are grouped in reasonably sized blocks | | | |
| */ | | | |
| struct vrttxt_row rows[VRTTXT_BLOCK_MAX]; | | | |
| int num_rows; | | | |
| int min_line_no; | | | |
| int max_line_no; | | | |
| struct vrttxt_row_block *next; | | | |
| }; | | | |
| | | | |
| struct vrttxt_column_header | | | |
| { | | | |
| /* a struct representing a Column (aka Field) header */ | | | |
| char *name; | | | |
| int type; | | | |
| }; | | | |
| | | | |
| typedef struct vrttxt_reader | | | |
| { | | | |
| /* the main TXT-Reader struct */ | | | |
| struct vrttxt_column_header columns[VRTTXT_FIELDS_MAX]; | | | |
| FILE *text_file; | | | |
| void *toUtf8; /* the UTF-8 ICONV converter */ | | | |
| char field_separator; | | | |
| char text_separator; | | | |
| char decimal_separator; | | | |
| int first_line_titles; | | | |
| int error; | | | |
| struct vrttxt_row_block *first; | | | |
| struct vrttxt_row_block *last; | | | |
| struct vrttxt_row **rows; | | | |
| int num_rows; | | | |
| int line_no; | | | |
| int max_fields; | | | |
| int current_buf_sz; | | | |
| int current_buf_off; | | | |
| char *line_buffer; | | | |
| char *field_buffer; | | | |
| int field_offsets[VRTTXT_FIELDS_MAX]; | | | |
| int field_lens[VRTTXT_FIELDS_MAX]; | | | |
| int max_current_field; | | | |
| int current_line_ready; | | | |
| } gaiaTextReader; | | | |
| typedef gaiaTextReader *gaiaTextReaderPtr; | | | |
| | | | |
| #endif /* end ICONV (text reader) */ | | | |
| | | | |
| /* function prototipes */ | | | |
| | | | |
| GAIAGEO_DECLARE int gaiaEndianArch (void); | | | |
| GAIAGEO_DECLARE short gaiaImport16 (const unsigned char *p, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE int gaiaImport32 (const unsigned char *p, int little_en | | | |
| dian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE float gaiaImportF32 (const unsigned char *p, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE double gaiaImport64 (const unsigned char *p, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE sqlite3_int64 gaiaImportI64 (const unsigned char *p, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE void gaiaExport16 (unsigned char *p, short value, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE void gaiaExport32 (unsigned char *p, int value, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE void gaiaExportF32 (unsigned char *p, float value, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE void gaiaExport64 (unsigned char *p, double value, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE void gaiaExportI64 (unsigned char *p, sqlite3_int64 val | | | |
| ue, | | | |
| int little_endian, | | | |
| int little_endian_arch); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y, | | | |
| double z); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y, | | | |
| double m); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y, | | | |
| double z, double m); | | | |
| GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert); | | | |
| GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr); | | | |
| GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst, | | | |
| gaiaLinestringPtr src); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert); | | | |
| GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr); | | | |
| GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr s | | | |
| rc); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int excl); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int excl) | | | |
| ; | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int excl) | | | |
| ; | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int excl | | | |
| ); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring); | | | |
| GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr p); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void); | | | |
| GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr p); | | | |
| GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double | | | |
| x, | | | |
| double y); | | | |
| GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, doub | | | |
| le x, | | | |
| double y, double z); | | | |
| GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, doub | | | |
| le x, | | | |
| double y, double m); | | | |
| GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p, | | | |
| double x, double y, | | | |
| double z, double m); | | | |
| GAIAGEO_DECLARE void gaiaMbrLinestring (gaiaLinestringPtr line); | | | |
| GAIAGEO_DECLARE void gaiaMbrRing (gaiaRingPtr rng); | | | |
| GAIAGEO_DECLARE void gaiaMbrPolygon (gaiaPolygonPtr polyg); | | | |
| GAIAGEO_DECLARE void gaiaMbrGeometry (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE void gaiaZRangeLinestring (gaiaLinestringPtr line, | | | |
| double *min, double *max); | | | |
| GAIAGEO_DECLARE void gaiaZRangeRing (gaiaRingPtr rng, double *min, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE void gaiaZRangePolygon (gaiaPolygonPtr polyg, double *m | | | |
| in, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE void gaiaZRangeGeometry (gaiaGeomCollPtr geom, double * | | | |
| min, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE void gaiaMRangeLinestring (gaiaLinestringPtr line, | | | |
| double *min, double *max); | | | |
| GAIAGEO_DECLARE void gaiaMRangeRing (gaiaRingPtr rng, double *min, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE void gaiaMRangePolygon (gaiaPolygonPtr polyg, double *m | | | |
| in, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE void gaiaMRangeGeometry (gaiaGeomCollPtr geom, double * | | | |
| min, | | | |
| double *max); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr | | | |
| gaiaAddLinestringToGeomColl (gaiaGeomCollPtr p, int vert); | | | |
| GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p, | | | |
| gaiaLinestringPtr | | | |
| line); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaAddPolygonToGeomColl (gaiaGeomCollPt | | | |
| r p, | | | |
| int vert, | | | |
| int interiors); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaInsertPolygonInGeomColl (gaiaGeomCol | | | |
| lPtr | | | |
| p, | | | |
| gaiaRingPtr | | | |
| ring); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing (gaiaPolygonPtr p, int | | | |
| pos, | | | |
| int vert); | | | |
| GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p, | | | |
| gaiaRingPtr ring); | | | |
| GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg, | | | |
| gaiaRingPtr ring); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaAllocDynamicLine (void); | | | |
| GAIAGEO_DECLARE void gaiaFreeDynamicLine (gaiaDynamicLinePtr p); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaAppendPointToDynamicLine (gaiaDynamicLinePtr p, double x, double | | | |
| y); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaAppendPointZToDynamicLine (gaiaDynamicLinePtr p, double x, doubl | | | |
| e y, | | | |
| double z); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaAppendPointMToDynamicLine (gaiaDynamicLinePtr p, double x, doubl | | | |
| e y, | | | |
| double m); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaAppendPointZMToDynamicLine (gaiaDynamicLinePtr p, double x, | | | |
| double y, double z, double m); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaPrependPointToDynamicLine (gaiaDynamicLinePtr p, double x, | | | |
| double y); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaPrependPointZToDynamicLine (gaiaDynamicLinePtr p, double x, | | | |
| double y, double z); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaPrependPointMToDynamicLine (gaiaDynamicLinePtr p, double x, | | | |
| double y, double m); | | | |
| GAIAGEO_DECLARE gaiaPointPtr | | | |
| gaiaPrependPointZMToDynamicLine (gaiaDynamicLinePtr p, double x, | | | |
| double y, double z, double m); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertAfter (gaiaDynamicLin | | | |
| ePtr | | | |
| p, gaiaPointPtr | | | |
| pt, | | | |
| double x, | | | |
| double y); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertBefore (gaiaDynamicLi | | | |
| nePtr | | | |
| p, | | | |
| gaiaPointPtr p | | | |
| t, | | | |
| double x, | | | |
| double y); | | | |
| GAIAGEO_DECLARE void gaiaDynamicLineDeletePoint (gaiaDynamicLinePtr p, | | | |
| gaiaPointPtr pt); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCloneDynamicLine (gaiaDynamicLin | | | |
| ePtr | | | |
| org); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr | | | |
| gaiaReverseDynamicLine (gaiaDynamicLinePtr org); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr | | | |
| gaiaDynamicLineSplitBefore (gaiaDynamicLinePtr org, gaiaPointPtr poi | | | |
| nt); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr | | | |
| gaiaDynamicLineSplitAfter (gaiaDynamicLinePtr org, gaiaPointPtr poin | | | |
| t); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr | | | |
| gaiaDynamicLineJoinAfter (gaiaDynamicLinePtr org, gaiaPointPtr point | | | |
| , | | | |
| gaiaDynamicLinePtr toJoin); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr | | | |
| gaiaDynamicLineJoinBefore (gaiaDynamicLinePtr org, gaiaPointPtr poin | | | |
| t, | | | |
| gaiaDynamicLinePtr toJoin); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByCoords (gaiaDynamicLi | | | |
| nePtr | | | |
| p, double x, | | | |
| double y); | | | |
| GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByPos (gaiaDynamicLineP | | | |
| tr p, | | | |
| int pos); | | | |
| GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCreateDynamicLine (double *coord | | | |
| s, | | | |
| int points); | | | |
| GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords, | | | |
| int vert); | | | |
| GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring); | | | |
| GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx, | | | |
| double *ry); | | | |
| GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p); | | | |
| GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring, double | | | |
| pt_x, | | | |
| double pt_y); | | | |
| GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0, | | | |
| int dims, double *coords, | | | |
| int n_vert); | | | |
| GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg, | | | |
| double x, double y); | | | |
| GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1, | | | |
| double y1, double x2, double y2, | | | |
| double x3, double y3, double x4, | | | |
| double y4); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobWkb (const unsign | | | |
| ed | | | |
| char *blob, | | | |
| unsigned int | | | |
| size); | | | |
| GAIAGEO_DECLARE void gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, | | | |
| unsigned char **result, | | | |
| int *size); | | | |
| GAIAGEO_DECLARE void gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, | | | |
| unsigned char **result, | | | |
| int *size); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobMbr (const unsign | | | |
| ed | | | |
| char *blob, | | | |
| unsigned int | | | |
| size); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromWkb (const unsigned char *blob, | | | |
| unsigned int size); | | | |
| GAIAGEO_DECLARE void gaiaToWkb (gaiaGeomCollPtr geom, | | | |
| unsigned char **result, int *size); | | | |
| GAIAGEO_DECLARE char *gaiaToHexWkb (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE void gaiaFreeValue (gaiaValuePtr p); | | | |
| GAIAGEO_DECLARE void gaiaSetNullValue (gaiaDbfFieldPtr field); | | | |
| GAIAGEO_DECLARE void gaiaSetIntValue (gaiaDbfFieldPtr field, | | | |
| sqlite3_int64 value); | | | |
| GAIAGEO_DECLARE void gaiaSetDoubleValue (gaiaDbfFieldPtr field, | | | |
| double value); | | | |
| GAIAGEO_DECLARE void gaiaSetStrValue (gaiaDbfFieldPtr field, char *str) | | | |
| ; | | | |
| GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAllocDbfField (char *name, | | | |
| unsigned char type, | | | |
| int offset, | | | |
| unsigned char length, | | | |
| unsigned char decimal | | | |
| s); | | | |
| GAIAGEO_DECLARE void gaiaFreeDbfField (gaiaDbfFieldPtr p); | | | |
| GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaCloneDbfField (gaiaDbfFieldPtr org) | | | |
| ; | | | |
| GAIAGEO_DECLARE gaiaDbfListPtr gaiaAllocDbfList (void); | | | |
| GAIAGEO_DECLARE void gaiaFreeDbfList (gaiaDbfListPtr list); | | | |
| GAIAGEO_DECLARE int gaiaIsValidDbfList (gaiaDbfListPtr list); | | | |
| GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAddDbfField (gaiaDbfListPtr list, | | | |
| char *name, | | | |
| unsigned char type, | | | |
| int offset, | | | |
| unsigned char length, | | | |
| unsigned char decimals) | | | |
| ; | | | |
| GAIAGEO_DECLARE void gaiaResetDbfEntity (gaiaDbfListPtr list); | | | |
| GAIAGEO_DECLARE gaiaValuePtr gaiaCloneValue (gaiaValuePtr org); | | | |
| GAIAGEO_DECLARE gaiaDbfListPtr gaiaCloneDbfEntity (gaiaDbfListPtr org); | | | |
| GAIAGEO_DECLARE gaiaShapefilePtr gaiaAllocShapefile (void); | | | |
| GAIAGEO_DECLARE void gaiaFreeShapefile (gaiaShapefilePtr shp); | | | |
| GAIAGEO_DECLARE void gaiaOpenShpRead (gaiaShapefilePtr shp, | | | |
| const char *path, | | | |
| const char *charFrom, | | | |
| const char *charTo); | | | |
| GAIAGEO_DECLARE void gaiaOpenShpWrite (gaiaShapefilePtr shp, | | | |
| const char *path, int shape, | | | |
| gaiaDbfListPtr list, | | | |
| const char *charFrom, | | | |
| const char *charTo); | | | |
| GAIAGEO_DECLARE int gaiaReadShpEntity (gaiaShapefilePtr shp, | | | |
| int current_row, int srid); | | | |
| GAIAGEO_DECLARE void gaiaShpAnalyze (gaiaShapefilePtr shp); | | | |
| GAIAGEO_DECLARE int gaiaWriteShpEntity (gaiaShapefilePtr shp, | | | |
| gaiaDbfListPtr entity); | | | |
| GAIAGEO_DECLARE void gaiaFlushShpHeaders (gaiaShapefilePtr shp); | | | |
| GAIAGEO_DECLARE gaiaDbfPtr gaiaAllocDbf (void); | | | |
| GAIAGEO_DECLARE void gaiaFreeDbf (gaiaDbfPtr dbf); | | | |
| GAIAGEO_DECLARE void gaiaOpenDbfRead (gaiaDbfPtr dbf, | | | |
| const char *path, | | | |
| const char *charFrom, | | | |
| const char *charTo); | | | |
| GAIAGEO_DECLARE int gaiaReadDbfEntity (gaiaDbfPtr shp, int current_row, | | | |
| int *deleted); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseWkt (const unsigned char | | | |
| *dirty_buffer, short type) | | | |
| ; | | | |
| GAIAGEO_DECLARE void gaiaOutWkt (gaiaOutBufferPtr out_buf, | | | |
| gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE void gaiaOutSvg (gaiaOutBufferPtr out_buf, | | | |
| gaiaGeomCollPtr geom, int relative, | | | |
| int precision); | | | |
| GAIAGEO_DECLARE void gaiaOutBareKml (gaiaOutBufferPtr out_buf, | | | |
| gaiaGeomCollPtr geom, int precision | | | |
| ); | | | |
| GAIAGEO_DECLARE void gaiaOutFullKml (gaiaOutBufferPtr out_buf, | | | |
| const char *name, const char *desc, | | | |
| gaiaGeomCollPtr geom, int precision | | | |
| ); | | | |
| GAIAGEO_DECLARE void gaiaOutGml (gaiaOutBufferPtr out_buf, int version, | | | |
| int precision, gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromFgf (const unsigned char *blob, | | | |
| unsigned int size); | | | |
| GAIAGEO_DECLARE void gaiaToFgf (gaiaGeomCollPtr geom, | | | |
| unsigned char **result, int *size, | | | |
| int coord_dims); | | | |
| GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaMbrsContains (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsEqual (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsIntersects (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsTouches (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE int gaiaMbrsWithin (gaiaGeomCollPtr mbr1, | | | |
| gaiaGeomCollPtr mbr2); | | | |
| GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom, double shif | | | |
| t_x, | | | |
| double shift_y); | | | |
| GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom, double scal | | | |
| e_x, | | | |
| double scale_y); | | | |
| GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double ang | | | |
| le); | | | |
| GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axi | | | |
| s, | | | |
| int y_axis); | | | |
| GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY (gaiaGeomCollPtr g | | | |
| eom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZ (gaiaGeomCollPtr | | | |
| geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYM (gaiaGeomCollPtr | | | |
| geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZM (gaiaGeomCollPtr | | | |
| geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom | | | |
| ); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPoints (gaiaGeomCollPt | | | |
| r | | | |
| geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr | | | |
| gaiaCloneGeomCollLinestrings (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPolygons (gaiaGeomColl | | | |
| Ptr | | | |
| geom); | | | |
| GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestring (gaiaLinestringPt | | | |
| r | | | |
| line); | | | |
| GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring); | | | |
| GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg); | | | |
| GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1, | | | |
| gaiaLinestringPtr line2); | | | |
| GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr geom1, | | | |
| gaiaPolygonPtr geom2); | | | |
| GAIAGEO_DECLARE void gaiaMakePoint (double x, double y, int srid, | | | |
| unsigned char **result, int *size); | | | |
| GAIAGEO_DECLARE void gaiaMakeLine (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2, | | | |
| unsigned char **result, int *size); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries (gaiaGeomCollPtr ge | | | |
| om1, | | | |
| gaiaGeomCollPtr geo | | | |
| m2); | | | |
| GAIAGEO_DECLARE void gaiaBuildMbr (double x1, double y1, double x2, | | | |
| double y2, int srid, | | | |
| unsigned char **result, int *size); | | | |
| GAIAGEO_DECLARE void gaiaBuildFilterMbr (double x1, double y1, double x | | | |
| 2, | | | |
| double y2, int mode, | | | |
| unsigned char **result, int *si | | | |
| ze); | | | |
| GAIAGEO_DECLARE int gaiaParseFilterMbr (unsigned char *result, int size | | | |
| , | | | |
| double *minx, double *miny, | | | |
| double *maxx, double *maxy, | | | |
| int *mode); | | | |
| GAIAGEO_DECLARE void gaiaBuildCircleMbr (double x, double y, double rad | | | |
| ius, | | | |
| int srid, unsigned char **resul | | | |
| t, | | | |
| int *size); | | | |
| GAIAGEO_DECLARE int gaiaGetMbrMinX (const unsigned char *blob, | | | |
| unsigned int size, double *minx); | | | |
| GAIAGEO_DECLARE int gaiaGetMbrMaxX (const unsigned char *blob, | | | |
| unsigned int size, double *maxx); | | | |
| GAIAGEO_DECLARE int gaiaGetMbrMinY (const unsigned char *blob, | | | |
| unsigned int size, double *miny); | | | |
| GAIAGEO_DECLARE int gaiaGetMbrMaxY (const unsigned char *blob, | | | |
| unsigned int size, double *maxy); | | | |
| GAIAGEO_DECLARE void gaiaFree (void *ptr); | | | |
| GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a, | | | |
| double *b, double *rf); | | | |
| GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b, | | | |
| double lat1, double lon1 | | | |
| , | | | |
| double lat2, double lon2 | | | |
| ); | | | |
| GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b, double | | | |
| rf, | | | |
| double lat1, double lon1, | | | |
| double lat2, double lon2); | | | |
| GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b, | | | |
| int dims, double *coo | | | |
| rds, | | | |
| int vert); | | | |
| GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b, | | | |
| double rf, int dims, | | | |
| double *coords, int vert | | | |
| ); | | | |
| GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from, | | | |
| int unit_to, double *cvt); | | | |
| GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v, | | | |
| double *x, double *y, double *z, | | | |
| double *m); | | | |
| GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v, doub | | | |
| le x, | | | |
| double y, double z, double m); | | | |
| GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x | | | |
| , | | | |
| double *y, double *z, double *m); | | | |
| GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x, | | | |
| double y, double z, double m); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org); | | | |
| GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr org); | | | |
| GAIAGEO_DECLARE void gaiaOutBufferInitialize (gaiaOutBufferPtr buf); | | | |
| GAIAGEO_DECLARE void gaiaOutBufferReset (gaiaOutBufferPtr buf); | | | |
| GAIAGEO_DECLARE void gaiaAppendToOutBuffer (gaiaOutBufferPtr buf, | | | |
| const char *text); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom, | | | |
| int force_multi); | | | |
| | | | |
| #ifndef OMIT_PROJ /* including PROJ.4 */ | | | |
| | | | |
| GAIAGEO_DECLARE double gaiaRadsToDegs (double rads); | | | |
| GAIAGEO_DECLARE double gaiaDegsToRads (double degs); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaTransform (gaiaGeomCollPtr org, | | | |
| char *proj_from, | | | |
| char *proj_to); | | | |
| | | | |
| #endif /* end including PROJ.4 */ | | | |
| | | | |
| #ifndef OMIT_GEOS /* including GEOS */ | | | |
| | | | |
| GAIAGEO_DECLARE void gaiaResetGeosMsg (void); | | | |
| GAIAGEO_DECLARE const char *gaiaGetGeosErrorMsg (void); | | | |
| GAIAGEO_DECLARE const char *gaiaGetGeosWarningMsg (void); | | | |
| GAIAGEO_DECLARE void gaiaSetGeosErrorMsg (const char *msg); | | | |
| GAIAGEO_DECLARE void gaiaSetGeosWarningMsg (const char *msg); | | | |
| | | | |
| GAIAGEO_DECLARE int gaiaGeomCollEquals (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollDisjoint (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollIntersects (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollOverlaps (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollCrosses (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollContains (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollWithin (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollTouches (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollRelate (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2, | | | |
| const char *pattern); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollDistance (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2, | | | |
| double *dist); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryIntersection (gaiaGeomCollP | | | |
| tr | | | |
| geom1, | | | |
| gaiaGeomCollPt | | | |
| r | | | |
| geom2); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryUnion (gaiaGeomCollPtr geom | | | |
| 1, | | | |
| gaiaGeomCollPtr geom2 | | | |
| ); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryDifference (gaiaGeomCollPtr | | | |
| geom1, | | | |
| gaiaGeomCollPtr | | | |
| geom2); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometrySymDifference (gaiaGeomColl | | | |
| Ptr | | | |
| geom1, | | | |
| gaiaGeomCollP | | | |
| tr | | | |
| geom2); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaBoundary (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollCentroid (gaiaGeomCollPtr geom, double | | | |
| *x, | | | |
| double *y); | | | |
| GAIAGEO_DECLARE int gaiaGetPointOnSurface (gaiaGeomCollPtr geom, double | | | |
| *x, | | | |
| double *y); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollSimplify (gaiaGeomCollPtr g | | | |
| eom, | | | |
| double tolerance); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr | | | |
| gaiaGeomCollSimplifyPreserveTopology (gaiaGeomCollPtr geom, | | | |
| double tolerance); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollLength (gaiaGeomCollPtr geom, | | | |
| double *length); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollArea (gaiaGeomCollPtr geom, double *are | | | |
| a); | | | |
| GAIAGEO_DECLARE int gaiaIsSimple (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE int gaiaIsClosed (gaiaLinestringPtr line); | | | |
| GAIAGEO_DECLARE int gaiaIsRing (gaiaLinestringPtr line); | | | |
| GAIAGEO_DECLARE int gaiaIsValid (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaConvexHull (gaiaGeomCollPtr geom); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollBuffer (gaiaGeomCollPtr geo | | | |
| m, | | | |
| double radius, | | | |
| int points); | | | |
| GAIAGEO_DECLARE void *gaiaToGeos (const gaiaGeomCollPtr gaia); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XY (const void *geos); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZ (const void *geos); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYM (const void *geos); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZM (const void *geos); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaPolygonize (gaiaGeomCollPtr geom, | | | |
| int force_multi); | | | |
| | | | |
| #ifdef GEOS_ADVANCED | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaOffsetCurve (gaiaGeomCollPtr geom, | | | |
| double radius, int poin | | | |
| ts, | | | |
| int left_right); | | | |
| GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSharedPaths (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollCovers (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| GAIAGEO_DECLARE int gaiaGeomCollCoveredBy (gaiaGeomCollPtr geom1, | | | |
| gaiaGeomCollPtr geom2); | | | |
| #endif /* end GEOS advanced and experimental featur | | | |
| es */ | | | |
| | | | |
| #endif /* end including GEOS */ | | | |
| | | | |
| #ifndef OMIT_ICONV /* ICONV enabled: supporting text reader */ | | | |
| GAIAGEO_DECLARE gaiaTextReaderPtr gaiaTextReaderAlloc (const char *path | | | |
| , | | | |
| char field_separa | | | |
| tor, | | | |
| char text_separat | | | |
| or, | | | |
| char | | | |
| decimal_separator | | | |
| , | | | |
| int | | | |
| first_line_titles | | | |
| , | | | |
| const char | | | |
| *encoding); | | | |
| GAIAGEO_DECLARE void gaiaTextReaderDestroy (gaiaTextReaderPtr reader); | | | |
| GAIAGEO_DECLARE int gaiaTextReaderParse (gaiaTextReaderPtr reader); | | | |
| GAIAGEO_DECLARE int gaiaTextReaderGetRow (gaiaTextReaderPtr reader, | | | |
| int row_num); | | | |
| GAIAGEO_DECLARE int gaiaTextReaderFetchField (gaiaTextReaderPtr reader, | | | |
| int field_num, int *type, | | | |
| const char **value); | | | |
| #endif /* end ICONV (text reader) */ | | | |
| | | | |
| #ifdef __cplusplus | | | |
| } | | | |
| #endif | | | |
| | | | |
|
| #endif /* _GAIAGEO_H */ | | #endif /* _GAIAGEO_H */ | |
| | | | |
End of changes. 8 change blocks. |
| 1081 lines changed or deleted | | 17 lines changed or added | |
|
| spatialite.h | | spatialite.h | |
| /* | | /* | |
| spatialite.h -- Gaia spatial support for SQLite | | spatialite.h -- Gaia spatial support for SQLite | |
| | | | |
|
| version 2.4, 2009 September 17 | | version 3.0, 2011 July 20 | |
| | | | |
| Author: Sandro Furieri a.furieri@lqt.it | | Author: Sandro Furieri a.furieri@lqt.it | |
| | | | |
| --------------------------------------------------------------------------
---- | | --------------------------------------------------------------------------
---- | |
| | | | |
| Version: MPL 1.1/GPL 2.0/LGPL 2.1 | | Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |
| | | | |
| The contents of this file are subject to the Mozilla Public License Versio
n | | The contents of this file are subject to the Mozilla Public License Versio
n | |
| 1.1 (the "License"); you may not use this file except in compliance with | | 1.1 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | | the License. You may obtain a copy of the License at | |
| | | | |
| skipping to change at line 45 | | skipping to change at line 45 | |
| of those above. If you wish to allow use of your version of this file only | | of those above. If you wish to allow use of your version of this file only | |
| under the terms of either the GPL or the LGPL, and not to allow others to | | under the terms of either the GPL or the LGPL, and not to allow others to | |
| use your version of this file under the terms of the MPL, indicate your | | use your version of this file under the terms of the MPL, indicate your | |
| decision by deleting the provisions above and replace them with the notice | | decision by deleting the provisions above and replace them with the notice | |
| and other provisions required by the GPL or the LGPL. If you do not delete | | and other provisions required by the GPL or the LGPL. If you do not delete | |
| the provisions above, a recipient may use your version of this file under | | the provisions above, a recipient may use your version of this file under | |
| the terms of any one of the MPL, the GPL or the LGPL. | | the terms of any one of the MPL, the GPL or the LGPL. | |
| | | | |
| */ | | */ | |
| | | | |
|
| | | /** | |
| | | \file spatialite.h | |
| | | | |
| | | Main SpatiaLite header file | |
| | | */ | |
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| #ifdef DLL_EXPORT | | #ifdef DLL_EXPORT | |
| #define SPATIALITE_DECLARE __declspec(dllexport) | | #define SPATIALITE_DECLARE __declspec(dllexport) | |
| #else | | #else | |
| #define SPATIALITE_DECLARE extern | | #define SPATIALITE_DECLARE extern | |
| #endif | | #endif | |
|
| | | #endif | |
| | | | |
| #ifndef _SPATIALITE_H | | #ifndef _SPATIALITE_H | |
|
| | | #ifndef DOXYGEN_SHOULD_SKIP_THIS | |
| #define _SPATIALITE_H | | #define _SPATIALITE_H | |
|
| | | #endif | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" | | extern "C" | |
| { | | { | |
| #endif | | #endif | |
| | | | |
|
| | | /** | |
| | | Return the current library version. | |
| | | */ | |
| SPATIALITE_DECLARE const char *spatialite_version (void); | | SPATIALITE_DECLARE const char *spatialite_version (void); | |
|
| | | | |
| | | /** | |
| | | Initializes the library. | |
| | | | |
| | | \param verbose if TRUE a short start-up message is shown on stderr | |
| | | | |
| | | \note You absolutely must invoke this function before attempting to perfor | |
| | | m | |
| | | any other SpatiaLite's call. | |
| | | | |
| | | */ | |
| SPATIALITE_DECLARE void spatialite_init (int verbose); | | SPATIALITE_DECLARE void spatialite_init (int verbose); | |
|
| | | | |
| | | /** | |
| | | Cleanup spatialite | |
| | | | |
| | | This function performs general cleanup, essentially undoing the effect | |
| | | of spatialite_init(). | |
| | | | |
| | | \sa spatialite_init | |
| | | */ | |
| | | SPATIALITE_DECLARE void spatialite_cleanup (); | |
| | | | |
| | | /** | |
| | | Dumps a full geometry-table into an external Shapefile | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table the name of the table to be exported | |
| | | \param column the name of the geometry column | |
| | | \param shp_path pathname of the Shapefile to be exported (no suffix) | |
| | | \param charset a valid GNU ICONV charset to be used for DBF text strings | |
| | | \param geom_type "POINT", "LINESTRING", "POLYGON", "MULTIPOLYGON" or NULL | |
| | | \param verbose if TRUE a short report is shown on stderr | |
| | | \param rows on completion will contain the total number of actually export | |
| | | ed rows | |
| | | \param err_msg on completion will contain an error message (if any) | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| SPATIALITE_DECLARE int dump_shapefile (sqlite3 * sqlite, char *table, | | SPATIALITE_DECLARE int dump_shapefile (sqlite3 * sqlite, char *table, | |
|
| char *column, char *charset, | | char *column, char *shp_path, | |
| char *shp_path, char *geom_type, | | char *charset, char *geom_type, | |
| int verbose, int *rows); | | int verbose, int *rows, | |
| | | char *err_msg); | |
| | | | |
| | | /** | |
| | | Loads an external Shapefile into a newly created table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param shp_path pathname of the Shapefile to be imported (no suffix) | |
| | | \param table the name of the table to be created | |
| | | \param charset a valid GNU ICONV charset to be used for DBF text strings | |
| | | \param srid the SRID to be set for Geometries | |
| | | \param column the name of the geometry column | |
| | | \param coerce2d if TRUE any Geometry will be casted to 2D [XY] | |
| | | \param compressed if TRUE compressed Geometries will be created | |
| | | \param verbose if TRUE a short report is shown on stderr | |
| | | \param spatial_index if TRUE an R*Tree Spatial Index will be created | |
| | | \param rows on completion will contain the total number of actually export | |
| | | ed rows | |
| | | \param err_msg on completion will contain an error message (if any) | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| SPATIALITE_DECLARE int load_shapefile (sqlite3 * sqlite, char *shp_path
, | | SPATIALITE_DECLARE int load_shapefile (sqlite3 * sqlite, char *shp_path
, | |
| char *table, char *charset, int s
rid, | | char *table, char *charset, int s
rid, | |
| char *column, int coerce2d, | | char *column, int coerce2d, | |
| int compressed, int verbose, | | int compressed, int verbose, | |
|
| int *rows); | | int spatial_index, int *rows, | |
| SPATIALITE_DECLARE int load_dbf (sqlite3 * sqlite, char *shp_path, | | char *err_msg); | |
| | | | |
| | | /** | |
| | | Loads an external DBF file into a newly created table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param dbf_path pathname of the DBF file to be imported | |
| | | \param table the name of the table to be created | |
| | | \param charset a valid GNU ICONV charset to be used for DBF text strings | |
| | | \param verbose if TRUE a short report is shown on stderr | |
| | | \param rows on completion will contain the total number of actually export | |
| | | ed rows | |
| | | \param err_msg on completion will contain an error message (if any) | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| | | SPATIALITE_DECLARE int load_dbf (sqlite3 * sqlite, char *dbf_path, | |
| char *table, char *charset, int verbose
, | | char *table, char *charset, int verbose
, | |
|
| int *rows); | | int *rows, char *err_msg); | |
| | | | |
| | | /** | |
| | | Dumps a full table into an external DBF file | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table the name of the table to be exported | |
| | | \param dbf_path pathname of the DBF to be exported | |
| | | \param charset a valid GNU ICONV charset to be used for DBF text strings | |
| | | \param err_msg on completion will contain an error message (if any) | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| | | SPATIALITE_DECLARE int dump_dbf (sqlite3 * sqlite, char *table, | |
| | | char *dbf_path, char *charset, | |
| | | char *err_msg); | |
| | | | |
| | | /** | |
| | | Loads an external spreadsheet (.xls) file into a newly created table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param path pathname of the spreadsheet file to be imported | |
| | | \param table the name of the table to be created | |
| | | \param worksheetIndex the index identifying the worksheet to be imported | |
| | | \param first_titles if TRUE the first line is assumed to contain column na | |
| | | mes | |
| | | \param rows on completion will contain the total number of actually export | |
| | | ed rows | |
| | | \param err_msg on completion will contain an error message (if any) | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| | | SPATIALITE_DECLARE int load_XL (sqlite3 * sqlite, const char *path, | |
| | | const char *table, | |
| | | unsigned int worksheetIndex, | |
| | | int first_titles, unsigned int *rows, | |
| | | char *err_msg); | |
| | | | |
| | | /** | |
| | | A portable replacement for C99 round() | |
| | | | |
| | | \param value a double value | |
| | | | |
| | | \return the nearest integeral value | |
| | | */ | |
| SPATIALITE_DECLARE double math_round (double value); | | SPATIALITE_DECLARE double math_round (double value); | |
|
| | | | |
| | | /** | |
| | | A portable replacement for C99 llabs() | |
| | | | |
| | | \param value a 64 bit integer value | |
| | | | |
| | | \return the corresponding absolute value | |
| | | */ | |
| SPATIALITE_DECLARE sqlite3_int64 math_llabs (sqlite3_int64 value); | | SPATIALITE_DECLARE sqlite3_int64 math_llabs (sqlite3_int64 value); | |
|
| | | | |
| | | /** | |
| | | Inserts the inlined EPSG dataset into the "spatial_ref_sys" table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param verbose if TRUE a short report is shown on stderr | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | | |
| | | \note this function is internally invoked by the SQL function | |
| | | InitSpatialMetadata(), and is not usually intended for direct use. | |
| | | */ | |
| SPATIALITE_DECLARE int spatial_ref_sys_init (sqlite3 * sqlite, int verb
ose); | | SPATIALITE_DECLARE int spatial_ref_sys_init (sqlite3 * sqlite, int verb
ose); | |
|
| | | | |
| | | /** | |
| | | Checks if a column is actually defined into the given table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table the table to be checked | |
| | | \param column the column to be checked | |
| | | | |
| | | \return 0 on success, any other value on success | |
| | | | |
| | | \note internally used to detect if some KML attribute defaults to a consta | |
| | | nt value | |
| | | */ | |
| | | SPATIALITE_DECLARE int | |
| | | is_kml_constant (sqlite3 * sqlite, char *table, char *column); | |
| | | | |
| | | /** | |
| | | Dumps a full geometry-table into an external KML file | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table the name of the table to be exported | |
| | | \param geom_col the name of the geometry column | |
| | | \param kml_path pathname of the KML file to be exported | |
| | | \param name_col column to be used for KML "name" (may be null) | |
| | | \param desc_col column to be used for KML "description" (may be null) | |
| | | \param precision number of decimal digits for coordinates | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| SPATIALITE_DECLARE int dump_kml (sqlite3 * sqlite, char *table, | | SPATIALITE_DECLARE int dump_kml (sqlite3 * sqlite, char *table, | |
| char *geom_col, char *kml_path, | | char *geom_col, char *kml_path, | |
| char *name_col, char *desc_col, | | char *name_col, char *desc_col, | |
| int precision); | | int precision); | |
|
| | | | |
| | | /** | |
| | | Checks for duplicated rows into the same table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table name of the table to be checked | |
| | | \param dupl_count on completion will contain the number of duplicated rows | |
| | | found | |
| | | | |
| | | \sa remove_duplicated_rows | |
| | | \note two (or more) rows are assumed to be duplicated if any column | |
| | | | |
| | | value (excluding any Primary Key column) is exacly the same | |
| | | */ | |
| SPATIALITE_DECLARE void check_duplicated_rows (sqlite3 * sqlite, | | SPATIALITE_DECLARE void check_duplicated_rows (sqlite3 * sqlite, | |
|
| char *table); | | char *table, | |
| | | int *dupl_count); | |
| | | | |
| | | /** | |
| | | Remove duplicated rows from a table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table name of the table to be cleaned | |
| | | | |
| | | \sa check_duplicated_rows | |
| | | | |
| | | \note when two (or more) duplicated rows exist, only the first occurence | |
| | | will be preserved, then deleting any further occurrence. | |
| | | */ | |
| SPATIALITE_DECLARE void remove_duplicated_rows (sqlite3 * sqlite, | | SPATIALITE_DECLARE void remove_duplicated_rows (sqlite3 * sqlite, | |
| char *table); | | char *table); | |
| | | | |
|
| | | /** | |
| | | Creates a derived table surely containing elementary Geometries | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param inTable name of the input table | |
| | | \param geometry name of the Geometry column | |
| | | \param outTable name of the output table to be created | |
| | | \param pKey name of the Primary Key column in the output table | |
| | | \param multiId name of the column identifying origins in the output table | |
| | | | |
| | | \note if the input table contains some kind of complex Geometry | |
| | | (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON or GEOMETRYCOLLECTION), | |
| | | then many rows are inserted into the output table: each single | |
| | | row will contain the same attributes and an elementaty Geometry. | |
| | | All the rows created by expanding the same input row will expose | |
| | | the same value in the "multiId" column. | |
| | | */ | |
| | | SPATIALITE_DECLARE void elementary_geometries (sqlite3 * sqlite, | |
| | | char *inTable, | |
| | | char *geometry, | |
| | | char *outTable, char *pKe | |
| | | y, | |
| | | char *multiId); | |
| | | | |
| | | /** | |
| | | Dumps a full geometry-table into an external GeoJSON file | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table the name of the table to be exported | |
| | | \param geom_col the name of the geometry column | |
| | | \param outfile_path pathname for the GeoJSON file to be written to | |
| | | \param precision number of decimal digits for coordinates | |
| | | \param option the format to use for output | |
| | | | |
| | | \note valid values for option are: | |
| | | - 0 no option | |
| | | - 1 GeoJSON MBR | |
| | | - 2 GeoJSON Short CRS (e.g EPSG:4326) | |
| | | - 3 MBR + Short CRS | |
| | | - 4 GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326) | |
| | | - 5 MBR + Long CRS | |
| | | | |
| | | \return 0 on failure, any other value on success | |
| | | */ | |
| | | SPATIALITE_DECLARE int dump_geojson (sqlite3 * sqlite, char *table, | |
| | | char *geom_col, char *outfile_path, | |
| | | int precision, int option); | |
| | | | |
| | | /** | |
| | | Updates the LAYER_STATICS metadata table | |
| | | | |
| | | \param sqlite handle to current DB connection | |
| | | \param table name of the table to be processed | |
| | | \param column name of the geometry to be processed | |
| | | | |
| | | \note this function will explore the given table/geometry determining | |
| | | the number of rows and the full layer extent; a corresponding table/geomet | |
| | | ry | |
| | | entry is expected to be already declared in the GEOMETRY_COLUMNS table. | |
| | | These informations will be permanently stored into the LAYER_STATISTICS | |
| | | table; if such table does not yet exists will be implicitly created. | |
| | | - if table is NULL, any entry found within GEOMETRY_COLUMNS | |
| | | will be processed. | |
| | | - if table is not NULL and column is NULL, any geometry | |
| | | belonging to the given table will be processed. | |
| | | - if both table and column are not NULL, then only the | |
| | | given entry will be processed. | |
| | | | |
| | | \return 0 on failure, the total count of processed entries on success | |
| | | */ | |
| | | SPATIALITE_DECLARE int update_layer_statistics (sqlite3 * sqlite, | |
| | | const char *table, | |
| | | const char *column); | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif /* _SPATIALITE_H */ | | #endif /* _SPATIALITE_H */ | |
| | | | |
End of changes. 17 change blocks. |
| 8 lines changed or deleted | | 289 lines changed or added | |
|