API cleanups for qgsgeometry

git-svn-id: http://svn.osgeo.org/qgis/trunk@9515 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
timlinux 2008-10-22 07:31:05 +00:00
parent 7c54dc07e2
commit 394993ea8f
13 changed files with 46 additions and 43 deletions

View File

@ -59,25 +59,25 @@ class QgsGeometry
Set the geometry, feeding in the buffer containing OGC Well-Known Binary and the buffer's length.
This class will take ownership of the buffer.
*/
void setWkbAndOwnership(unsigned char * wkb /Array/, size_t length /ArraySize/);
void fromWkb(unsigned char * wkb /Array/, size_t length /ArraySize/);
%MethodCode
// create copy of Python's string and pass it to setWkbAndOwnership()
// create copy of Python's string and pass it to fromWkb()
unsigned char * copy = new unsigned char[a1];
memcpy(copy, a0, a1);
sipCpp->setWkbAndOwnership(copy, a1);
sipCpp->fromWkb(copy, a1);
%End
/**
Returns the buffer containing this geometry in WKB format.
You may wish to use in conjunction with wkbSize().
*/
SIP_PYOBJECT wkbBuffer();
SIP_PYOBJECT asWkb();
%MethodCode
sipRes = PyString_FromStringAndSize((const char *)sipCpp->wkbBuffer(), sipCpp->wkbSize());
sipRes = PyString_FromStringAndSize((const char *)sipCpp->asWkb(), sipCpp->wkbSize());
%End
/**
Returns the size of the WKB in wkbBuffer().
Returns the size of the WKB in asWkb().
*/
size_t wkbSize();
@ -94,7 +94,7 @@ class QgsGeometry
Set the geometry, feeding in a geometry in GEOS format.
*/
// TODO: unsupported class... would be possible to use PyGEOS?
//void setGeos(geos::Geometry* geos);
//void fromGeos(geos::Geometry* geos);
double distance(QgsGeometry& geom);
@ -116,7 +116,7 @@ class QgsGeometry
account the first vertex is equal to the last vertex (and will
skip equal vertex positions).
*/
void adjacentVerticies(int atVertex, int& beforeVertex /Out/, int& afterVertex /Out/);
void adjacentVertices(int atVertex, int& beforeVertex /Out/, int& afterVertex /Out/);
/** Insert a new vertex before the given vertex index,
* ring and item (first number is index 0)

View File

@ -176,7 +176,7 @@ bool QgsDistanceArea::setEllipsoid( const QString& ellipsoid )
double QgsDistanceArea::measure( QgsGeometry* geometry )
{
unsigned char* wkb = geometry->wkbBuffer();
unsigned char* wkb = geometry->asWkb();
unsigned char* ptr;
unsigned int wkbType;
double res, resTotal = 0;

View File

@ -184,7 +184,7 @@ void QgsFeature::setGeometry( QgsGeometry* geom )
void QgsFeature::setGeometryAndOwnership( unsigned char *geom, size_t length )
{
QgsGeometry *g = new QgsGeometry();
g->setWkbAndOwnership( geom, length );
g->fromWkb( geom, length );
setGeometry( g );
}

View File

@ -392,7 +392,7 @@ static QgsGeometry *fromGeosGeom( GEOSGeometry *geom )
return 0;
QgsGeometry* g = new QgsGeometry;
g->setGeos( geom );
g->fromGeos( geom );
return g;
}
@ -538,7 +538,7 @@ QgsGeometry & QgsGeometry::operator=( QgsGeometry const & rhs )
} // QgsGeometry::operator=( QgsGeometry const & rhs )
void QgsGeometry::setWkbAndOwnership( unsigned char * wkb, size_t length )
void QgsGeometry::fromWkb( unsigned char * wkb, size_t length )
{
// delete any existing WKB geometry before assigning new one
if ( mGeometry )
@ -559,7 +559,7 @@ void QgsGeometry::setWkbAndOwnership( unsigned char * wkb, size_t length )
mDirtyGeos = TRUE;
}
unsigned char * QgsGeometry::wkbBuffer()
unsigned char * QgsGeometry::asWkb()
{
if ( mDirtyWkb )
{
@ -583,7 +583,7 @@ size_t QgsGeometry::wkbSize()
QGis::WkbType QgsGeometry::wkbType()
{
unsigned char *geom = wkbBuffer(); // ensure that wkb representation exists
unsigned char *geom = asWkb(); // ensure that wkb representation exists
if ( geom )
{
unsigned int wkbType;
@ -640,7 +640,7 @@ bool QgsGeometry::isMultipart()
}
void QgsGeometry::setGeos( GEOSGeometry* geos )
void QgsGeometry::fromGeos( GEOSGeometry* geos )
{
// TODO - make this more heap-friendly
@ -939,7 +939,7 @@ QgsPoint QgsGeometry::closestVertex( const QgsPoint& point, int& atVertex, int&
}
void QgsGeometry::adjacentVerticies( int atVertex, int& beforeVertex, int& afterVertex )
void QgsGeometry::adjacentVertices( int atVertex, int& beforeVertex, int& afterVertex )
{
// TODO: implement with GEOS
if ( mDirtyWkb )

View File

@ -96,15 +96,25 @@ class CORE_EXPORT QgsGeometry
static QgsGeometry* fromMultiPolygon( const QgsMultiPolygon& multipoly );
/** construct geometry from a rectangle */
static QgsGeometry* fromRect( const QgsRect& rect );
/**
Set the geometry, feeding in a geometry in GEOS format.
This class will take ownership of the buffer.
*/
void fromGeos( GEOSGeometry* geos );
/**
Set the geometry, feeding in the buffer containing OGC Well-Known Binary and the buffer's length.
This class will take ownership of the buffer.
*/
void fromWkb( unsigned char * wkb, size_t length );
/**
Returns the buffer containing this geometry in WKB format.
You may wish to use in conjunction with wkbSize().
*/
unsigned char * wkbBuffer();
unsigned char * asWkb();
/**
Returns the size of the WKB in wkbBuffer().
Returns the size of the WKB in asWkb().
*/
size_t wkbSize();
@ -117,17 +127,7 @@ class CORE_EXPORT QgsGeometry
/** Returns true if wkb of the geometry is of WKBMulti* type */
bool isMultipart();
/**
Set the geometry, feeding in a geometry in GEOS format.
This class will take ownership of the buffer.
*/
void setGeos( GEOSGeometry* geos );
/**
Set the geometry, feeding in the buffer containing OGC Well-Known Binary and the buffer's length.
This class will take ownership of the buffer.
*/
void setWkbAndOwnership( unsigned char * wkb, size_t length );
double distance( QgsGeometry& geom );
@ -151,7 +151,7 @@ class CORE_EXPORT QgsGeometry
account the first vertex is equal to the last vertex (and will
skip equal vertex positions).
*/
void adjacentVerticies( int atVertex, int& beforeVertex, int& afterVertex );
void adjacentVertices( int atVertex, int& beforeVertex, int& afterVertex );
/** Insert a new vertex before the given vertex index,
@ -245,7 +245,10 @@ class CORE_EXPORT QgsGeometry
@param topological true if topological editing is enabled
@topologyTestPoints OUT: points that need to be tested for topological completeness in the dataset
@return 0 in case of success, 1 if geometry has not been split, error else*/
int splitGeometry( const QList<QgsPoint>& splitLine, QList<QgsGeometry*>& newGeometries, bool topological, QList<QgsPoint>& topologyTestPoints );
int splitGeometry( const QList<QgsPoint>& splitLine,
QList<QgsGeometry*>&newGeometries,
bool topological,
QList<QgsPoint>& topologyTestPoints );
/**Changes this geometry such that it does not intersect the other geometry
@param other geometry that should not be intersect

View File

@ -507,7 +507,7 @@ QgsLabelAttributes *QgsLabel::layerAttributes( void )
void QgsLabel::labelPoint( std::vector<QgsPoint>& points, QgsFeature & feature )
{
QgsGeometry *geometry = feature.geometry();
unsigned char *geom = geometry->wkbBuffer();
unsigned char *geom = geometry->asWkb();
size_t geomlen = geometry->wkbSize();
QGis::WkbType wkbType = geometry->wkbType();
QgsPoint point;

View File

@ -236,7 +236,7 @@ bool QgsVectorFileWriter::addFeature( QgsFeature& feature )
OGRGeometryH mGeom2 = createEmptyGeometry( geom->wkbType() );
OGRErr err = OGR_G_ImportFromWkb( mGeom2, geom->wkbBuffer(), geom->wkbSize() );
OGRErr err = OGR_G_ImportFromWkb( mGeom2, geom->asWkb(), geom->wkbSize() );
if ( err != OGRERR_NONE )
{
QgsDebugMsg( "Failed to import geometry from WKB: " + QString::number( err ) );
@ -249,7 +249,7 @@ bool QgsVectorFileWriter::addFeature( QgsFeature& feature )
}
else
{
OGRErr err = OGR_G_ImportFromWkb( mGeom, geom->wkbBuffer(), geom->wkbSize() );
OGRErr err = OGR_G_ImportFromWkb( mGeom, geom->asWkb(), geom->wkbSize() );
if ( err != OGRERR_NONE )
{
QgsDebugMsg( "Failed to import geometry from WKB: " + QString::number( err ) );

View File

@ -3301,7 +3301,7 @@ void QgsVectorLayer::drawFeature( QPainter* p,
#endif
QgsGeometry* geom = fet.geometry();
unsigned char* feature = geom->wkbBuffer();
unsigned char* feature = geom->asWkb();
QGis::WkbType wkbType = geom->wkbType();

View File

@ -107,7 +107,7 @@ int QgsInterpolator::addVerticesToCache( QgsGeometry* geom, double attributeValu
}
bool hasZValue = false;
unsigned char* currentWkbPtr = geom->wkbBuffer();
unsigned char* currentWkbPtr = geom->asWkb();
vertexData theVertex; //the current vertex
QGis::WkbType wkbType = geom->wkbType();

View File

@ -229,7 +229,7 @@ bool QgsGPXProvider::nextFeature( QgsFeature& feature )
//create QgsGeometry and use it for intersection test
//if geometry is to be fetched, it is attached to the feature, otherwise we delete it
QgsGeometry* theGeometry = new QgsGeometry();
theGeometry->setWkbAndOwnership(( unsigned char * )geo, 9 + 16 * nPoints );
theGeometry->fromWkb(( unsigned char * )geo, 9 + 16 * nPoints );
bool intersection = theGeometry->intersects( b );//use geos for precise intersection test
if ( !intersection )
@ -344,7 +344,7 @@ bool QgsGPXProvider::nextFeature( QgsFeature& feature )
//create QgsGeometry and use it for intersection test
//if geometry is to be fetched, it is attached to the feature, otherwise we delete it
QgsGeometry* theGeometry = new QgsGeometry();
theGeometry->setWkbAndOwnership(( unsigned char * )geo, 9 + 16 * totalPoints );
theGeometry->fromWkb(( unsigned char * )geo, 9 + 16 * totalPoints );
bool intersection = theGeometry->intersects( b );//use geos for precise intersection test
if ( !intersection ) //no intersection, delete geometry and move on
@ -522,7 +522,7 @@ bool QgsGPXProvider::addFeatures( QgsFeatureList & flist )
bool QgsGPXProvider::addFeature( QgsFeature& f )
{
unsigned char* geo = f.geometry()->wkbBuffer();
unsigned char* geo = f.geometry()->asWkb();
QGis::WkbType wkbType = f.geometry()->wkbType();
bool success = false;
GPSObject* obj = NULL;

View File

@ -477,7 +477,7 @@ bool QgsOgrProvider::addFeature( QgsFeature& f )
bool returnValue = true;
OGRFeatureDefnH fdef = OGR_L_GetLayerDefn( ogrLayer );
OGRFeatureH feature = OGR_F_Create( fdef );
unsigned char* wkb = f.geometry()->wkbBuffer();
unsigned char* wkb = f.geometry()->asWkb();
if ( f.geometry()->wkbSize() > 0 )
{
@ -688,7 +688,7 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
}
//create an OGRGeometry
if ( OGR_G_CreateFromWkb( it->wkbBuffer(),
if ( OGR_G_CreateFromWkb( it->asWkb(),
OGR_L_GetSpatialRef( ogrLayer ),
&theNewGeometry,
it->wkbSize() ) != OGRERR_NONE )

View File

@ -2075,7 +2075,7 @@ bool QgsPostgresProvider::changeAttributeValues( const QgsChangedAttributesMap &
void QgsPostgresProvider::appendGeomString( QgsGeometry *geom, QString &geomString ) const
{
unsigned char *buf = geom->wkbBuffer();
unsigned char *buf = geom->asWkb();
for ( uint i = 0; i < geom->wkbSize(); ++i )
{
if ( connectionRW->useWkbHex() )
@ -2118,7 +2118,7 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
QgsDebugMsg( "iterating over the map of changed geometries..." );
if ( iter->wkbBuffer() )
if ( iter->asWkb() )
{
QgsDebugMsg( "iterating over feature id " + QString::number( iter.key() ) );

View File

@ -76,7 +76,7 @@ bool QgsWFSProvider::nextFeature( QgsFeature& feature )
//we need geometry anyway, e.g. for intersection tests
QgsGeometry* geometry = mFeatures[*mFeatureIterator]->geometry();
unsigned char *geom = geometry->wkbBuffer();
unsigned char *geom = geometry->asWkb();
int geomSize = geometry->wkbSize();
unsigned char* copiedGeom = new unsigned char[geomSize];
memcpy( copiedGeom, geom, geomSize );