25 #include <boost/bind.hpp>
26 #include <boost/foreach.hpp>
27 #include "ogrsf_frmts.h"
40 struct LeaveAloneDeleter
42 void operator()(OGRLayer*)
const {}
48 : m_Layer(layer, LeaveAloneDeleter())
49 , m_Modifiable(modifiable)
51 , m_DataSource(datasource)
57 : m_Layer(layer, boost::bind(&OGRDataSource::ReleaseResultSet, boost::ref(sourceInChargeOfLifeTime), _1))
58 , m_Modifiable(modifiable)
60 assert(layer &&
"A null OGRlayer cannot belong to an OGRDataSource" );
69 assert(m_Layer &&
"Can't ask the features count on an invalid layer");
70 return m_Layer->GetFeatureCount(doForceComputation);
75 assert(m_Layer &&
"OGRLayer not initialized");
76 OGRFeature * f = m_Layer->GetNextFeature();
82 assert(m_Layer &&
"OGRLayer not initialized");
83 m_Layer->ResetReading();
89 assert(m_Layer &&
"OGRLayer not initialized");
90 m_Layer->ResetReading();
96 assert(m_Layer &&
"OGRLayer not initialized");
97 m_Layer->SetNextByIndex(index);
103 assert(m_Layer &&
"OGRLayer not initialized");
104 m_Layer->SetNextByIndex(index);
110 assert(m_Layer &&
"OGRLayer not initialized");
114 itkGenericExceptionMacro(<<
"Cannot create a new feature in the layer <"
115 <<GetName()<<
">: layer is not modifiable");
118 const OGRErr res = m_Layer->CreateFeature(&feature.
ogr());
119 if (res != OGRERR_NONE)
121 itkGenericExceptionMacro(<<
"Cannot create a new feature in the layer <"
122 <<GetName()<<
">: " << CPLGetLastErrorMsg());
128 assert(m_Layer &&
"OGRLayer not initialized");
132 itkGenericExceptionMacro(<<
"Cannot create a new feature in the layer <"
133 <<GetName()<<
">: layer is not modifiable");
136 const OGRErr res = m_Layer->DeleteFeature(nFID);
137 if (res != OGRERR_NONE)
139 itkGenericExceptionMacro(<<
"Cannot delete the feature <"<<nFID<<
"> in the layer <"
140 <<GetName()<<
">: " << CPLGetLastErrorMsg());
146 assert(m_Layer &&
"OGRLayer not initialized");
147 if (nFID == OGRNullFID)
149 itkGenericExceptionMacro(<<
"Invalid feature null id GetFeature() in the layer <"<<GetName()<<
">.");
151 const Feature feat = m_Layer->GetFeature(nFID);
157 assert(m_Layer &&
"OGRLayer not initialized");
161 itkGenericExceptionMacro(<<
"Cannot create a new feature in the layer <"
162 <<GetName()<<
">: layer is not modifiable");
165 const OGRErr res = m_Layer->SetFeature(&feature.
ogr());
166 if (res != OGRERR_NONE)
168 itkGenericExceptionMacro(<<
"Cannot update a feature in the layer <"
169 <<GetName()<<
">: " << CPLGetLastErrorMsg());
178 assert(m_Layer &&
"null layer");
179 #if GDAL_VERSION_NUM >= 1800
180 return m_Layer->GetName();
182 return GetLayerDefn().GetName();
188 assert(m_Layer &&
"OGRLayer not initialized");
190 const OGRErr res = m_Layer->GetExtent(&sExtent,force);
191 if(res != OGRERR_NONE)
193 itkGenericExceptionMacro(<<
"Cannot retrieve extent of layer <"
194 <<GetName()<<
">: " << CPLGetLastErrorMsg());
201 const OGREnvelope sExtent = GetExtent(force);
210 assert(m_Layer &&
"OGRLayer not initialized");
219 os <<
"Layer <" << GetName() <<
"> of "<< OGRGeometryTypeToName(GetGeomType()) <<
"\n";
221 BOOST_FOREACH(
Feature f, *
this)
228 os <<
"null Layer\n";
238 assert(m_Layer &&
"OGRLayer not initialized");
239 OGRGeometry* spatialFilter = m_Layer->GetSpatialFilter();
240 return spatialFilter;
245 assert(m_Layer &&
"OGRLayer not initialized");
247 m_Layer->SetSpatialFilter(const_cast <OGRGeometry*>(spatialFilter));
251 double dfMinX,
double dfMinY,
double dfMaxX,
double dfMaxY)
253 assert(m_Layer &&
"OGRLayer not initialized");
254 m_Layer->SetSpatialFilterRect(dfMinX, dfMinY, dfMaxX, dfMaxY);
259 assert(m_Layer &&
"OGRLayer not initialized");
260 return m_Layer->GetSpatialRef();
265 assert(m_Layer &&
"OGRLayer not initialized");
267 OGRSpatialReference
const* srs = GetSpatialRef();
270 const OGRErr res = srs->exportToWkt(&wkt);
272 if(res != OGRERR_NONE)
274 itkGenericExceptionMacro(<<
"Cannot convert spatial reference to wkt string for layer <"
275 <<GetName()<<
">: " << CPLGetLastErrorMsg());
279 const std::string stringWkt(wkt);
293 assert(m_Layer &&
"OGRLayer not initialized");
294 return *const_cast <OGRLayer*>(m_Layer.get())->GetLayerDefn();
300 assert(m_Layer &&
"OGRLayer not initialized");
304 itkGenericExceptionMacro(<<
"Cannot create a new field in the layer <"
305 <<GetName()<<
">: layer is not modifiable");
308 const OGRErr res = m_Layer->CreateField(&field.
ogr(), bApproxOK);
309 if (res != OGRERR_NONE)
311 itkGenericExceptionMacro(<<
"Cannot create a field in the layer <"
312 <<GetName()<<
">: " << CPLGetLastErrorMsg());
318 assert(m_Layer &&
"OGRLayer not initialized");
322 itkGenericExceptionMacro(<<
"Cannot delete field in the layer <"
323 <<GetName()<<
">: layer is not modifiable");
326 #if GDAL_VERSION_NUM < 1900
327 itkGenericExceptionMacro(
"OGRLayer::DeleteField is not supported by OGR v"
328 << GDAL_VERSION_NUM <<
". Upgrade to a version >= 1.9.0, and recompile OTB.")
330 const OGRErr res = m_Layer->DeleteField(
int(fieldIndex));
331 if (res != OGRERR_NONE)
333 itkGenericExceptionMacro(<<
"Cannot delete the "<<fieldIndex <<
"th field in the layer <"
334 <<GetName() <<
">: " << CPLGetLastErrorMsg());
340 size_t fieldIndex,
FieldDefn const& newFieldDefn,
int nFlags)
342 assert(m_Layer &&
"OGRLayer not initialized");
346 itkGenericExceptionMacro(<<
"Cannot alter field definition in the layer <"
347 <<GetName()<<
">: layer is not modifiable");
350 #if GDAL_VERSION_NUM < 1900
351 itkGenericExceptionMacro(
"OGRLayer::AlterFieldDefn is not supported by OGR v"
352 << GDAL_VERSION_NUM <<
". Upgrade to a version >= 1.9.0, and recompile OTB.")
354 const OGRErr res = m_Layer->AlterFieldDefn(
358 if (res != OGRERR_NONE)
360 itkGenericExceptionMacro(<<
"Cannot alter the "<<fieldIndex <<
"th field in the layer <"
361 <<GetName() <<
">: " << CPLGetLastErrorMsg());
368 assert(m_Layer &&
"OGRLayer not initialized");
372 itkGenericExceptionMacro(<<
"Cannot reorder fields in the layer <"
373 <<GetName()<<
">: layer is not modifiable");
376 #if GDAL_VERSION_NUM < 1900
377 itkGenericExceptionMacro(
"OGRLayer::ReorderField is not supported by OGR v"
378 << GDAL_VERSION_NUM <<
". Upgrade to a version >= 1.9.0, and recompile OTB.")
380 const OGRErr res = m_Layer->ReorderField(
int(oldPos),
int(newPos));
381 if (res != OGRERR_NONE)
383 itkGenericExceptionMacro(<<
"Cannot move the "<<oldPos <<
"th field to the "
384 << newPos <<
"th position in the layer <" <<GetName() <<
">: " << CPLGetLastErrorMsg());
391 assert(m_Layer &&
"OGRLayer not initialized");
395 itkGenericExceptionMacro(<<
"Cannot reorder fields in the layer <"
396 <<GetName()<<
">: layer is not modifiable");
399 #if GDAL_VERSION_NUM < 1900
400 itkGenericExceptionMacro(
"OGRLayer::ReorderField is not supported by OGR v"
401 << GDAL_VERSION_NUM <<
". Upgrade to a version >= 1.9.0, and recompile OTB.")
403 const OGRErr res = m_Layer->ReorderFields(map);
404 if (res != OGRERR_NONE)
406 itkGenericExceptionMacro(<<
"Cannot reorder the fields of the layer <"
407 <<GetName() <<
">: " << CPLGetLastErrorMsg());
414 assert(m_Layer &&
"OGRLayer not initialized");
415 #if GDAL_VERSION_NUM >= 1900
416 const OGRErr res = m_Layer->SetIgnoredFields(fieldNames);
417 if (res != OGRERR_NONE)
419 itkGenericExceptionMacro(<<
"Cannot set fields to ignore on the layer <"
420 <<GetName() <<
">: " << CPLGetLastErrorMsg());
423 itkGenericExceptionMacro(
"OGRLayer::SetIgnoredFields is not supported by OGR v"
424 << GDAL_VERSION_NUM <<
". Upgrade to a version >= 1.9.0, and recompile OTB.")
430 assert(m_Layer &&
"OGRLayer not initialized");
431 #if GDAL_VERSION_NUM < 1800
432 return GetLayerDefn().GetGeomType();
434 return m_Layer->GetGeomType();