QGIS API Documentation  3.20.0-Odense (decaadbb31)
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 
16 #include "qgsvectortilemvtutils.h"
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  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  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:44
const double * yData() const
Returns a const pointer to the y vertex data.
int numPoints() const override SIP_HOLDGIL
Returns the number of points in the curve.
const double * xData() const
Returns a const pointer to the x vertex data.
static bool isExteriorRing(const QgsLineString *lineString)
Returns whether this linear ring forms an exterior ring according to MVT spec (depending on the orien...