diff --git a/deps/agg/include/agg_conv_adaptor_vcgen.h b/deps/agg/include/agg_conv_adaptor_vcgen.h index a79f2208c..ddbcef738 100644 --- a/deps/agg/include/agg_conv_adaptor_vcgen.h +++ b/deps/agg/include/agg_conv_adaptor_vcgen.h @@ -29,6 +29,7 @@ namespace agg void rewind(unsigned) {} unsigned vertex(double*, double*) { return path_cmd_stop; } + unsigned type() const { return 0; } }; @@ -64,6 +65,7 @@ namespace agg } unsigned vertex(double* x, double* y); + unsigned type() const { return m_source->type(); } private: // Prohibit copying diff --git a/deps/agg/include/agg_conv_adaptor_vpgen.h b/deps/agg/include/agg_conv_adaptor_vpgen.h index d6b545ef1..ae8d59320 100644 --- a/deps/agg/include/agg_conv_adaptor_vpgen.h +++ b/deps/agg/include/agg_conv_adaptor_vpgen.h @@ -33,6 +33,7 @@ namespace agg void rewind(unsigned path_id); unsigned vertex(double* x, double* y); + unsigned type() const { return m_source->type(); } private: conv_adaptor_vpgen(const conv_adaptor_vpgen&); diff --git a/deps/agg/include/agg_conv_clip_polygon.h b/deps/agg/include/agg_conv_clip_polygon.h index 87537638d..79aceedf3 100644 --- a/deps/agg/include/agg_conv_clip_polygon.h +++ b/deps/agg/include/agg_conv_clip_polygon.h @@ -51,6 +51,7 @@ namespace agg double y1() const { return base_type::vpgen().y1(); } double x2() const { return base_type::vpgen().x2(); } double y2() const { return base_type::vpgen().y2(); } + unsigned type() const { return base_type::type(); } private: conv_clip_polygon(const conv_clip_polygon&); diff --git a/deps/agg/include/agg_conv_clip_polyline.h b/deps/agg/include/agg_conv_clip_polyline.h index f3fc2888c..8bad5964f 100644 --- a/deps/agg/include/agg_conv_clip_polyline.h +++ b/deps/agg/include/agg_conv_clip_polyline.h @@ -51,6 +51,7 @@ namespace agg double y1() const { return base_type::vpgen().y1(); } double x2() const { return base_type::vpgen().x2(); } double y2() const { return base_type::vpgen().y2(); } + unsigned type() const { return base_type::type(); } private: conv_clip_polyline(const conv_clip_polyline&); diff --git a/deps/agg/include/agg_conv_smooth_poly1.h b/deps/agg/include/agg_conv_smooth_poly1.h index 4ac4e3d6e..00ab6b6af 100644 --- a/deps/agg/include/agg_conv_smooth_poly1.h +++ b/deps/agg/include/agg_conv_smooth_poly1.h @@ -42,6 +42,7 @@ namespace agg void smooth_value(double v) { base_type::generator().smooth_value(v); } double smooth_value() const { return base_type::generator().smooth_value(); } + unsigned type() const { return base_type::type(); } private: conv_smooth_poly1(const conv_smooth_poly1&); @@ -64,6 +65,7 @@ namespace agg void smooth_value(double v) { m_smooth.generator().smooth_value(v); } double smooth_value() const { return m_smooth.generator().smooth_value(); } + unsigned type() const { return m_smooth.type(); } private: conv_smooth_poly1_curve(const conv_smooth_poly1_curve&); diff --git a/include/mapnik/ctrans.hpp b/include/mapnik/ctrans.hpp index a56bc4bc4..07fbc9c3b 100644 --- a/include/mapnik/ctrans.hpp +++ b/include/mapnik/ctrans.hpp @@ -81,6 +81,11 @@ struct MAPNIK_DECL coord_transform geom_.rewind(pos); } + unsigned type() const + { + return static_cast(geom_.type()); + } + Geometry const& geom() const { return geom_; diff --git a/include/mapnik/marker_helpers.hpp b/include/mapnik/marker_helpers.hpp index fd1a923d8..594617702 100644 --- a/include/mapnik/marker_helpers.hpp +++ b/include/mapnik/marker_helpers.hpp @@ -91,7 +91,12 @@ struct vector_markers_rasterizer_dispatch { double x = 0; double y = 0; - if (placement_method == MARKER_INTERIOR_PLACEMENT) + if (path.type() == LineString) + { + if (!label::middle_point(path, x, y)) + return; + } + else if (placement_method == MARKER_INTERIOR_PLACEMENT) { if (!label::interior_position(path, x, y)) return; @@ -187,7 +192,12 @@ struct raster_markers_rasterizer_dispatch { double x = 0; double y = 0; - if (placement_method == MARKER_INTERIOR_PLACEMENT) + if (path.type() == LineString) + { + if (!label::middle_point(path, x, y)) + return; + } + else if (placement_method == MARKER_INTERIOR_PLACEMENT) { if (!label::interior_position(path, x, y)) return;