1 : /******************************************************************************
2 : * $Id: ogr_pds.h 20996 2010-10-28 18:38:15Z rouault $
3 : *
4 : * Project: PDS Translator
5 : * Purpose: Definition of classes for OGR .pdstable driver.
6 : * Author: Even Rouault, even dot rouault at mines dash paris dot org
7 : *
8 : ******************************************************************************
9 : * Copyright (c) 2010, 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_PDS_H_INCLUDED
31 : #define _OGR_PDS_H_INCLUDED
32 :
33 : #include "ogrsf_frmts.h"
34 : #include "nasakeywordhandler.h"
35 :
36 : /************************************************************************/
37 : /* OGRPDSLayer */
38 : /************************************************************************/
39 :
40 : typedef enum
41 : {
42 : ASCII_REAL,
43 : ASCII_INTEGER,
44 : CHARACTER,
45 : MSB_INTEGER,
46 : MSB_UNSIGNED_INTEGER,
47 : IEEE_REAL,
48 : } FieldFormat;
49 :
50 : typedef struct
51 : {
52 : int nStartByte;
53 : int nByteCount;
54 : FieldFormat eFormat;
55 : int nItemBytes;
56 : int nItems;
57 : } FieldDesc;
58 :
59 : class OGRPDSLayer : public OGRLayer
60 : {
61 : OGRFeatureDefn* poFeatureDefn;
62 :
63 : CPLString osTableID;
64 : VSILFILE* fpPDS;
65 : int nRecords;
66 : int nStartBytes;
67 : int nRecordSize;
68 : GByte *pabyRecord;
69 : int nNextFID;
70 : int nLongitudeIndex;
71 : int nLatitudeIndex;
72 :
73 : FieldDesc* pasFieldDesc;
74 :
75 : void ReadStructure(CPLString osStructureFilename);
76 : OGRFeature *GetNextRawFeature();
77 :
78 : public:
79 : OGRPDSLayer(CPLString osTableID,
80 : const char* pszLayerName, VSILFILE* fp,
81 : CPLString osLabelFilename,
82 : CPLString osStructureFilename,
83 : int nRecords,
84 : int nStartBytes, int nRecordSize,
85 : GByte* pabyRecord, int bIsASCII);
86 : ~OGRPDSLayer();
87 :
88 :
89 : virtual void ResetReading();
90 : virtual OGRFeature * GetNextFeature();
91 :
92 2 : virtual OGRFeatureDefn * GetLayerDefn() { return poFeatureDefn; }
93 :
94 : virtual int TestCapability( const char * );
95 :
96 0 : virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
97 :
98 : virtual int GetFeatureCount(int bForce = TRUE );
99 :
100 : virtual OGRFeature *GetFeature( long nFID );
101 :
102 : virtual OGRErr SetNextByIndex( long nIndex );
103 : };
104 :
105 : /************************************************************************/
106 : /* OGRPDSDataSource */
107 : /************************************************************************/
108 :
109 : class OGRPDSDataSource : public OGRDataSource
110 : {
111 : char* pszName;
112 :
113 : OGRLayer** papoLayers;
114 : int nLayers;
115 :
116 : NASAKeywordHandler oKeywords;
117 :
118 : CPLString osTempResult;
119 : const char *GetKeywordSub( const char *pszPath,
120 : int iSubscript,
121 : const char *pszDefault );
122 :
123 : int LoadTable(const char* pszFilename,
124 : int nRecordSize,
125 : CPLString osTableID);
126 :
127 : public:
128 : OGRPDSDataSource();
129 : ~OGRPDSDataSource();
130 :
131 : int Open( const char * pszFilename,
132 : int bUpdate );
133 :
134 2 : virtual const char* GetName() { return pszName; }
135 :
136 2 : virtual int GetLayerCount() { return nLayers; }
137 : virtual OGRLayer* GetLayer( int );
138 :
139 : virtual int TestCapability( const char * );
140 :
141 : static void CleanString( CPLString &osInput );
142 : };
143 :
144 : /************************************************************************/
145 : /* OGRPDSDriver */
146 : /************************************************************************/
147 :
148 : class OGRPDSDriver : public OGRSFDriver
149 389 : {
150 : public:
151 : ~OGRPDSDriver();
152 :
153 : virtual const char* GetName();
154 : virtual OGRDataSource* Open( const char *, int );
155 : virtual int TestCapability( const char * );
156 : };
157 :
158 :
159 : #endif /* ndef _OGR_PDS_H_INCLUDED */
|