QGIS API Documentation  2.0.1-Dufour
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Static Private Member Functions | List of all members
QgsGeometryAnalyzer Class Reference

The QGis class provides vector geometry analysis functions. More...

#include <qgsgeometryanalyzer.h>

Public Member Functions

bool simplify (QgsVectorLayer *layer, const QString &shapefileName, double tolerance, bool onlySelectedFeatures=false, QProgressDialog *p=0)
 Simplify vector layer using (a modified) Douglas-Peucker algorithm and write it to a new shape file.
bool centroids (QgsVectorLayer *layer, const QString &shapefileName, bool onlySelectedFeatures=false, QProgressDialog *p=0)
 Calculate the true centroids, or 'center of mass' for a vector layer and write it to a new shape file.
bool extent (QgsVectorLayer *layer, const QString &shapefileName, bool onlySelectedFeatures=false, QProgressDialog *p=0)
 Create a polygon based on the extent of all (selected) features and write it to a new shape file.
bool buffer (QgsVectorLayer *layer, const QString &shapefileName, double bufferDistance, bool onlySelectedFeatures=false, bool dissolve=false, int bufferDistanceField=-1, QProgressDialog *p=0)
 Create buffers for a vector layer and write it to a new shape file.
bool convexHull (QgsVectorLayer *layer, const QString &shapefileName, bool onlySelectedFeatures=false, int uniqueIdField=-1, QProgressDialog *p=0)
 Create convex hull(s) of a vector layer and write it to a new shape file.
bool dissolve (QgsVectorLayer *layer, const QString &shapefileName, bool onlySelectedFeatures=false, int uniqueIdField=-1, QProgressDialog *p=0)
 Dissolve a vector layer and write it to a new shape file.
bool eventLayer (QgsVectorLayer *lineLayer, QgsVectorLayer *eventLayer, int lineField, int eventField, QList< int > &unlocatedFeatureIds, const QString &outputLayer, const QString &outputFormat, int locationField1, int locationField2=-1, int offsetField=-1, double offsetScale=1.0, bool forceSingleGeometry=false, QgsVectorDataProvider *memoryProvider=0, QProgressDialog *p=0)
 Creates an event layer (multipoint or multiline) by locating features from a (non-spatial) event table along the features of a line layer.
QgsGeometrylocateBetweenMeasures (double fromMeasure, double toMeasure, QgsGeometry *lineGeom)
 Returns linear reference geometry as a multiline (or 0 if no match).
QgsGeometrylocateAlongMeasure (double measure, QgsGeometry *lineGeom)
 Returns linear reference geometry.

Private Member Functions

QList< double > simpleMeasure (QgsGeometry *geometry)
double perimeterMeasure (QgsGeometry *geometry, QgsDistanceArea &measure)
void simplifyFeature (QgsFeature &f, QgsVectorFileWriter *vfw, double tolerance)
 Helper function to simplify an individual feature.
void centroidFeature (QgsFeature &f, QgsVectorFileWriter *vfw)
 Helper function to get the cetroid of an individual feature.
void bufferFeature (QgsFeature &f, int nProcessedFeatures, QgsVectorFileWriter *vfw, bool dissolve, QgsGeometry **dissolveGeometry, double bufferDistance, int bufferDistanceField)
 Helper function to buffer an individual feature.
void convexFeature (QgsFeature &f, int nProcessedFeatures, QgsGeometry **dissolveGeometry)
 Helper function to get the convex hull of feature(s)
void dissolveFeature (QgsFeature &f, int nProcessedFeatures, QgsGeometry **dissolveGeometry)
 Helper function to dissolve feature(s)
void addEventLayerFeature (QgsFeature &feature, QgsGeometry *geom, QgsGeometry *lineGeom, QgsVectorFileWriter *fileWriter, QgsFeatureList &memoryFeatures, int offsetField=-1, double offsetScale=1.0, bool forceSingleType=false)
void createOffsetGeometry (QgsGeometry *geom, QgsGeometry *lineGeom, double offset)
 Create geometry offset relative to line geometry.
QgsPoint createPointOffset (double x, double y, double dist, QgsGeometry *lineGeom) const
const unsigned char * locateBetweenWkbString (const unsigned char *ptr, QgsMultiPolyline &result, double fromMeasure, double toMeasure)
const unsigned char * locateAlongWkbString (const unsigned char *ptr, QgsMultiPoint &result, double measure)

Static Private Member Functions

static bool clipSegmentByRange (double x1, double y1, double m1, double x2, double y2, double m2, double range1, double range2, QgsPoint &pt1, QgsPoint &pt2, bool &secondPointClipped)
static void locateAlongSegment (double x1, double y1, double m1, double x2, double y2, double m2, double measure, bool &pt1Ok, QgsPoint &pt1, bool &pt2Ok, QgsPoint &pt2)

Detailed Description

The QGis class provides vector geometry analysis functions.

Definition at line 36 of file qgsgeometryanalyzer.h.

Member Function Documentation

void QgsGeometryAnalyzer::addEventLayerFeature ( QgsFeature feature,
QgsGeometry geom,
QgsGeometry lineGeom,
QgsVectorFileWriter fileWriter,
QgsFeatureList memoryFeatures,
int  offsetField = -1,
double  offsetScale = 1.0,
bool  forceSingleType = false 
)
private
bool QgsGeometryAnalyzer::buffer ( QgsVectorLayer layer,
const QString &  shapefileName,
double  bufferDistance,
bool  onlySelectedFeatures = false,
bool  dissolve = false,
int  bufferDistanceField = -1,
QProgressDialog *  p = 0 
)

Create buffers for a vector layer and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
bufferDistancedistance for buffering (if no buffer field is specified)
onlySelectedFeaturesif true, only selected features are considered, else all the features
dissolveif true, merge all the buffers to a big multipolygon
bufferDistanceFieldindex of the attribute field that contains the buffer distance (or -1 if all features have the same buffer distance)
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.3

Definition at line 752 of file qgsgeometryanalyzer.cpp.

References bufferFeature(), QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), dissolveFeature(), QgsVectorDataProvider::encoding(), QgsVectorLayer::featureCount(), QgsVectorLayer::getFeatures(), QgsFeatureIterator::nextFeature(), QgsVectorLayer::pendingFields(), QgsDebugMsg, QgsVectorLayer::selectedFeaturesIds(), QgsFeature::setGeometry(), QGis::WKBMultiPolygon, and QGis::WKBPolygon.

void QgsGeometryAnalyzer::bufferFeature ( QgsFeature f,
int  nProcessedFeatures,
QgsVectorFileWriter vfw,
bool  dissolve,
QgsGeometry **  dissolveGeometry,
double  bufferDistance,
int  bufferDistanceField 
)
private
void QgsGeometryAnalyzer::centroidFeature ( QgsFeature f,
QgsVectorFileWriter vfw 
)
private

Helper function to get the cetroid of an individual feature.

Definition at line 239 of file qgsgeometryanalyzer.cpp.

References QgsVectorFileWriter::addFeature(), QgsFeature::attributes(), QgsGeometry::centroid(), QgsFeature::geometry(), QgsFeature::setAttributes(), and QgsFeature::setGeometry().

Referenced by centroids().

bool QgsGeometryAnalyzer::centroids ( QgsVectorLayer layer,
const QString &  shapefileName,
bool  onlySelectedFeatures = false,
QProgressDialog *  p = 0 
)

Calculate the true centroids, or 'center of mass' for a vector layer and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
onlySelectedFeaturesif true, only selected features are considered, else all the features
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.4

Definition at line 146 of file qgsgeometryanalyzer.cpp.

References centroidFeature(), QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), QgsVectorDataProvider::encoding(), QgsVectorLayer::featureCount(), QgsVectorLayer::getFeatures(), QgsFeatureIterator::nextFeature(), QgsVectorLayer::pendingFields(), QgsDebugMsg, QgsVectorLayer::selectedFeaturesIds(), and QGis::WKBPoint.

bool QgsGeometryAnalyzer::clipSegmentByRange ( double  x1,
double  y1,
double  m1,
double  x2,
double  y2,
double  m2,
double  range1,
double  range2,
QgsPoint pt1,
QgsPoint pt2,
bool &  secondPointClipped 
)
staticprivate

Definition at line 1355 of file qgsgeometryanalyzer.cpp.

References QgsPoint::setX(), and QgsPoint::setY().

Referenced by locateBetweenWkbString().

void QgsGeometryAnalyzer::convexFeature ( QgsFeature f,
int  nProcessedFeatures,
QgsGeometry **  dissolveGeometry 
)
private

Helper function to get the convex hull of feature(s)

Definition at line 569 of file qgsgeometryanalyzer.cpp.

References QgsGeometry::combine(), QgsGeometry::convexHull(), and QgsFeature::geometry().

Referenced by convexHull().

bool QgsGeometryAnalyzer::convexHull ( QgsVectorLayer layer,
const QString &  shapefileName,
bool  onlySelectedFeatures = false,
int  uniqueIdField = -1,
QProgressDialog *  p = 0 
)

Create convex hull(s) of a vector layer and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
onlySelectedFeaturesif true, only selected features are considered, else all the features
uniqueIdFieldindex of the attribute field that contains the unique convex hull id (or -1 if all features have the same buffer distance)
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.4

Definition at line 385 of file qgsgeometryanalyzer.cpp.

References QgsFields::append(), convexFeature(), QgsGeometry::convexHull(), QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), dissolveFeature(), QgsVectorDataProvider::encoding(), QgsVectorLayer::featureCount(), QgsVectorLayer::getFeatures(), QgsFeatureIterator::nextFeature(), QgsDebugMsg, QgsVectorLayer::selectedFeaturesIds(), QgsFeature::setAttributes(), QgsFeature::setGeometry(), simpleMeasure(), and QGis::WKBPolygon.

void QgsGeometryAnalyzer::createOffsetGeometry ( QgsGeometry geom,
QgsGeometry lineGeom,
double  offset 
)
private

Create geometry offset relative to line geometry.

Parameters
geomthe geometry to modify
lineGeomthe line geometry to which the feature is referenced
offsetthe offset value in layer unit. Negative values mean offset towards left, positive values offset to the right side

Definition at line 1081 of file qgsgeometryanalyzer.cpp.

References QgsGeometry::asGeometryCollection(), createPointOffset(), QgsGeometry::fromGeos(), QgsGeometry::isMultipart(), QGis::Line, QGis::Point, QgsGeometry::type(), QgsPoint::x(), and QgsPoint::y().

Referenced by addEventLayerFeature().

QgsPoint QgsGeometryAnalyzer::createPointOffset ( double  x,
double  y,
double  dist,
QgsGeometry lineGeom 
) const
private
bool QgsGeometryAnalyzer::dissolve ( QgsVectorLayer layer,
const QString &  shapefileName,
bool  onlySelectedFeatures = false,
int  uniqueIdField = -1,
QProgressDialog *  p = 0 
)

Dissolve a vector layer and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
onlySelectedFeaturesif true, only selected features are considered, else all the features
uniqueIdFieldindex of the attribute field that contains the unique id to dissolve on (or -1 if all features should be dissolved together)
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.4

Definition at line 595 of file qgsgeometryanalyzer.cpp.

References QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), dissolveFeature(), QgsVectorDataProvider::encoding(), QgsVectorLayer::featureCount(), QgsVectorDataProvider::geometryType(), QgsVectorLayer::getFeatures(), QgsFeatureIterator::nextFeature(), QgsVectorLayer::pendingFields(), QgsVectorLayer::selectedFeaturesIds(), QgsFeature::setAttributes(), and QgsFeature::setGeometry().

void QgsGeometryAnalyzer::dissolveFeature ( QgsFeature f,
int  nProcessedFeatures,
QgsGeometry **  dissolveGeometry 
)
private

Helper function to dissolve feature(s)

Definition at line 729 of file qgsgeometryanalyzer.cpp.

References QgsGeometry::asWkb(), QgsGeometry::combine(), QgsFeature::geometry(), and QgsGeometry::wkbSize().

Referenced by buffer(), convexHull(), and dissolve().

bool QgsGeometryAnalyzer::eventLayer ( QgsVectorLayer lineLayer,
QgsVectorLayer eventLayer,
int  lineField,
int  eventField,
QList< int > &  unlocatedFeatureIds,
const QString &  outputLayer,
const QString &  outputFormat,
int  locationField1,
int  locationField2 = -1,
int  offsetField = -1,
double  offsetScale = 1.0,
bool  forceSingleGeometry = false,
QgsVectorDataProvider memoryProvider = 0,
QProgressDialog *  p = 0 
)

Creates an event layer (multipoint or multiline) by locating features from a (non-spatial) event table along the features of a line layer.

Note that currently (until QgsGeometry supports m-values) the z-coordinate of the line layer is used for linear referencing

Parameters
lineLayerlayer with the line geometry
eventLayerlayer with features and location field
lineFieldjoin index in line layer
eventFieldjoin index in event layer
outputLayername of output file (can be empty if a memory layer is used)
outputFormatname of output format (can be empty if a memory provider is used to store the results)
unlocatedFeatureIdsout: ids of event features where linear referencing was not successful
locationField1attribute index of location field in event layer
locationField2attribute index of location end field (or -1 for point layer)
offsetFieldattribute index for offset field. Negative offset value = offset to left side, positive value = offset to right side
offsetScalefactor to scale offset
forceSingleGeometryforce layer to single point/line type. Feature attributes are copied in case of multiple matches
memoryProvidermemory provider to write output to (can be 0 if output is written to a file)
pprogress dialog or 0 if no progress dialog should be shown

Definition at line 910 of file qgsgeometryanalyzer.cpp.

References QgsVectorDataProvider::addAttributes(), addEventLayerFeature(), QgsVectorDataProvider::addFeatures(), QgsFeature::attribute(), QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), QgsVectorDataProvider::encoding(), QgsFeature::geometry(), QgsVectorLayer::getFeatures(), QgsFeature::id(), QgsMapLayer::isValid(), locateAlongMeasure(), locateBetweenMeasures(), QgsFeatureIterator::nextFeature(), QgsFeatureRequest::NoGeometry, QgsVectorLayer::pendingFeatureCount(), QgsVectorLayer::pendingFields(), QgsFeatureRequest::setSubsetOfAttributes(), QgsFields::toList(), QGis::WKBLineString, QGis::WKBMultiLineString, QGis::WKBMultiPoint, and QGis::WKBPoint.

bool QgsGeometryAnalyzer::extent ( QgsVectorLayer layer,
const QString &  shapefileName,
bool  onlySelectedFeatures = false,
QProgressDialog *  p = 0 
)

Create a polygon based on the extent of all (selected) features and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
onlySelectedFeaturesif true, only selected features are considered, else all the features
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.4

Definition at line 262 of file qgsgeometryanalyzer.cpp.

References QgsFields::append(), QgsVectorLayer::boundingBoxOfSelected(), QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), QgsVectorDataProvider::encoding(), QgsVectorLayer::extent(), QgsGeometry::fromRect(), QgsFeature::setAttributes(), QgsFeature::setGeometry(), QGis::WKBPolygon, and QgsRectangle::xMinimum().

QgsGeometry * QgsGeometryAnalyzer::locateAlongMeasure ( double  measure,
QgsGeometry lineGeom 
)

Returns linear reference geometry.

Unlike the PostGIS function, this method always returns multipoint or 0 if no match (not geometry collection). Currently, the z-coordinates are considered to be the measures (no support for m-values in QGIS)

Definition at line 1223 of file qgsgeometryanalyzer.cpp.

References QgsGeometry::asWkb(), QgsGeometry::fromMultiPoint(), locateAlongWkbString(), QGis::WKBLineString25D, and QGis::WKBMultiLineString25D.

Referenced by eventLayer().

void QgsGeometryAnalyzer::locateAlongSegment ( double  x1,
double  y1,
double  m1,
double  x2,
double  y2,
double  m2,
double  measure,
bool &  pt1Ok,
QgsPoint pt1,
bool &  pt2Ok,
QgsPoint pt2 
)
staticprivate

Definition at line 1450 of file qgsgeometryanalyzer.cpp.

References qgsDoubleNear(), QgsPoint::setX(), and QgsPoint::setY().

Referenced by locateAlongWkbString().

const unsigned char * QgsGeometryAnalyzer::locateAlongWkbString ( const unsigned char *  ptr,
QgsMultiPoint result,
double  measure 
)
private

Definition at line 1319 of file qgsgeometryanalyzer.cpp.

References locateAlongSegment().

Referenced by locateAlongMeasure().

QgsGeometry * QgsGeometryAnalyzer::locateBetweenMeasures ( double  fromMeasure,
double  toMeasure,
QgsGeometry lineGeom 
)

Returns linear reference geometry as a multiline (or 0 if no match).

Currently, the z-coordinates are considered to be the measures (no support for m-values in QGIS)

Definition at line 1179 of file qgsgeometryanalyzer.cpp.

References QgsGeometry::asWkb(), QgsGeometry::fromMultiPolyline(), locateBetweenWkbString(), QGis::WKBLineString25D, and QGis::WKBMultiLineString25D.

Referenced by eventLayer().

const unsigned char * QgsGeometryAnalyzer::locateBetweenWkbString ( const unsigned char *  ptr,
QgsMultiPolyline result,
double  fromMeasure,
double  toMeasure 
)
private

Definition at line 1267 of file qgsgeometryanalyzer.cpp.

References clipSegmentByRange().

Referenced by locateBetweenMeasures().

double QgsGeometryAnalyzer::perimeterMeasure ( QgsGeometry geometry,
QgsDistanceArea measure 
)
private
QList< double > QgsGeometryAnalyzer::simpleMeasure ( QgsGeometry geometry)
private
bool QgsGeometryAnalyzer::simplify ( QgsVectorLayer layer,
const QString &  shapefileName,
double  tolerance,
bool  onlySelectedFeatures = false,
QProgressDialog *  p = 0 
)

Simplify vector layer using (a modified) Douglas-Peucker algorithm and write it to a new shape file.

Parameters
layerinput vector layer
shapefileNamepath to the output shp
tolerance(level of simplification)
onlySelectedFeaturesif true, only selected features are considered, else all the features
pprogress dialog (or 0 if no progress dialog is to be shown)
Note
: added in version 1.4

Definition at line 30 of file qgsgeometryanalyzer.cpp.

References QgsMapLayer::crs(), QgsVectorLayer::dataProvider(), QgsVectorDataProvider::encoding(), QgsVectorLayer::featureCount(), QgsVectorDataProvider::geometryType(), QgsVectorLayer::getFeatures(), QgsFeatureIterator::nextFeature(), QgsVectorLayer::pendingFields(), QgsVectorLayer::selectedFeaturesIds(), and simplifyFeature().

void QgsGeometryAnalyzer::simplifyFeature ( QgsFeature f,
QgsVectorFileWriter vfw,
double  tolerance 
)
private

The documentation for this class was generated from the following files: