| 122 | } |
| 123 | |
| 124 | std::vector<FixedLine> coordinatesToTileLine(const std::vector<util::Coordinate> &points, |
| 125 | const BBox &tile_bbox) |
| 126 | { |
| 127 | FloatLine geo_line; |
| 128 | for (auto const &c : points) |
| 129 | { |
| 130 | geo_line.emplace_back(static_cast<double>(util::toFloating(c.lon)), |
| 131 | static_cast<double>(util::toFloating(c.lat))); |
| 132 | } |
| 133 | |
| 134 | linestring_t unclipped_line = floatLineToTileLine(geo_line, tile_bbox); |
| 135 | |
| 136 | multi_linestring_t clipped_line; |
| 137 | boost::geometry::intersection(clip_box, unclipped_line, clipped_line); |
| 138 | |
| 139 | std::vector<FixedLine> result; |
| 140 | |
| 141 | // b::g::intersection might return a line with one point if the |
| 142 | // original line was very short and coords were dupes |
| 143 | for (auto const &cl : clipped_line) |
| 144 | { |
| 145 | if (cl.size() < 2) |
| 146 | continue; |
| 147 | |
| 148 | FixedLine tile_line; |
| 149 | for (const auto &p : cl) |
| 150 | tile_line.emplace_back(p.get<0>(), p.get<1>()); |
| 151 | |
| 152 | result.emplace_back(std::move(tile_line)); |
| 153 | } |
| 154 | |
| 155 | return result; |
| 156 | } |
| 157 | |
| 158 | /** |
| 159 | * Return the x1,y1,x2,y2 pixel coordinates of a line in a given |
no test coverage detected