mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
nearest neighbor search based on QgsGeometry to QgsGeometries Previously only point - geometry was possible. But with this change, you can safely and accurately use QgsSpatialIndex to determine the nearest neighbours between any types of geometries.
233 lines
7.6 KiB
Plaintext
233 lines
7.6 KiB
Plaintext
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/core/qgsspatialindex.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QgsSpatialIndex : QgsFeatureSink
|
|
{
|
|
%Docstring
|
|
|
|
A spatial index for QgsFeature objects.
|
|
|
|
QgsSpatialIndex objects are implicitly shared and can be inexpensively copied.
|
|
|
|
.. note::
|
|
|
|
While the underlying libspatialindex is not thread safe on some platforms, the QgsSpatialIndex
|
|
class implements its own locks and accordingly, a single QgsSpatialIndex object can safely
|
|
be used across multiple threads.
|
|
|
|
.. seealso:: :py:class:`QgsSpatialIndexKDBush`
|
|
|
|
.. seealso:: :py:class:`QgsMeshSpatialIndex`
|
|
%End
|
|
|
|
%TypeHeaderCode
|
|
#include "qgsspatialindex.h"
|
|
%End
|
|
public:
|
|
|
|
|
|
enum Flag
|
|
{
|
|
FlagStoreFeatureGeometries,
|
|
};
|
|
typedef QFlags<QgsSpatialIndex::Flag> Flags;
|
|
|
|
|
|
QgsSpatialIndex( QgsSpatialIndex::Flags flags = 0 );
|
|
%Docstring
|
|
Constructor for QgsSpatialIndex. Creates an empty R-tree index.
|
|
%End
|
|
|
|
explicit QgsSpatialIndex( const QgsFeatureIterator &fi, QgsFeedback *feedback = 0, QgsSpatialIndex::Flags flags = 0 );
|
|
%Docstring
|
|
Constructor - creates R-tree and bulk loads it with features from the iterator.
|
|
This is much faster approach than creating an empty index and then inserting features one by one.
|
|
|
|
The optional ``feedback`` object can be used to allow cancellation of bulk feature loading. Ownership
|
|
of ``feedback`` is not transferred, and callers must take care that the lifetime of feedback exceeds
|
|
that of the spatial index construction.
|
|
|
|
.. versionadded:: 2.8
|
|
%End
|
|
|
|
explicit QgsSpatialIndex( const QgsFeatureSource &source, QgsFeedback *feedback = 0, QgsSpatialIndex::Flags flags = 0 );
|
|
%Docstring
|
|
Constructor - creates R-tree and bulk loads it with features from the source.
|
|
This is much faster approach than creating an empty index and then inserting features one by one.
|
|
|
|
The optional ``feedback`` object can be used to allow cancellation of bulk feature loading. Ownership
|
|
of ``feedback`` is not transferred, and callers must take care that the lifetime of feedback exceeds
|
|
that of the spatial index construction.
|
|
|
|
.. versionadded:: 3.0
|
|
%End
|
|
|
|
QgsSpatialIndex( const QgsSpatialIndex &other );
|
|
%Docstring
|
|
Copy constructor
|
|
%End
|
|
|
|
~QgsSpatialIndex();
|
|
|
|
|
|
|
|
bool insertFeature( const QgsFeature &feature ) /Deprecated/;
|
|
%Docstring
|
|
Adds a ``feature`` to the index.
|
|
|
|
.. deprecated:: Use addFeature() instead
|
|
%End
|
|
|
|
virtual bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = 0 );
|
|
|
|
%Docstring
|
|
Adds a ``feature`` to the index.
|
|
|
|
The ``flags`` argument is ignored.
|
|
|
|
.. versionadded:: 3.4
|
|
%End
|
|
|
|
virtual bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = 0 );
|
|
|
|
%Docstring
|
|
Adds a list of ``features`` to the index.
|
|
|
|
The ``flags`` argument is ignored.
|
|
|
|
.. seealso:: :py:func:`addFeature`
|
|
%End
|
|
|
|
bool insertFeature( QgsFeatureId id, const QgsRectangle &bounds ) /Deprecated/;
|
|
%Docstring
|
|
Add a feature ``id`` to the index with a specified bounding box.
|
|
|
|
:return: ``True`` if feature was successfully added to index.
|
|
|
|
.. deprecated:: Use addFeature() instead
|
|
%End
|
|
|
|
bool addFeature( QgsFeatureId id, const QgsRectangle &bounds );
|
|
%Docstring
|
|
Add a feature ``id`` to the index with a specified bounding box.
|
|
|
|
:return: ``True`` if feature was successfully added to index.
|
|
|
|
.. versionadded:: 3.4
|
|
%End
|
|
|
|
bool deleteFeature( const QgsFeature &feature );
|
|
%Docstring
|
|
Removes a ``feature`` from the index.
|
|
%End
|
|
|
|
|
|
|
|
QList<QgsFeatureId> intersects( const QgsRectangle &rectangle ) const;
|
|
%Docstring
|
|
Returns a list of features with a bounding box which intersects the specified ``rectangle``.
|
|
|
|
.. note::
|
|
|
|
The intersection test is performed based on the feature bounding boxes only, so for non-point
|
|
geometry features it is necessary to manually test the returned features for exact geometry intersection
|
|
when required.
|
|
%End
|
|
|
|
QList<QgsFeatureId> nearestNeighbor( const QgsPointXY &point, int neighbors = 1, double maxDistance = 0 ) const;
|
|
%Docstring
|
|
Returns nearest neighbors to a ``point``. The number of neighbors returned is specified
|
|
by the ``neighbors`` argument.
|
|
|
|
If the ``maxDistance`` argument is greater than 0, then only features within the specified
|
|
distance of ``point`` will be considered.
|
|
|
|
Note that in some cases the number of returned features may differ from the requested
|
|
number of ``neighbors``. E.g. if not enough features exist within the ``maxDistance`` of the
|
|
search point. If multiple features are equidistant from the search ``point`` then the
|
|
number of returned feature IDs may exceed ``neighbors``.
|
|
|
|
.. warning::
|
|
|
|
If this QgsSpatialIndex object was not constructed with the FlagStoreFeatureGeometries flag,
|
|
then the nearest neighbor test is performed based on the feature bounding boxes ONLY, so for non-point
|
|
geometry features this method is not guaranteed to return the actual closest neighbors.
|
|
%End
|
|
|
|
QList<QgsFeatureId> nearestNeighbor( const QgsGeometry &geometry, int neighbors = 1, double maxDistance = 0 ) const;
|
|
%Docstring
|
|
Returns nearest neighbors to a ``geometry``. The number of neighbors returned is specified
|
|
by the ``neighbors`` argument.
|
|
|
|
If the ``maxDistance`` argument is greater than 0, then only features within the specified
|
|
distance of ``point`` will be considered.
|
|
|
|
Note that in some cases the number of returned features may differ from the requested
|
|
number of ``neighbors``. E.g. if not enough features exist within the ``maxDistance`` of the
|
|
search point. If multiple features are equidistant from the search ``point`` then the
|
|
number of returned feature IDs may exceed ``neighbors``.
|
|
|
|
.. warning::
|
|
|
|
If this QgsSpatialIndex object was not constructed with the FlagStoreFeatureGeometries flag,
|
|
then the nearest neighbor test is performed based on the feature bounding boxes ONLY, so for non-point
|
|
geometry features this method is not guaranteed to return the actual closest neighbors.
|
|
|
|
.. versionadded:: 3.8
|
|
%End
|
|
|
|
|
|
SIP_PYOBJECT geometry( QgsFeatureId id ) const /TypeHint="QgsGeometry"/;
|
|
%Docstring
|
|
Returns the stored geometry for the indexed feature with matching ``id``. A KeyError will be raised if no
|
|
geometry with the specified feature id exists in the index.
|
|
|
|
Geometry is only stored if the QgsSpatialIndex was created with the FlagStoreFeatureGeometries flag.
|
|
|
|
.. versionadded:: 3.6
|
|
%End
|
|
%MethodCode
|
|
std::unique_ptr< QgsGeometry > g = qgis::make_unique< QgsGeometry >( sipCpp->geometry( a0 ) );
|
|
if ( g->isNull() )
|
|
{
|
|
PyErr_SetString( PyExc_KeyError, QStringLiteral( "No geometry with feature id %1 exists in the index." ).arg( a0 ).toUtf8().constData() );
|
|
sipIsErr = 1;
|
|
}
|
|
else
|
|
{
|
|
sipRes = sipConvertFromType( g.release(), sipType_QgsGeometry, Py_None );
|
|
}
|
|
%End
|
|
|
|
|
|
int refs() const;
|
|
%Docstring
|
|
Gets reference count - just for debugging!
|
|
%End
|
|
|
|
};
|
|
|
|
QFlags<QgsSpatialIndex::Flag> operator|(QgsSpatialIndex::Flag f1, QFlags<QgsSpatialIndex::Flag> f2);
|
|
|
|
|
|
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/core/qgsspatialindex.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|