kealib
Loading...
Searching...
No Matches
KEAAttributeTable.h
Go to the documentation of this file.
1/*
2 * KEAAttributeTable.h
3 * LibKEA
4 *
5 * Created by Pete Bunting on 20/07/2012.
6 * Copyright 2012 LibKEA. All rights reserved.
7 *
8 * This file is part of LibKEA.
9 *
10 * Permission is hereby granted, free of charge, to any person
11 * obtaining a copy of this software and associated documentation
12 * files (the "Software"), to deal in the Software without restriction,
13 * including without limitation the rights to use, copy, modify,
14 * merge, publish, distribute, sublicense, and/or sell copies of the
15 * Software, and to permit persons to whom the Software is furnished
16 * to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be
19 * included in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
26 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 *
29 */
30
31#ifndef KEAAttributeTable_H
32#define KEAAttributeTable_H
33
34#include <iostream>
35#include <string>
36#include <vector>
37#include <map>
38#include <math.h>
39
40#include <highfive/highfive.hpp>
41
42#include "libkea/KEACommon.h"
43#include "libkea/KEAException.h"
44
45namespace kealib{
46
53
54 struct KEADateTime;
55
57 {
58 size_t fid;
59 std::vector<bool> *boolFields;
60 std::vector<int64_t> *intFields;
61 std::vector<double> *floatFields;
62 std::vector<std::string> *strFields;
63 std::vector<KEADateTime> *datetimeFields;
64 std::vector<size_t> *neighbours;
65 };
66
77
79 {
80 std::string name;
82 size_t idx;
83 std::string usage;
84 size_t colNum;
85 };
86
88 {
89 char *name;
90 uint32_t idx;
91 char *usage;
92 uint32_t colNum;
93 };
94
96 {
97 char *str;
98 };
99
101 {
102 int16_t year;
103 uint8_t month;
104 uint8_t day;
105 uint8_t hour;
106 uint8_t minute;
107 float second;
109 // timezonehour + 0, 0.25, 0.5 or 0.75 depending on whether minutes are 0, 15, 30 or 45, all multiplied by 4.
110 // KEA_ATT_NULLTIMEZONE if not set.
111 };
112
113 class KEA_EXPORT KEAAttributeTable : public KEABase
114 {
115 public:
116 KEAAttributeTable(KEAATTType keaAttType, const std::shared_ptr<kealib::kea_mutex>& mutex);
117 virtual KEAATTType getKEAATTType() const;
118
119 // get a single value by column name
120 virtual bool getBoolField(size_t fid, const std::string &name) const;
121 virtual int64_t getIntField(size_t fid, const std::string &name) const;
122 virtual double getFloatField(size_t fid, const std::string &name) const;
123 virtual std::string getStringField(size_t fid, const std::string &name) const;
124 virtual KEADateTime getDateTimeField(size_t fid, const std::string &name) const;
125 virtual uint8_t* getWKBField(size_t fid, const std::string &name, size_t &nWKBSize) const;
126
127 // get a single value by column index
128 virtual bool getBoolField(size_t fid, size_t colIdx) const;
129 virtual int64_t getIntField(size_t fid, size_t colIdx) const;
130 virtual double getFloatField(size_t fid, size_t colIdx) const;
131 virtual std::string getStringField(size_t fid, size_t colIdx) const;
132 virtual KEADateTime getDateTimeField(size_t fid, size_t colIdx) const;
133 virtual uint8_t* getWKBField(size_t fid, size_t colIdx, size_t &nWKBSize) const;
134
135 // RFC40 methods for reading
136 virtual void getBoolFields(size_t startfid, size_t len, size_t colIdx, bool *pbBuffer) const;
137 virtual void getIntFields(size_t startfid, size_t len, size_t colIdx, int64_t *pnBuffer) const;
138 virtual void getFloatFields(size_t startfid, size_t len, size_t colIdx, double *pfBuffer) const;
139 virtual void getStringFields(size_t startfid, size_t len, size_t colIdx, std::vector<std::string> *psBuffer) const;
140 virtual void getDateTimeFields(size_t startfid, size_t len, size_t colIdx, KEADateTime *pBuffer) const;
141 virtual void getWKBFields(size_t startfid, size_t len, size_t colIdx, uint8_t **ppabyWKB, size_t *pnWKBSize) const;
142 virtual void getNeighbours(size_t startfid, size_t len, std::vector<std::vector<size_t>* > *neighbours) const;
143
144 // set a single value by column index
145 virtual void setBoolField(size_t fid, size_t colIdx, bool value);
146 virtual void setIntField(size_t fid, size_t colIdx, int64_t value);
147 virtual void setFloatField(size_t fid, size_t colIdx, double value);
148 virtual void setStringField(size_t fid, size_t colIdx, const std::string &value);
149 virtual void setDateTimeField(size_t fid, size_t colIdx, const KEADateTime &value);
150 virtual void setWKBField(size_t fid, size_t colIdx, uint8_t *wkb, size_t wkbsize);
151
152 // RFC40 methods for writing
153 virtual void setBoolFields(size_t startfid, size_t len, size_t colIdx, bool *pbBuffer);
154 virtual void setIntFields(size_t startfid, size_t len, size_t colIdx, int64_t *pnBuffer);
155 virtual void setFloatFields(size_t startfid, size_t len, size_t colIdx, double *pfBuffer);
156 virtual void setStringFields(size_t startfid, size_t len, size_t colIdx, std::vector<std::string> *papszStrList);
157 virtual void setDateTimeFields(size_t startfid, size_t len, size_t colIdx, KEADateTime *pBuffer);
158 virtual void setWKBFields(size_t startfid, size_t len, size_t colIdx, uint8_t **ppabyWKB, size_t *pnWKBSize);
159 virtual void setNeighbours(size_t startfid, size_t len, std::vector<std::vector<size_t>* > *neighbours);
160
161 // get the whole feature
162 virtual KEAATTFeature* getFeature(size_t fid) const;
163
164 // add columns
165 virtual void addAttBoolField(const std::string &name, bool val, const std::string &usage="");
166 virtual void addAttIntField(const std::string &name, int64_t val, const std::string &usage="");
167 virtual void addAttFloatField(const std::string &name, double val, const std::string &usage="");
168 virtual void addAttStringField(const std::string &name, const std::string &val, const std::string &usage="");
169 virtual void addAttDateTimeField(const std::string &name, const KEADateTime &val, const std::string &usage="");
170 virtual void addAttWKBField(const std::string &name, uint8_t *pData, size_t wkbsize, const std::string &usage="");
171
172 virtual void addFields(std::vector<KEAATTField*> *inFields);
173 virtual void addField(KEAATTField *inFields);
174
175 virtual KEAFieldDataType getDataFieldType(const std::string &name) const;
176 virtual size_t getFieldIndex(const std::string &name) const;
177 virtual KEAATTField getField(const std::string &name) const;
178 virtual KEAATTField getField(size_t globalColIdx) const;
179 virtual std::vector<std::string> getFieldNames() const;
180 virtual bool hasField(const std::string &name) const;
181 virtual size_t getNumBoolFields() const;
182 virtual size_t getNumIntFields() const;
183 virtual size_t getNumFloatFields() const;
184 virtual size_t getNumStringFields() const;
185 virtual size_t getNumDateTimeFields() const;
186 virtual size_t getNumWKBFields() const;
187
188 virtual size_t getSize() const;
189 virtual size_t getTotalNumOfCols() const;
190 virtual size_t getMaxGlobalColIdx() const;
191 virtual std::string getBandPathBase() const;
192 virtual size_t getChunkSize() const;
193 virtual void addRows(size_t numRows);
194
195 static void copyRAT(const KEAAttributeTable *pFrom, KEAAttributeTable *pTo);
196
198
200
201 // for cross heap use in Windows
203
204 static HighFive::CompoundType createAttributeIdxCompType();
205 static HighFive::CompoundType createKeaStringCompType();
206 static HighFive::CompoundType createKeaDateTimeCompType();
207
208 protected:
209 static KEAAttributeTable* createKeaAtt(HighFive::File *keaImg, const std::shared_ptr<kealib::kea_mutex>& mutex, unsigned int band, unsigned int chunkSizeIn);
210 virtual void addAttBoolField(KEAATTField field, bool val);
211 virtual void addAttIntField(KEAATTField field, int64_t val);
212 virtual void addAttFloatField(KEAATTField field, float val);
213 virtual void addAttStringField(KEAATTField field, const std::string &val);
214 virtual void addAttDateTimeField(KEAATTField field, const KEADateTime &val);
215 virtual void addAttWKBField(KEAATTField field, uint8_t *pData, size_t wkbsize);
217 virtual void deleteKeaFeature(KEAATTFeature *feat);
218 // helper for variable length structures - HighFive doesn't currently support
219 virtual void readNeighbours(const HighFive::DataSet &dataset, size_t startfid, size_t len, std::vector<std::vector<size_t>* > *neighbours) const;
220 virtual void writeNeighbours(const HighFive::DataSet &dataset, size_t startfid, size_t len, const std::vector<std::vector<size_t>* > *neighbours);
221 virtual HighFive::DataSet createNeighboursDataset(HighFive::File *keaImg, const std::string &datasetname, unsigned int deflate);
222
223 std::map<std::string, KEAATTField> *fields;
231 size_t numOfCols;
232 size_t numRows;
233 std::string bandPathBase;
234 size_t chunkSize;
235 };
236
237}
238
239
240#endif
241
242
243
244
Definition KEAAttributeTable.h:114
virtual uint8_t * getWKBField(size_t fid, const std::string &name, size_t &nWKBSize) const
virtual uint8_t * getWKBField(size_t fid, size_t colIdx, size_t &nWKBSize) const
virtual void addRows(size_t numRows)
virtual KEAATTField getField(size_t globalColIdx) const
virtual void addField(KEAATTField *inFields)
size_t numDatetimeFields
Definition KEAAttributeTable.h:229
virtual void setWKBFields(size_t startfid, size_t len, size_t colIdx, uint8_t **ppabyWKB, size_t *pnWKBSize)
virtual size_t getNumFloatFields() const
virtual void getWKBFields(size_t startfid, size_t len, size_t colIdx, uint8_t **ppabyWKB, size_t *pnWKBSize) const
size_t numStringFields
Definition KEAAttributeTable.h:228
virtual size_t getNumIntFields() const
virtual size_t getTotalNumOfCols() const
virtual KEADateTime getDateTimeField(size_t fid, size_t colIdx) const
virtual double getFloatField(size_t fid, size_t colIdx) const
static HighFive::CompoundType createKeaDateTimeCompType()
virtual void printAttributeTableHeaderInfo()
virtual std::string getStringField(size_t fid, size_t colIdx) const
virtual void addAttDateTimeField(KEAATTField field, const KEADateTime &val)
virtual bool getBoolField(size_t fid, const std::string &name) const
virtual void setFloatFields(size_t startfid, size_t len, size_t colIdx, double *pfBuffer)
virtual void setBoolField(size_t fid, size_t colIdx, bool value)
virtual void addAttWKBField(const std::string &name, uint8_t *pData, size_t wkbsize, const std::string &usage="")
virtual size_t getNumWKBFields() const
virtual void getFloatFields(size_t startfid, size_t len, size_t colIdx, double *pfBuffer) const
size_t numBoolFields
Definition KEAAttributeTable.h:225
virtual double getFloatField(size_t fid, const std::string &name) const
virtual void getDateTimeFields(size_t startfid, size_t len, size_t colIdx, KEADateTime *pBuffer) const
virtual size_t getFieldIndex(const std::string &name) const
virtual KEAATTType getKEAATTType() const
size_t numRows
Definition KEAAttributeTable.h:232
virtual void addAttStringField(KEAATTField field, const std::string &val)
virtual int64_t getIntField(size_t fid, size_t colIdx) const
virtual void setWKBField(size_t fid, size_t colIdx, uint8_t *wkb, size_t wkbsize)
virtual void addAttIntField(KEAATTField field, int64_t val)
virtual void setDateTimeField(size_t fid, size_t colIdx, const KEADateTime &value)
virtual void setBoolFields(size_t startfid, size_t len, size_t colIdx, bool *pbBuffer)
virtual bool getBoolField(size_t fid, size_t colIdx) const
virtual size_t getChunkSize() const
virtual void addAttFloatField(const std::string &name, double val, const std::string &usage="")
virtual void addAttStringField(const std::string &name, const std::string &val, const std::string &usage="")
virtual void getStringFields(size_t startfid, size_t len, size_t colIdx, std::vector< std::string > *psBuffer) const
static HighFive::CompoundType createKeaStringCompType()
virtual KEAATTFeature * getFeature(size_t fid) const
virtual void addAttWKBField(KEAATTField field, uint8_t *pData, size_t wkbsize)
virtual size_t getSize() const
size_t numFloatFields
Definition KEAAttributeTable.h:227
virtual void setStringFields(size_t startfid, size_t len, size_t colIdx, std::vector< std::string > *papszStrList)
KEAATTType attType
Definition KEAAttributeTable.h:224
virtual KEAATTField getField(const std::string &name) const
virtual void setIntFields(size_t startfid, size_t len, size_t colIdx, int64_t *pnBuffer)
size_t numIntFields
Definition KEAAttributeTable.h:226
virtual void setStringField(size_t fid, size_t colIdx, const std::string &value)
virtual std::string getStringField(size_t fid, const std::string &name) const
virtual size_t getMaxGlobalColIdx() const
virtual void readNeighbours(const HighFive::DataSet &dataset, size_t startfid, size_t len, std::vector< std::vector< size_t > * > *neighbours) const
virtual void setIntField(size_t fid, size_t colIdx, int64_t value)
virtual int64_t getIntField(size_t fid, const std::string &name) const
virtual size_t getNumDateTimeFields() const
virtual void getNeighbours(size_t startfid, size_t len, std::vector< std::vector< size_t > * > *neighbours) const
virtual KEAATTFeature * createKeaFeature()
virtual void getBoolFields(size_t startfid, size_t len, size_t colIdx, bool *pbBuffer) const
virtual void addAttFloatField(KEAATTField field, float val)
virtual void addFields(std::vector< KEAATTField * > *inFields)
size_t numWKBFields
Definition KEAAttributeTable.h:230
virtual void addAttIntField(const std::string &name, int64_t val, const std::string &usage="")
virtual size_t getNumStringFields() const
static HighFive::CompoundType createAttributeIdxCompType()
virtual KEAFieldDataType getDataFieldType(const std::string &name) const
static KEAAttributeTable * createKeaAtt(HighFive::File *keaImg, const std::shared_ptr< kealib::kea_mutex > &mutex, unsigned int band, unsigned int chunkSizeIn)
virtual std::vector< std::string > getFieldNames() const
virtual void deleteKeaFeature(KEAATTFeature *feat)
virtual void setDateTimeFields(size_t startfid, size_t len, size_t colIdx, KEADateTime *pBuffer)
virtual void setNeighbours(size_t startfid, size_t len, std::vector< std::vector< size_t > * > *neighbours)
std::map< std::string, KEAATTField > * fields
Definition KEAAttributeTable.h:223
static void copyRAT(const KEAAttributeTable *pFrom, KEAAttributeTable *pTo)
virtual void addAttDateTimeField(const std::string &name, const KEADateTime &val, const std::string &usage="")
virtual void addAttBoolField(const std::string &name, bool val, const std::string &usage="")
std::string bandPathBase
Definition KEAAttributeTable.h:233
KEAAttributeTable(KEAATTType keaAttType, const std::shared_ptr< kealib::kea_mutex > &mutex)
virtual bool hasField(const std::string &name) const
virtual std::string getBandPathBase() const
virtual void writeNeighbours(const HighFive::DataSet &dataset, size_t startfid, size_t len, const std::vector< std::vector< size_t > * > *neighbours)
static void destroyAttributeTable(KEAAttributeTable *pTable)
virtual void getIntFields(size_t startfid, size_t len, size_t colIdx, int64_t *pnBuffer) const
virtual size_t getNumBoolFields() const
size_t numOfCols
Definition KEAAttributeTable.h:231
virtual void addAttBoolField(KEAATTField field, bool val)
size_t chunkSize
Definition KEAAttributeTable.h:234
virtual HighFive::DataSet createNeighboursDataset(HighFive::File *keaImg, const std::string &datasetname, unsigned int deflate)
virtual void setFloatField(size_t fid, size_t colIdx, double value)
virtual KEADateTime getDateTimeField(size_t fid, const std::string &name) const
Definition KEACommon.h:348
Definition KEAAttributeTable.h:45
KEAFieldDataType
Definition KEAAttributeTable.h:68
@ kea_att_string
Definition KEAAttributeTable.h:73
@ kea_att_wkb
Definition KEAAttributeTable.h:75
@ kea_att_bool
Definition KEAAttributeTable.h:70
@ kea_att_float
Definition KEAAttributeTable.h:72
@ kea_att_int
Definition KEAAttributeTable.h:71
@ kea_att_na
Definition KEAAttributeTable.h:69
@ kea_att_datetime
Definition KEAAttributeTable.h:74
KEAATTType
Definition KEAAttributeTable.h:48
@ kea_att_file
Definition KEAAttributeTable.h:51
@ kea_att_mem
Definition KEAAttributeTable.h:50
@ kea_att_undefined
Definition KEAAttributeTable.h:49
Definition KEAAttributeTable.h:57
std::vector< size_t > * neighbours
Definition KEAAttributeTable.h:64
std::vector< double > * floatFields
Definition KEAAttributeTable.h:61
size_t fid
Definition KEAAttributeTable.h:58
std::vector< int64_t > * intFields
Definition KEAAttributeTable.h:60
std::vector< bool > * boolFields
Definition KEAAttributeTable.h:59
std::vector< std::string > * strFields
Definition KEAAttributeTable.h:62
std::vector< KEADateTime > * datetimeFields
Definition KEAAttributeTable.h:63
Definition KEAAttributeTable.h:79
size_t idx
Definition KEAAttributeTable.h:82
std::string name
Definition KEAAttributeTable.h:80
KEAFieldDataType dataType
Definition KEAAttributeTable.h:81
size_t colNum
Definition KEAAttributeTable.h:84
std::string usage
Definition KEAAttributeTable.h:83
Definition KEAAttributeTable.h:96
char * str
Definition KEAAttributeTable.h:97
Definition KEAAttributeTable.h:88
uint32_t idx
Definition KEAAttributeTable.h:90
char * name
Definition KEAAttributeTable.h:89
char * usage
Definition KEAAttributeTable.h:91
uint32_t colNum
Definition KEAAttributeTable.h:92
Definition KEAAttributeTable.h:101
float second
Definition KEAAttributeTable.h:107
uint8_t month
Definition KEAAttributeTable.h:103
int16_t year
Definition KEAAttributeTable.h:102
uint8_t hour
Definition KEAAttributeTable.h:105
uint8_t day
Definition KEAAttributeTable.h:104
int8_t timezonehourby4
Definition KEAAttributeTable.h:108
uint8_t minute
Definition KEAAttributeTable.h:106