104 void regenerateCache()
106 if (!m_poly.map() || m_poly.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
108 const QGeoProjectionWebMercator &p =
static_cast<
const QGeoProjectionWebMercator&>(m_poly.map()->geoProjection());
109 m_geopathProjected.clear();
110 m_geopathProjected << QList<QDoubleVector2D>();
111 QList<QDoubleVector2D> &pP = m_geopathProjected.last();
112 if (m_poly.referenceSurface() == QLocation::ReferenceSurface::Globe) {
113 const QList<QGeoCoordinate> realPath = QDeclarativeGeoMapItemUtils::greaterCirclePath(m_poly.m_geopoly.perimeter(),
114 QDeclarativeGeoMapItemUtils::ClosedPath);
115 pP.reserve(realPath.size());
116 for (
const QGeoCoordinate &c : realPath)
117 pP << p.geoToMapProjection(c);
119 pP.reserve(m_poly.m_geopoly.perimeter().size());
120 const QList<QGeoCoordinate> perimeter = m_poly.m_geopoly.perimeter();
121 for (
const QGeoCoordinate &c : perimeter)
122 pP << p.geoToMapProjection(c);
124 for (
int i = 0; i < m_poly.m_geopoly.holesCount(); i++) {
125 m_geopathProjected << QList<QDoubleVector2D>();
126 QList<QDoubleVector2D> &pH = m_geopathProjected.last();
127 if (m_poly.referenceSurface() == QLocation::ReferenceSurface::Globe) {
128 const QList<QGeoCoordinate> realPath = QDeclarativeGeoMapItemUtils::greaterCirclePath(m_poly.m_geopoly.holePath(i),
129 QDeclarativeGeoMapItemUtils::ClosedPath);
130 pH.reserve(realPath.size());
131 for (
const QGeoCoordinate &c : realPath)
132 pH << p.geoToMapProjection(c);
134 pH.reserve(m_poly.m_geopoly.holePath(i).size());
135 const QList<QGeoCoordinate> holePath = m_poly.m_geopoly.holePath(i);
136 for (
const QGeoCoordinate &c : holePath)
137 pH << p.geoToMapProjection(c);
143 if (!m_poly.map() || m_poly.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
145 const QGeoProjectionWebMercator &p =
static_cast<
const QGeoProjectionWebMercator&>(m_poly.map()->geoProjection());
146 QList<QDoubleVector2D> &pP = m_geopathProjected.first();
147 if (m_poly.referenceSurface() == QLocation::ReferenceSurface::Globe && m_poly.m_geopoly.perimeter().size() > 1) {
150 pP << p.geoToMapProjection(m_poly.m_geopoly.perimeter().last());