Skip to content

Commit

Permalink
Speed up QgsLineString::closestSegment
Browse files Browse the repository at this point in the history
Avoid multiple detachment checks
  • Loading branch information
nyalldawson committed Jul 21, 2024
1 parent 5a3ef35 commit dd36e37
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions src/core/geometry/qgslinestring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1992,18 +1992,21 @@ double QgsLineString::closestSegment( const QgsPoint &pt, QgsPoint &segmentPt,
if ( leftOf )
*leftOf = 0;

int size = mX.size();
const int size = mX.size();
if ( size == 0 || size == 1 )
{
vertexAfter = QgsVertexId( 0, 0, 0 );
return -1;
}

const double *xData = mX.constData();
const double *yData = mY.constData();
for ( int i = 1; i < size; ++i )
{
double prevX = mX.at( i - 1 );
double prevY = mY.at( i - 1 );
double currentX = mX.at( i );
double currentY = mY.at( i );
double prevX = xData[ i - 1 ];
double prevY = yData[ i - 1 ];
double currentX = xData[ i ];
double currentY = yData[ i ];
testDist = QgsGeometryUtilsBase::sqrDistToLine( pt.x(), pt.y(), prevX, prevY, currentX, currentY, segmentPtX, segmentPtY, epsilon );
if ( testDist < sqrDist )
{
Expand Down

0 comments on commit dd36e37

Please sign in to comment.