~ubuntu-branches/debian/sid/gdal/sid

« back to all changes in this revision

Viewing changes to ogr/ogrsf_frmts/gft/ogr_gft.h

  • Committer: Package Import Robot
  • Author(s): Francesco Paolo Lovergine
  • Date: 2012-05-07 15:04:42 UTC
  • mfrom: (5.5.16 experimental)
  • Revision ID: package-import@ubuntu.com-20120507150442-2eks97loeh6rq005
Tags: 1.9.0-1
* Ready for sid, starting transition.
* All symfiles updated to latest builds.
* Added dh_numpy call in debian/rules to depend on numpy ABI.
* Policy bumped to 3.9.3, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 * $Id: ogr_gft.h 22268 2011-04-30 13:10:40Z rouault $
 
3
 *
 
4
 * Project:  GFT Translator
 
5
 * Purpose:  Definition of classes for OGR Google Fusion Tables driver.
 
6
 * Author:   Even Rouault, even dot rouault at mines dash paris dot org
 
7
 *
 
8
 ******************************************************************************
 
9
 * Copyright (c) 2011, Even Rouault <even dot rouault at mines dash paris dot org>
 
10
 *
 
11
 * Permission is hereby granted, free of charge, to any person obtaining a
 
12
 * copy of this software and associated documentation files (the "Software"),
 
13
 * to deal in the Software without restriction, including without limitation
 
14
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
15
 * and/or sell copies of the Software, and to permit persons to whom the
 
16
 * Software is furnished to do so, subject to the following conditions:
 
17
 *
 
18
 * The above copyright notice and this permission notice shall be included
 
19
 * in all copies or substantial portions of the Software.
 
20
 *
 
21
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
22
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
23
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 
24
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
25
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
26
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 
27
 * DEALINGS IN THE SOFTWARE.
 
28
 ****************************************************************************/
 
29
 
 
30
#ifndef _OGR_GFT_H_INCLUDED
 
31
#define _OGR_GFT_H_INCLUDED
 
32
 
 
33
#include "ogrsf_frmts.h"
 
34
#include "cpl_http.h"
 
35
 
 
36
#include <vector>
 
37
 
 
38
/************************************************************************/
 
39
/*                             OGRGFTLayer                              */
 
40
/************************************************************************/
 
41
class OGRGFTDataSource;
 
42
 
 
43
class OGRGFTLayer : public OGRLayer
 
44
{
 
45
protected:
 
46
    OGRGFTDataSource* poDS;
 
47
 
 
48
    OGRFeatureDefn*    poFeatureDefn;
 
49
    OGRSpatialReference *poSRS;
 
50
 
 
51
    int                nNextInSeq;
 
52
 
 
53
    int                iGeometryField;
 
54
    int                iLatitudeField;
 
55
    int                iLongitudeField;
 
56
    int                bHiddenGeometryField;
 
57
 
 
58
    OGRFeature *       GetNextRawFeature();
 
59
 
 
60
    int                nOffset;
 
61
    int                bEOF;
 
62
    virtual int                FetchNextRows() = 0;
 
63
 
 
64
    std::vector<CPLString> aosRows;
 
65
 
 
66
    int                 bFirstTokenIsFID;
 
67
    OGRFeature*         BuildFeatureFromSQL(const char* pszLine);
 
68
 
 
69
    static CPLString    LaunderColName(const char* pszColName);
 
70
 
 
71
  public:
 
72
                         OGRGFTLayer(OGRGFTDataSource* poDS);
 
73
                        ~OGRGFTLayer();
 
74
 
 
75
    virtual void                ResetReading();
 
76
    virtual OGRFeature *        GetNextFeature();
 
77
 
 
78
    virtual OGRFeatureDefn *    GetLayerDefn();
 
79
 
 
80
    virtual int                 TestCapability( const char * );
 
81
 
 
82
    virtual OGRSpatialReference*GetSpatialRef();
 
83
 
 
84
    virtual const char *        GetGeometryColumn();
 
85
 
 
86
    virtual OGRErr              SetNextByIndex( long nIndex );
 
87
 
 
88
    const char *        GetDefaultGeometryColumnName() { return "geometry"; }
 
89
 
 
90
    static int                  ParseCSVResponse(char* pszLine,
 
91
                                                 std::vector<CPLString>& aosRes);
 
92
    static CPLString            PatchSQL(const char* pszSQL);
 
93
 
 
94
    int                         GetGeometryFieldIndex() { return iGeometryField; }
 
95
    int                         GetLatitudeFieldIndex() { return iLatitudeField; }
 
96
    int                         GetLongitudeFieldIndex() { return iLongitudeField; }
 
97
 
 
98
    int                         GetFeaturesToFetch() { return atoi(CPLGetConfigOption("GFT_PAGE_SIZE", "500")); }
 
99
};
 
100
 
 
101
/************************************************************************/
 
102
/*                         OGRGFTTableLayer                             */
 
103
/************************************************************************/
 
104
 
 
105
class OGRGFTTableLayer : public OGRGFTLayer
 
106
{
 
107
    CPLString         osTableName;
 
108
    CPLString         osTableId;
 
109
    CPLString         osGeomColumnName;
 
110
 
 
111
    int                bHasTriedCreateTable;
 
112
    void               CreateTableIfNecessary();
 
113
 
 
114
    CPLString           osWHERE;
 
115
    CPLString           osQuery;
 
116
 
 
117
    void                BuildWhere(void);
 
118
 
 
119
    CPLString          osTransaction;
 
120
    int                bInTransaction;
 
121
    int                nFeaturesInTransaction;
 
122
 
 
123
    int                FetchDescribe();
 
124
    virtual int                FetchNextRows();
 
125
 
 
126
    OGRwkbGeometryType eGTypeForCreation;
 
127
 
 
128
    std::vector<CPLString>  aosColumnInternalName;
 
129
 
 
130
    public:
 
131
            OGRGFTTableLayer(OGRGFTDataSource* poDS,
 
132
                             const char* pszTableName,
 
133
                             const char* pszTableId = "",
 
134
                             const char* pszGeomColumnName = "");
 
135
            ~OGRGFTTableLayer();
 
136
 
 
137
    virtual void                ResetReading();
 
138
 
 
139
    virtual OGRFeatureDefn *    GetLayerDefn();
 
140
 
 
141
    virtual const char *        GetName() { return osTableName.c_str(); }
 
142
    virtual int         GetFeatureCount( int bForce = TRUE );
 
143
 
 
144
    virtual OGRFeature *        GetFeature( long nFID );
 
145
 
 
146
    virtual void        SetSpatialFilter( OGRGeometry * );
 
147
    virtual OGRErr      SetAttributeFilter( const char * );
 
148
 
 
149
    virtual OGRErr      CreateField( OGRFieldDefn *poField,
 
150
                                     int bApproxOK = TRUE );
 
151
    virtual OGRErr      CreateFeature( OGRFeature *poFeature );
 
152
    virtual OGRErr      SetFeature( OGRFeature *poFeature );
 
153
    virtual OGRErr      DeleteFeature( long nFID );
 
154
 
 
155
    virtual OGRErr      StartTransaction();
 
156
    virtual OGRErr      CommitTransaction();
 
157
    virtual OGRErr      RollbackTransaction();
 
158
 
 
159
    const CPLString&            GetTableId() const { return osTableId; }
 
160
 
 
161
    virtual int                 TestCapability( const char * );
 
162
 
 
163
    void                SetGeometryType(OGRwkbGeometryType eGType);
 
164
};
 
165
 
 
166
/************************************************************************/
 
167
/*                        OGRGFTResultLayer                             */
 
168
/************************************************************************/
 
169
 
 
170
class OGRGFTResultLayer : public OGRGFTLayer
 
171
{
 
172
    CPLString   osSQL;
 
173
    int         bGotAllRows;
 
174
 
 
175
    virtual int                FetchNextRows();
 
176
 
 
177
    public:
 
178
            OGRGFTResultLayer(OGRGFTDataSource* poDS,
 
179
                              const char* pszSQL);
 
180
            ~OGRGFTResultLayer();
 
181
 
 
182
    virtual void                ResetReading();
 
183
 
 
184
    int     RunSQL();
 
185
};
 
186
 
 
187
/************************************************************************/
 
188
/*                           OGRGFTDataSource                           */
 
189
/************************************************************************/
 
190
 
 
191
class OGRGFTDataSource : public OGRDataSource
 
192
{
 
193
    char*               pszName;
 
194
 
 
195
    OGRLayer**          papoLayers;
 
196
    int                 nLayers;
 
197
 
 
198
    int                 bReadWrite;
 
199
 
 
200
    int                 bUseHTTPS;
 
201
    CPLString           osAuth;
 
202
    int                 FetchAuth(const char* pszEmail, const char* pszPassword);
 
203
 
 
204
    void                DeleteLayer( const char *pszLayerName );
 
205
 
 
206
    int                 bMustCleanPersistant;
 
207
 
 
208
  public:
 
209
                        OGRGFTDataSource();
 
210
                        ~OGRGFTDataSource();
 
211
 
 
212
    int                 Open( const char * pszFilename,
 
213
                              int bUpdate );
 
214
 
 
215
    virtual const char* GetName() { return pszName; }
 
216
 
 
217
    virtual int         GetLayerCount() { return nLayers; }
 
218
    virtual OGRLayer*   GetLayer( int );
 
219
    virtual OGRLayer    *GetLayerByName(const char *);
 
220
 
 
221
    virtual int         TestCapability( const char * );
 
222
 
 
223
    virtual OGRLayer   *CreateLayer( const char *pszName,
 
224
                                     OGRSpatialReference *poSpatialRef = NULL,
 
225
                                     OGRwkbGeometryType eGType = wkbUnknown,
 
226
                                     char ** papszOptions = NULL );
 
227
    virtual OGRErr      DeleteLayer(int);
 
228
 
 
229
    virtual OGRLayer*  ExecuteSQL( const char *pszSQLCommand,
 
230
                                   OGRGeometry *poSpatialFilter,
 
231
                                   const char *pszDialect );
 
232
    virtual void       ReleaseResultSet( OGRLayer * poLayer );
 
233
 
 
234
    const CPLString&            GetAuth() const { return osAuth; }
 
235
    const char*                 GetAPIURL() const;
 
236
    int                         IsReadWrite() const { return bReadWrite; }
 
237
    char**                      AddHTTPOptions(char** papszOptions = NULL);
 
238
    CPLHTTPResult*              RunSQL(const char* pszUnescapedSQL);
 
239
};
 
240
 
 
241
/************************************************************************/
 
242
/*                             OGRGFTDriver                             */
 
243
/************************************************************************/
 
244
 
 
245
class OGRGFTDriver : public OGRSFDriver
 
246
{
 
247
  public:
 
248
                ~OGRGFTDriver();
 
249
 
 
250
    virtual const char*         GetName();
 
251
    virtual OGRDataSource*      Open( const char *, int );
 
252
    virtual OGRDataSource*      CreateDataSource( const char * pszName,
 
253
                                                  char **papszOptions );
 
254
    virtual int                 TestCapability( const char * );
 
255
};
 
256
 
 
257
char **OGRGFTCSVSplitLine( const char *pszString, char chDelimiter );
 
258
char* OGRGFTGotoNextLine(char* pszData);
 
259
 
 
260
#endif /* ndef _OGR_GFT_H_INCLUDED */