diff --git a/src/output_object.cpp b/src/output_object.cpp index ad90e432..2e7669ea 100644 --- a/src/output_object.cpp +++ b/src/output_object.cpp @@ -80,8 +80,27 @@ Geometry buildWayGeometry(OSMStore &osmStore, OutputObject const &oo, const Tile case OutputGeometryType::LINESTRING: { + auto const &ls = osmStore.retrieve(oo.handle); + MultiLinestring out; - geom::intersection(osmStore.retrieve(oo.handle), bbox.clippingBox, out); + if(ls.empty()) + return out; + + Linestring current_ls; + geom::append(current_ls, ls[0]); + + for(size_t i = 1; i < ls.size(); ++i) { + if(!geom::intersects(Linestring({ ls[i-1], ls[i] }), bbox.clippingBox)) { + if(current_ls.size() > 1) + out.push_back(std::move(current_ls)); + current_ls.clear(); + } + geom::append(current_ls, ls[i]); + } + + if(current_ls.size() > 1) + out.push_back(std::move(current_ls)); + return out; }