diff --git a/src/map/mapsforge/mapdata.cpp b/src/map/mapsforge/mapdata.cpp index 6be62e12..911ff697 100644 --- a/src/map/mapsforge/mapdata.cpp +++ b/src/map/mapsforge/mapdata.cpp @@ -41,11 +41,9 @@ static double distance(const Coordinates &c1, const Coordinates &c2) return hypot(c1.lon() - c2.lon(), c1.lat() - c2.lat()); } -static bool isClosed(const Polygon &poly) +static bool isClosed(const QVector &poly) { - if (poly.isEmpty() || poly.first().isEmpty()) - return false; - return (distance(poly.first().first(), poly.first().last()) < 0.000000001); + return (distance(poly.first(), poly.last()) < 0.000000001); } static bool readSingleDelta(SubFile &subfile, const Coordinates &c, @@ -622,20 +620,20 @@ bool MapData::readPaths(const VectorTile *tile, int zoom, QList *list) return false; } if (flags & 0x08) { - if (!subfile.readVUInt32(blocks)) + if (!subfile.readVUInt32(blocks) || !blocks) return false; } else blocks = 1; - Q_ASSERT(blocks); for (unsigned j = 0; j < blocks; j++) { if (!readPolygonPath(subfile, tile->pos, flags & 0x04, p.poly)) return false; } - p.closed = isClosed(p.poly); + const QVector &outline = p.poly.first(); + p.closed = isClosed(outline); if (flags & 0x10) - p.labelPos = Coordinates(p.poly.first().first().lon() + MD(lon), - p.poly.first().first().lat() + MD(lat)); + p.labelPos = Coordinates(outline.first().lon() + MD(lon), + outline.first().lat() + MD(lat)); list->append(p); } diff --git a/src/map/mapsforge/rastertile.h b/src/map/mapsforge/rastertile.h index d5f41646..22308c29 100644 --- a/src/map/mapsforge/rastertile.h +++ b/src/map/mapsforge/rastertile.h @@ -62,13 +62,12 @@ private: class RenderInstruction { public: - RenderInstruction() : _pathRender(0), _circleRender(0), _path(0), - _point(0) {} + RenderInstruction() : _render(0), _path(0), _point(0) {} RenderInstruction(const Style::PathRender *render, PainterPath *path) - : _pathRender(render), _circleRender(0), _path(path), _point(0) {} + : _render(render), _path(path), _point(0) {} RenderInstruction(const Style::CircleRender *render, - const MapData::Point *point) : _pathRender(0), _circleRender(render), - _path(0), _point(point) {} + const MapData::Point *point) : _render(render), _path(0), + _point(point) {} bool operator<(const RenderInstruction &other) const { @@ -78,8 +77,10 @@ private: return (layer() < other.layer()); } - const Style::PathRender *pathRender() const {return _pathRender;} - const Style::CircleRender *circleRender() const {return _circleRender;} + const Style::PathRender *pathRender() const + {return static_cast(_render);} + const Style::CircleRender *circleRender() const + {return static_cast(_render);} PainterPath *path() const {return _path;} const MapData::Point *point() const {return _point;} @@ -87,11 +88,12 @@ private: int layer() const {return _path ? _path->path->layer : _point->layer;} int zOrder() const { - return _pathRender ? _pathRender->zOrder() : _circleRender->zOrder(); + return _path + ? static_cast(_render)->zOrder() + : static_cast(_render)->zOrder(); } - const Style::PathRender *_pathRender; - const Style::CircleRender *_circleRender; + const Style::Render *_render; PainterPath *_path; const MapData::Point *_point; };