mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
Simplify QgsGeometryEngine code
This commit is contained in:
parent
e3787effc6
commit
b51a5f7b6f
@ -85,16 +85,28 @@ class QgsGeometryEngine
|
||||
%Docstring
|
||||
:rtype: QgsAbstractGeometry
|
||||
%End
|
||||
virtual bool centroid( QgsPoint &pt, QString *errorMsg = 0 ) const = 0;
|
||||
|
||||
virtual QgsPoint *centroid( QString *errorMsg = 0 ) const = 0 /Factory/;
|
||||
%Docstring
|
||||
:rtype: bool
|
||||
Calculates the centroid of this.
|
||||
May return a `None`.
|
||||
|
||||
.. versionadded:: 3.0
|
||||
:rtype: QgsPoint
|
||||
%End
|
||||
virtual bool pointOnSurface( QgsPoint &pt, QString *errorMsg = 0 ) const = 0;
|
||||
|
||||
virtual QgsPoint *pointOnSurface( QString *errorMsg = 0 ) const = 0 /Factory/;
|
||||
%Docstring
|
||||
:rtype: bool
|
||||
Calculate a point that is guaranteed to be on the surface of this.
|
||||
May return a `None`.
|
||||
|
||||
.. versionadded:: 3.0
|
||||
:rtype: QgsPoint
|
||||
%End
|
||||
|
||||
virtual QgsAbstractGeometry *convexHull( QString *errorMsg = 0 ) const = 0 /Factory/;
|
||||
%Docstring
|
||||
Calculate the convex hull of this.
|
||||
:rtype: QgsAbstractGeometry
|
||||
%End
|
||||
|
||||
|
@ -1581,16 +1581,8 @@ QgsGeometry QgsGeometry::centroid() const
|
||||
}
|
||||
|
||||
QgsGeos geos( d->geometry );
|
||||
std::unique_ptr<QgsPoint> centroid( new QgsPoint() );
|
||||
QString error;
|
||||
bool ok = geos.centroid( *centroid.get(), &error );
|
||||
if ( !ok )
|
||||
{
|
||||
QgsGeometry geom;
|
||||
geom.d->error = error;
|
||||
return geom;
|
||||
}
|
||||
return QgsGeometry( centroid.release() );
|
||||
|
||||
return QgsGeometry( geos.centroid( &d->error ) );
|
||||
}
|
||||
|
||||
QgsGeometry QgsGeometry::pointOnSurface() const
|
||||
@ -1601,17 +1593,8 @@ QgsGeometry QgsGeometry::pointOnSurface() const
|
||||
}
|
||||
|
||||
QgsGeos geos( d->geometry );
|
||||
std::unique_ptr<QgsPoint>pt( new QgsPoint() );
|
||||
|
||||
QString error;
|
||||
bool ok = geos.pointOnSurface( *pt.get(), &error );
|
||||
if ( !ok )
|
||||
{
|
||||
QgsGeometry geom;
|
||||
geom.d->error = error;
|
||||
return geom;
|
||||
}
|
||||
return QgsGeometry( pt.release() );
|
||||
return QgsGeometry( geos.pointOnSurface( &d->error ) );
|
||||
}
|
||||
|
||||
QgsGeometry QgsGeometry::poleOfInaccessibility( double precision, double *distanceToBoundary ) const
|
||||
|
@ -75,8 +75,26 @@ class CORE_EXPORT QgsGeometryEngine
|
||||
virtual QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
virtual QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
virtual QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
virtual bool centroid( QgsPoint &pt, QString *errorMsg = nullptr ) const = 0;
|
||||
virtual bool pointOnSurface( QgsPoint &pt, QString *errorMsg = nullptr ) const = 0;
|
||||
|
||||
/**
|
||||
* Calculates the centroid of this.
|
||||
* May return a `nullptr`.
|
||||
*
|
||||
* \since QGIS 3.0 the centroid is returned
|
||||
*/
|
||||
virtual QgsPoint *centroid( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
|
||||
/**
|
||||
* Calculate a point that is guaranteed to be on the surface of this.
|
||||
* May return a `nullptr`.
|
||||
*
|
||||
* \since QGIS 3.0 the centroid is returned
|
||||
*/
|
||||
virtual QgsPoint *pointOnSurface( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
|
||||
/**
|
||||
* Calculate the convex hull of this.
|
||||
*/
|
||||
virtual QgsAbstractGeometry *convexHull( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
|
||||
|
||||
/**
|
||||
|
@ -1503,36 +1503,30 @@ QgsAbstractGeometry *QgsGeos::interpolate( double distance, QString *errorMsg )
|
||||
return fromGeos( geos.get() );
|
||||
}
|
||||
|
||||
bool QgsGeos::centroid( QgsPoint &pt, QString *errorMsg ) const
|
||||
QgsPoint *QgsGeos::centroid( QString *errorMsg ) const
|
||||
{
|
||||
if ( !mGeos )
|
||||
{
|
||||
return false;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
GEOSGeomScopedPtr geos;
|
||||
double x;
|
||||
double y;
|
||||
|
||||
try
|
||||
{
|
||||
geos.reset( GEOSGetCentroid_r( geosinit.ctxt, mGeos ) );
|
||||
}
|
||||
CATCH_GEOS_WITH_ERRMSG( false );
|
||||
|
||||
if ( !geos )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
try
|
||||
{
|
||||
double x, y;
|
||||
GEOSGeomGetX_r( geosinit.ctxt, geos.get(), &x );
|
||||
GEOSGeomGetY_r( geosinit.ctxt, geos.get(), &y );
|
||||
pt.setX( x );
|
||||
pt.setY( y );
|
||||
}
|
||||
CATCH_GEOS_WITH_ERRMSG( false );
|
||||
CATCH_GEOS_WITH_ERRMSG( nullptr );
|
||||
|
||||
return true;
|
||||
return new QgsPoint( x, y );
|
||||
}
|
||||
|
||||
QgsAbstractGeometry *QgsGeos::envelope( QString *errorMsg ) const
|
||||
@ -1550,13 +1544,16 @@ QgsAbstractGeometry *QgsGeos::envelope( QString *errorMsg ) const
|
||||
return fromGeos( geos.get() );
|
||||
}
|
||||
|
||||
bool QgsGeos::pointOnSurface( QgsPoint &pt, QString *errorMsg ) const
|
||||
QgsPoint *QgsGeos::pointOnSurface( QString *errorMsg ) const
|
||||
{
|
||||
if ( !mGeos )
|
||||
{
|
||||
return false;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
double x;
|
||||
double y;
|
||||
|
||||
GEOSGeomScopedPtr geos;
|
||||
try
|
||||
{
|
||||
@ -1564,19 +1561,15 @@ bool QgsGeos::pointOnSurface( QgsPoint &pt, QString *errorMsg ) const
|
||||
|
||||
if ( !geos || GEOSisEmpty_r( geosinit.ctxt, geos.get() ) != 0 )
|
||||
{
|
||||
return false;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
double x, y;
|
||||
GEOSGeomGetX_r( geosinit.ctxt, geos.get(), &x );
|
||||
GEOSGeomGetY_r( geosinit.ctxt, geos.get(), &y );
|
||||
|
||||
pt.setX( x );
|
||||
pt.setY( y );
|
||||
}
|
||||
CATCH_GEOS_WITH_ERRMSG( false );
|
||||
CATCH_GEOS_WITH_ERRMSG( nullptr );
|
||||
|
||||
return true;
|
||||
return new QgsPoint( x, y );
|
||||
}
|
||||
|
||||
QgsAbstractGeometry *QgsGeos::convexHull( QString *errorMsg ) const
|
||||
|
@ -79,8 +79,8 @@ class CORE_EXPORT QgsGeos: public QgsGeometryEngine
|
||||
QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const override;
|
||||
QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const override;
|
||||
QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const override;
|
||||
bool centroid( QgsPoint &pt, QString *errorMsg = nullptr ) const override;
|
||||
bool pointOnSurface( QgsPoint &pt, QString *errorMsg = nullptr ) const override;
|
||||
QgsPoint *centroid( QString *errorMsg = nullptr ) const override;
|
||||
QgsPoint *pointOnSurface( QString *errorMsg = nullptr ) const override;
|
||||
QgsAbstractGeometry *convexHull( QString *errorMsg = nullptr ) const override;
|
||||
double distance( const QgsAbstractGeometry *geom, QString *errorMsg = nullptr ) const override;
|
||||
bool intersects( const QgsAbstractGeometry *geom, QString *errorMsg = nullptr ) const override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user