QGIS API Documentation 3.29.0-Master (ade4f0cf0f)
qgsvectortilemvtutils.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectortilemvtutils.cpp
3 --------------------------------------
4 Date : April 2020
5 Copyright : (C) 2020 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgslinestring.h"
19
20
22{
23 // Exterior rings have POSITIVE area while interior rings have NEGATIVE area
24 // when calculated with https://en.wikipedia.org/wiki/Shoelace_formula
25 // The orientation of axes is that X grows to the right and Y grows to the bottom.
26 // the input data are expected to form a closed ring, i.e. first pt == last pt.
27
28 double total = 0.0;
29 const int count = lineString->numPoints();
30 const double *xData = lineString->xData();
31 const double *yData = lineString->yData();
32
33 for ( int i = 0; i < count - 1; i++ )
34 {
35 const double val = ( xData[i + 1] - xData[i] ) * ( yData[i + 1] + yData[i] );
36 //double val = xData[i] * (-yData[i+1]) - xData[i+1] * (-yData[i]); // gives the same result
37 total += val;
38 }
39 return total >= 0;
40}
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:45
const double * yData() const
Returns a const pointer to the y vertex data.
const double * xData() const
Returns a const pointer to the x vertex data.
int numPoints() const override SIP_HOLDGIL
Returns the number of points in the curve.
static bool isExteriorRing(const QgsLineString *lineString)
Returns whether this linear ring forms an exterior ring according to MVT spec (depending on the orien...