20 #ifndef _IMGREADEROGR_H_
21 #define _IMGREADEROGR_H_
30 #include "ogrsf_frmts.h"
31 #include "base/Vector2d.h"
32 #include "ImgReaderGdal.h"
41 void open(
const std::string& filename);
44 template <
typename T>
int readXY(std::vector<T>& xVector, std::vector<T>& yVector,
int layer=0,
bool verbose=
false);
45 template <
typename T>
int readY(std::vector<T>& yVector,
int layer=0,
bool verbose=
false);
46 template <
typename T>
int readData(std::vector<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields, OGRFeature *poFeature,
int layer=0,
bool pos=
false,
bool verbose=
false);
47 template <
typename T>
int readData(std::vector<T>& data,
const OGRFieldType& fieldType,
const std::string& theField,
int layer=0,
bool verbose=
false);
48 template <
typename T>
int readData(
Vector2d<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
int layer=0,
bool pos=
false,
bool verbose=
false);
49 template <
typename T>
int readData(std::map<
int,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
int layer=0,
bool pos=
false,
bool verbose=
false);
50 template <
typename T>
int readData(std::map<std::string,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
int layer=0,
bool pos=
false,
bool verbose=
false);
51 unsigned int readDataImageOgr(std::map<std::string,
Vector2d<float> > &mapPixels,
52 std::vector<std::string>& fields,
53 const std::vector<short>& bands,
54 const std::string& label,
55 const std::vector<std::string>& layers,
58 unsigned int readDataImageOgr(std::map<std::string,
Vector2d<float> > &mapPixels,
59 std::vector<std::string>& fields,
62 const std::string& label,
63 const std::vector<std::string>& layers,
67 unsigned long int getFeatureCount(
int layer=0)
const;
68 int getFieldCount(
int layer=0)
const;
69 OGRLayer* getLayer(
int layer=0){
return m_datasource->GetLayer(layer);};
70 std::string getProjection(
int layer=0)
const;
71 OGRwkbGeometryType getGeometryType(
int layer=0)
const;
72 std::string getLayerName(
int layer=0){
return m_datasource->GetLayer(layer)->GetLayerDefn()->GetName();};
74 int getFields(std::vector<std::string>& fields,
int layer=0)
const;
75 int getFields(std::vector<OGRFieldDefn*>& fields,
int layer=0)
const;
76 OGRDataSource* getDataSource(
void) {
return m_datasource;};
77 OGRSFDriver* getDriver(
void)
const {
return m_datasource->GetDriver();};
78 int getLayerCount(
void)
const {
return m_datasource->GetLayerCount();};
80 template<
typename T>
int readSql(
Vector2d<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& sqlStatement, OGRGeometry* spatialFilter=NULL,
int layer=0,
bool pos=
false,
bool verbose=
false);
81 template<
typename T>
int readSql(std::map<
int,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
const std::string& sqlStatement, OGRGeometry* spatialFilter,
int layer=0,
bool pos=
false,
bool verbose=
false);
82 bool getExtent(
double& ulx,
double& uly,
double& lrx,
double& lry,
int layer=0);
84 friend std::ostream& operator<<(std::ostream& theOstream,
ImgReaderOgr& theImageReader);
89 std::string m_filename;
90 OGRDataSource *m_datasource;
94 template <
typename T>
int ImgReaderOgr::readData(std::map<
int,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
int layer,
bool pos,
bool verbose)
96 assert(m_datasource->GetLayerCount()>layer);
99 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
100 poLayer = m_datasource->GetLayer(layer);
102 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
104 fields.resize(poFDefn->GetFieldCount());
106 std::cout <<
"resized fields to " << fields.size() << std::endl;
109 OGRFeature *poFeature;
111 std::cout <<
"reset reading" << std::endl;
112 poLayer->ResetReading();
113 unsigned long int ifeature=0;
114 int posOffset=(pos)?2:0;
116 std::cout <<
"going through features" << std::endl << std::flush;
118 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
119 std::vector<T> theFeature;
121 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
122 OGRGeometry *poGeometry;
123 poGeometry = poFeature->GetGeometryRef();
125 if(poGeometry == NULL)
126 std::cerr <<
"no geometry defined" << std::endl << std::flush;
127 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
128 std::cerr <<
"Warning: poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
130 assert(poGeometry != NULL );
133 if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){
135 poPoint = (OGRPoint *) poGeometry;
136 theFeature.push_back(poPoint->getX());
137 theFeature.push_back(poPoint->getY());
139 else if(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){
141 OGRPolygon * poPolygon = (OGRPolygon *) poGeometry;
142 poPolygon->Centroid(&thePoint);
143 theFeature.push_back(thePoint.getX());
144 theFeature.push_back(thePoint.getY());
149 poGeometry->Centroid(&thePoint);
150 theFeature.push_back(thePoint.getX());
151 theFeature.push_back(thePoint.getY());
155 std::string featurename;
156 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
157 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
158 std::string fieldname=poFieldDefn->GetNameRef();
160 theClass=poFeature->GetFieldAsInteger(iField);
164 if(fields.size()<poFDefn->GetFieldCount()){
165 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
166 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
169 fields[iField]=fieldname;
170 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
174 if(fields.size()<poFDefn->GetFieldCount()){
175 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
176 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
179 fields[iField]=fieldname;
180 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
185 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
192 data[theClass].push_back(theFeature);
197 std::cout <<
"number of features read: " << ifeature << std::endl << std::flush;
198 typename std::map<int,Vector2d<T> >::const_iterator mit=data.begin();
201 std::cout <<
"read classes: " << std::flush;
202 while(mit!=data.end()){
204 std::cout << mit->first <<
" " << std::flush;
208 assert((mit->second)[0].size()==nband+2);
210 assert((mit->second)[0].size()==nband);
214 std::cout << std::endl << std::flush;
218 std::ostringstream ess;
219 ess <<
"no layer in " << m_filename;
225 template <
typename T>
int ImgReaderOgr::readData(std::map<std::string,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
int layer,
bool pos,
bool verbose)
227 assert(m_datasource->GetLayerCount()>layer);
230 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
231 poLayer = m_datasource->GetLayer(layer);
233 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
234 assert(poFDefn!=NULL);
237 fields.resize(poFDefn->GetFieldCount());
239 std::cout <<
"resized fields to " << fields.size() << std::endl;
243 OGRFeature *poFeature;
245 std::cout <<
"reset reading" << std::endl;
246 poLayer->ResetReading();
247 unsigned long int ifeature=0;
248 int posOffset=(pos)?2:0;
250 std::cout <<
"going through features to fill in string map" << std::endl << std::flush;
251 std::string theClass;
252 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
253 std::vector<T> theFeature;
255 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
256 OGRGeometry *poGeometry;
257 poGeometry = poFeature->GetGeometryRef();
259 if(poGeometry == NULL)
260 std::cerr <<
"no geometry defined" << std::endl << std::flush;
261 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
262 std::cerr <<
"Warning: poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
264 assert(poGeometry != NULL );
267 if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){
269 poPoint = (OGRPoint *) poGeometry;
270 theFeature.push_back(poPoint->getX());
271 theFeature.push_back(poPoint->getY());
273 else if(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){
275 poGeometry->Centroid(&thePoint);
276 theFeature.push_back(thePoint.getX());
277 theFeature.push_back(thePoint.getY());
282 poGeometry->Centroid(&thePoint);
283 theFeature.push_back(thePoint.getX());
284 theFeature.push_back(thePoint.getY());
288 std::string featurename;
289 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
290 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
291 std::string fieldname=poFieldDefn->GetNameRef();
292 if(fieldname==label){
293 theClass=poFeature->GetFieldAsString(iField);
295 std::cout <<
"read feature for " << theClass << std::endl;
300 if(fields.size()<poFDefn->GetFieldCount()){
301 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
302 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
305 fields[iField]=fieldname;
306 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
310 if(fields.size()<poFDefn->GetFieldCount()){
311 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
312 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
315 fields[iField]=fieldname;
316 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
321 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
327 assert(poFDefn!=NULL);
329 data[theClass].push_back(theFeature);
333 std::cout <<
"number of features read: " << ifeature << std::endl << std::flush;
334 typename std::map<std::string,Vector2d<T> >::const_iterator mit=data.begin();
337 std::cout <<
"read classes: " << std::flush;
338 while(mit!=data.end()){
340 std::cout << mit->first <<
" " << std::flush;
344 assert((mit->second)[0].size()==nband+2);
346 assert((mit->second)[0].size()==nband);
350 std::cout << std::endl << std::flush;
354 std::ostringstream ess;
355 ess <<
"no layer in " << m_filename;
361 template <
typename T>
int ImgReaderOgr::readXY(std::vector<T>& xVector, std::vector<T>& yVector,
int layer,
bool verbose){
362 assert(m_datasource->GetLayerCount()>layer);
365 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
366 poLayer = m_datasource->GetLayer(layer);
367 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
369 OGRFeature *poFeature;
371 std::cout <<
"reset reading" << std::endl;
372 poLayer->ResetReading();
373 unsigned long int ifeature=0;
375 std::cout <<
"going through features" << std::endl << std::flush;
376 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
378 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
379 OGRGeometry *poGeometry;
380 poGeometry = poFeature->GetGeometryRef();
382 if(poGeometry == NULL)
383 std::cerr <<
"no geometry defined" << std::endl << std::flush;
385 std::cout <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl;
389 OGRPoint *poPoint = (OGRPoint *) poGeometry;
390 xVector.push_back(poPoint->getX());
391 yVector.push_back(poPoint->getY());
394 assert(xVector.size()==yVector.size());
396 return xVector.size();
399 std::ostringstream ess;
400 ess <<
"no layer in " << m_filename;
406 template <
typename T>
int ImgReaderOgr::readData(std::vector<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields, OGRFeature *poFeature,
int layer,
bool pos,
bool verbose)
408 assert(m_datasource->GetLayerCount()>layer);
411 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
412 poLayer = m_datasource->GetLayer(layer);
413 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
415 fields.resize(poFDefn->GetFieldCount());
417 std::cout <<
"resized fields to " << fields.size() << std::endl;
419 OGRGeometry *poGeometry;
420 poGeometry = poFeature->GetGeometryRef();
422 if(poGeometry == NULL)
423 std::cerr <<
"no geometry defined" << std::endl << std::flush;
424 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
425 std::cerr <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
427 assert(poGeometry != NULL);
429 OGRPoint *poPoint = (OGRPoint *) poGeometry;
431 if(wkbFlatten(poGeometry->getGeometryType()) == wkbPoint){
433 poPoint = (OGRPoint *) poGeometry;
434 data.push_back(poPoint->getX());
435 data.push_back(poPoint->getY());
437 else if(wkbFlatten(poGeometry->getGeometryType()) == wkbPolygon){
439 poGeometry->Centroid(&thePoint);
440 data.push_back(thePoint.getX());
441 data.push_back(thePoint.getY());
446 poGeometry->Centroid(&thePoint);
447 data.push_back(thePoint.getX());
448 data.push_back(thePoint.getY());
452 std::string featurename;
453 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
454 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
455 std::string fieldname=poFieldDefn->GetNameRef();
458 if(fields.size()<poFDefn->GetFieldCount()){
459 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
460 data.push_back(poFeature->GetFieldAsDouble(iField));
463 fields[iField]=fieldname;
464 data.push_back(poFeature->GetFieldAsDouble(iField));
468 if(fields.size()<poFDefn->GetFieldCount()){
469 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
470 data.push_back(poFeature->GetFieldAsDouble(iField));
473 fields[iField]=fieldname;
474 data.push_back(poFeature->GetFieldAsDouble(iField));
479 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
488 assert(data.size()==fields.size()+2);
490 assert(data.size()==fields.size());
491 return fields.size();
494 std::ostringstream ess;
495 ess <<
"no layer in " << m_filename;
501 template <
typename T>
inline int ImgReaderOgr::readData(std::vector<T>& data,
const OGRFieldType& fieldType,
const std::string& theField,
int layer,
bool verbose)
503 assert(m_datasource->GetLayerCount()>layer);
506 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
507 poLayer = m_datasource->GetLayer(layer);
508 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
509 int nfield=(theField!=
"")? poFDefn->GetFieldCount() : 1;
513 std::cout <<
"read first field from total of " << nfield << std::endl;
517 OGRFeature *poFeature;
519 std::cout <<
"reset reading" << std::endl;
520 poLayer->ResetReading();
521 unsigned long int ifeature=0;
523 std::cout <<
"going through features" << std::endl << std::flush;
524 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
528 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
529 OGRGeometry *poGeometry;
530 poGeometry = poFeature->GetGeometryRef();
532 if(poGeometry == NULL)
533 std::cerr <<
"no geometry defined" << std::endl << std::flush;
535 std::cout <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl;
539 OGRPoint *poPoint = (OGRPoint *) poGeometry;
541 for(
int iField=0;iField<nfield;++iField){
542 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
543 std::string fieldname=poFieldDefn->GetNameRef();
544 if(fieldname!=theField)
549 theFeature=poFeature->GetFieldAsDouble(iField);
553 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
559 data.push_back(theFeature);
561 std::cout <<
"feature is: " << theFeature << std::endl;
568 std::ostringstream ess;
569 ess <<
"no layer in " << m_filename;
575 template <>
inline int ImgReaderOgr::readData(std::vector<std::string>& data,
const OGRFieldType& fieldType,
const std::string& theField,
int layer,
bool verbose)
577 assert(m_datasource->GetLayerCount()>layer);
580 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
581 poLayer = m_datasource->GetLayer(layer);
582 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
583 int nfield=(theField!=
"")? poFDefn->GetFieldCount() : 1;
587 std::cout <<
"read first field from total of " << nfield << std::endl;
591 OGRFeature *poFeature;
593 std::cout <<
"reset reading" << std::endl;
594 poLayer->ResetReading();
595 unsigned long int ifeature=0;
597 std::cout <<
"going through features" << std::endl << std::flush;
598 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
599 std::string theFeature;
601 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
602 OGRGeometry *poGeometry;
603 poGeometry = poFeature->GetGeometryRef();
605 if(poGeometry == NULL)
606 std::cerr <<
"no geometry defined" << std::endl << std::flush;
608 std::cout <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl;
612 OGRPoint *poPoint = (OGRPoint *) poGeometry;
614 for(
int iField=0;iField<nfield;++iField){
615 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
616 std::string fieldname=poFieldDefn->GetNameRef();
617 if(fieldname!=theField)
623 theFeature=poFeature->GetFieldAsString(iField);
627 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
633 data.push_back(theFeature);
635 std::cout <<
"feature is: " << theFeature << std::endl;
642 std::ostringstream ess;
643 ess <<
"no layer in " << m_filename;
649 template <
typename T>
int ImgReaderOgr::readData(
Vector2d<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
int layer,
bool pos,
bool verbose)
651 assert(m_datasource->GetLayerCount()>layer);
654 std::cout <<
"number of layers: " << m_datasource->GetLayerCount() << std::endl;
655 poLayer = m_datasource->GetLayer(layer);
656 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
658 fields.resize(poFDefn->GetFieldCount());
660 std::cout <<
"resized fields to " << fields.size() << std::endl;
663 OGRFeature *poFeature;
665 std::cout <<
"reset reading" << std::endl;
666 poLayer->ResetReading();
667 unsigned long int ifeature=0;
668 int posOffset=(pos)?2:0;
670 std::cout <<
"going through features" << std::endl << std::flush;
671 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
672 std::vector<T> theFeature;
674 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
675 OGRGeometry *poGeometry;
676 poGeometry = poFeature->GetGeometryRef();
678 if(poGeometry == NULL)
679 std::cerr <<
"no geometry defined" << std::endl << std::flush;
680 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
681 std::cerr <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
683 assert(poGeometry != NULL
684 && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);
685 OGRPoint *poPoint = (OGRPoint *) poGeometry;
687 theFeature.push_back(poPoint->getX());
688 theFeature.push_back(poPoint->getY());
690 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
691 std::string featurename;
692 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
693 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
694 std::string fieldname=poFieldDefn->GetNameRef();
697 if(fields.size()<poFDefn->GetFieldCount()){
698 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
699 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
702 fields[iField]=fieldname;
703 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
707 if(fields.size()<poFDefn->GetFieldCount()){
708 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
709 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
712 fields[iField]=fieldname;
713 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
718 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
724 data.push_back(theFeature);
730 assert(data[0].size()==fields.size()+2);
732 assert(data[0].size()==fields.size());
733 return fields.size();
736 std::ostringstream ess;
737 ess <<
"no layer in " << m_filename;
742 template<
typename T>
int ImgReaderOgr::readSql(std::map<
int,
Vector2d<T> >& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& label,
const std::string& sqlStatement, OGRGeometry* spatialFilter,
int layer,
bool pos,
bool verbose)
744 assert(m_datasource->GetLayerCount()>layer);
746 poLayer = m_datasource->ExecuteSQL(sqlStatement.c_str(), spatialFilter,NULL );
748 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
750 fields.resize(poFDefn->GetFieldCount());
752 std::cout <<
"resized fields to " << fields.size() << std::endl;
755 OGRFeature *poFeature;
757 std::cout <<
"reset reading" << std::endl;
758 poLayer->ResetReading();
759 unsigned long int ifeature=0;
760 int posOffset=(pos)?2:0;
762 std::cout <<
"going through features" << std::endl << std::flush;
764 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
765 std::vector<T> theFeature;
767 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
768 OGRGeometry *poGeometry;
769 poGeometry = poFeature->GetGeometryRef();
771 if(poGeometry == NULL)
772 std::cerr <<
"no geometry defined" << std::endl << std::flush;
773 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
774 std::cerr <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
776 assert(poGeometry != NULL
777 && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);
778 OGRPoint *poPoint = (OGRPoint *) poGeometry;
780 theFeature.push_back(poPoint->getX());
781 theFeature.push_back(poPoint->getY());
783 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
784 std::string featurename;
785 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
786 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
787 std::string fieldname=poFieldDefn->GetNameRef();
789 theClass=poFeature->GetFieldAsInteger(iField);
793 if(fields.size()<poFDefn->GetFieldCount()){
794 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
795 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
798 fields[iField]=fieldname;
799 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
803 if(fields.size()<poFDefn->GetFieldCount()){
804 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
805 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
808 fields[iField]=fieldname;
809 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
814 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
821 data[theClass].push_back(theFeature);
825 std::cout <<
"number of features read: " << ifeature << std::endl << std::flush;
826 typename std::map<int,Vector2d<T> >::const_iterator mit=data.begin();
829 std::cout <<
"read classes: " << std::flush;
830 while(mit!=data.end()){
832 std::cout << mit->first <<
" " << std::flush;
836 assert((mit->second)[0].size()==nband+2);
838 assert((mit->second)[0].size()==nband);
842 std::cout << std::endl << std::flush;
846 std::ostringstream ess;
847 ess <<
"no layer in " << m_filename;
852 template<
typename T>
int ImgReaderOgr::readSql(
Vector2d<T>& data,
const OGRFieldType& fieldType, std::vector<std::string>& fields,
const std::string& sqlStatement, OGRGeometry* spatialFilter,
int layer,
bool pos,
bool verbose)
854 assert(m_datasource->GetLayerCount()>layer);
856 poLayer = m_datasource->ExecuteSQL(sqlStatement.c_str(), spatialFilter,NULL );
858 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
860 fields.resize(poFDefn->GetFieldCount());
862 std::cout <<
"resized fields to " << fields.size() << std::endl;
865 OGRFeature *poFeature;
867 std::cout <<
"reset reading" << std::endl;
868 poLayer->ResetReading();
869 unsigned long int ifeature=0;
870 int posOffset=(pos)?2:0;
872 std::cout <<
"going through features" << std::endl << std::flush;
873 while( (poFeature = poLayer->GetNextFeature()) != NULL ){
874 std::vector<T> theFeature;
876 std::cout <<
"reading feature " << ifeature << std::endl << std::flush;
877 OGRGeometry *poGeometry;
878 poGeometry = poFeature->GetGeometryRef();
880 if(poGeometry == NULL)
881 std::cerr <<
"no geometry defined" << std::endl << std::flush;
882 else if(wkbFlatten(poGeometry->getGeometryType()) != wkbPoint)
883 std::cerr <<
"poGeometry type: " << wkbFlatten(poGeometry->getGeometryType()) << std::endl << std::flush;
885 assert(poGeometry != NULL
886 && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint);
887 OGRPoint *poPoint = (OGRPoint *) poGeometry;
889 theFeature.push_back(poPoint->getX());
890 theFeature.push_back(poPoint->getY());
892 OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
893 std::string featurename;
894 for(
int iField=0;iField<poFDefn->GetFieldCount();++iField){
895 OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn(iField);
896 std::string fieldname=poFieldDefn->GetNameRef();
899 if(fields.size()<poFDefn->GetFieldCount()){
900 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
901 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
904 fields[iField]=fieldname;
905 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
909 if(fields.size()<poFDefn->GetFieldCount()){
910 if(find(fields.begin(),fields.end(),fieldname)!=fields.end())
911 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
914 fields[iField]=fieldname;
915 theFeature.push_back(poFeature->GetFieldAsDouble(iField));
920 std::string errorstring=
"field type not supported in ImgReaderOgr::ReadData";
926 data.push_back(theFeature);
929 m_datasource->ReleaseResultSet( poLayer );
933 assert(data[0].size()==fields.size()+2);
935 assert(data[0].size()==fields.size());
936 return fields.size();
942 std::ostringstream ess;
943 ess <<
"no layer in " << m_filename;
948 #endif // _IMGREADEROGR_H_