mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
- isValid() was always returning true when, in fact, occasionally the provider was not in a valid state git-svn-id: http://svn.osgeo.org/qgis/trunk@978 c8812cc2-4d05-0410-92ff-de0c093fc19c
146 lines
4.2 KiB
C++
146 lines
4.2 KiB
C++
/***************************************************************************
|
|
qgsshapefileprovider.h - Data provider for ESRI shapefile format
|
|
-------------------
|
|
begin : Oct 29, 2003
|
|
copyright : (C) 2003 by Gary E.Sherman
|
|
email : sherman at mrcc.com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
/* $Id$ */
|
|
|
|
#include "../../src/qgsdataprovider.h"
|
|
class QgsFeature;
|
|
class QgsField;
|
|
class OGRDataSource;
|
|
class OGRLayer;
|
|
/**
|
|
\class QgsShapeFileProvider
|
|
\brief Data provider for ESRI shapefiles
|
|
*/
|
|
class QgsShapeFileProvider:public QgsDataProvider
|
|
{
|
|
public:
|
|
QgsShapeFileProvider(QString uri = 0);
|
|
virtual ~ QgsShapeFileProvider();
|
|
/**
|
|
* Get the first feature resutling from a select operation
|
|
* @return QgsFeature
|
|
*/
|
|
QgsFeature *getFirstFeature(bool fetchAttributes = false);
|
|
/**
|
|
* Get the next feature resutling from a select operation
|
|
* @return QgsFeature
|
|
*/
|
|
QgsFeature *getNextFeature(bool fetchAttributes = false);
|
|
|
|
/** Get the feature type. This corresponds to
|
|
WKBPoint,
|
|
WKBLineString,
|
|
WKBPolygon,
|
|
WKBMultiPoint,
|
|
WKBMultiLineString or
|
|
WKBMultiPolygon
|
|
* as defined in qgis.h
|
|
*/
|
|
int geometryType();
|
|
/**
|
|
* Get the number of features in the layer
|
|
*/
|
|
long featureCount();
|
|
/**
|
|
* Get the number of fields in the layer
|
|
*/
|
|
int fieldCount();
|
|
/**
|
|
* Select features based on a bounding rectangle. Features can be retrieved
|
|
* with calls to getFirstFeature and getNextFeature.
|
|
* @param mbr QgsRect containing the extent to use in selecting features
|
|
*/
|
|
void select(QgsRect * mbr, bool useIntersect = false);
|
|
/**
|
|
* Set the data source specification. This may be a path or database
|
|
* connection string
|
|
* @uri data source specification
|
|
*/
|
|
void setDataSourceUri(QString uri);
|
|
|
|
/**
|
|
* Get the data source specification. This may be a path or database
|
|
* connection string
|
|
* @return data source specification
|
|
*/
|
|
QString getDataSourceUri();
|
|
|
|
/**
|
|
* Identify features within the search radius specified by rect
|
|
* @param rect Bounding rectangle of search radius
|
|
* @return std::vector containing QgsFeature objects that intersect rect
|
|
*/
|
|
virtual std::vector < QgsFeature > &identify(QgsRect * rect);
|
|
|
|
/** Return endian-ness for this layer
|
|
*/
|
|
int endian();
|
|
|
|
/** Return the extent for this data layer
|
|
*/
|
|
virtual QgsRect *extent();
|
|
/**
|
|
* Get the attributes associated with a feature
|
|
*/
|
|
void getFeatureAttributes(OGRFeature * ogrFet, QgsFeature * f);
|
|
/**
|
|
* Get the field information for the layer
|
|
*/
|
|
std::vector < QgsField > &fields();
|
|
|
|
/* Reset the layer - for an OGRLayer, this means clearing the
|
|
* spatial filter and calling ResetReading
|
|
*/
|
|
void reset();
|
|
|
|
/**Returns the minimum value of an attribut
|
|
@param position the number of the attribute*/
|
|
QString minValue(int position);
|
|
|
|
/**Returns the maximum value of an attribut
|
|
@param position the number of the attribute*/
|
|
QString maxValue(int position);
|
|
|
|
/**Returns true if this is a valid shapefile
|
|
*/
|
|
bool isValid();
|
|
|
|
private:
|
|
unsigned char *getGeometryPointer(OGRFeature * fet);
|
|
std::vector < QgsField > attributeFields;
|
|
QString dataSourceUri;
|
|
OGRDataSource *ogrDataSource;
|
|
OGREnvelope *extent_;
|
|
OGRLayer *ogrLayer;
|
|
bool valid;
|
|
int geomType;
|
|
long numberFeatures;
|
|
enum ENDIAN
|
|
{
|
|
NDR = 1,
|
|
XDR = 0
|
|
};
|
|
/**Flag indicating, if the minmaxcache should be renewed (true) or not (false)*/
|
|
bool minmaxcachedirty;
|
|
/**Matrix storing the minimum and maximum values*/
|
|
double **minmaxcache;
|
|
/**Fills the cash and sets minmaxcachedirty to false*/
|
|
void fillMinMaxCash();
|
|
|
|
|
|
};
|