From 8f8903baa58041b216f7436d852d2566d1f7ca17 Mon Sep 17 00:00:00 2001 From: Hermann Kraus Date: Sat, 31 Jul 2010 10:20:56 +0000 Subject: [PATCH] Bugfix + better performance. --- include/mapnik/metawriter.hpp | 1 + include/mapnik/symbolizer.hpp | 4 +++- src/metawriter.cpp | 13 +------------ src/symbolizer.cpp | 9 ++++++++- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/include/mapnik/metawriter.hpp b/include/mapnik/metawriter.hpp index 6dc2c18ee..ed1d3a520 100644 --- a/include/mapnik/metawriter.hpp +++ b/include/mapnik/metawriter.hpp @@ -81,6 +81,7 @@ class metawriter metawriter_properties const& properties = metawriter_properties())=0; virtual void start(metawriter_property_map const& properties) {}; virtual void stop() {}; + metawriter_properties const& get_default_properties() const { return dflt_properties_;} protected: metawriter_properties dflt_properties_; }; diff --git a/include/mapnik/symbolizer.hpp b/include/mapnik/symbolizer.hpp index 7fcc609b3..6838e5e25 100644 --- a/include/mapnik/symbolizer.hpp +++ b/include/mapnik/symbolizer.hpp @@ -59,11 +59,13 @@ class MAPNIK_DECL symbolizer_base { /** Get properties needed for metawriter. * \note This function is a helperfunction for class attribute_collector. */ - metawriter_properties const& get_metawriter_properties() const { return properties_;} + metawriter_properties const& get_metawriter_properties() const {return properties_complete_;}; private: metawriter_properties properties_; + metawriter_properties properties_complete_; std::string writer_name_; metawriter_ptr writer_ptr_; + }; typedef boost::array transform_type; diff --git a/src/metawriter.cpp b/src/metawriter.cpp index 8aad370ca..9765051d8 100644 --- a/src/metawriter.cpp +++ b/src/metawriter.cpp @@ -83,18 +83,7 @@ void metawriter_json_stream::add_box(box2d box, Feature const &feature, proj_transform const& prj_trans, CoordTransform const &t, const metawriter_properties& properties) { - metawriter_properties props(properties); - if (props.empty()) - { - props = dflt_properties_; - } - #ifdef MAPNIK_DEBUG - if (props.empty()) - { - std::cerr << "WARNING: No properties available for GeoJSON metawriter.\n"; - } - if (count < 0) { std::cerr << "WARNING: Metawriter not started before using it.\n"; @@ -134,7 +123,7 @@ void metawriter_json_stream::add_box(box2d box, Feature const &feature, "\n \"properties\": {"; std::map fprops = feature.props(); int i = 0; - BOOST_FOREACH(std::string p, props) + BOOST_FOREACH(std::string p, properties) { std::map::const_iterator itr = fprops.find(p); std::string text; diff --git a/src/symbolizer.cpp b/src/symbolizer.cpp index 2175fa491..3dc932084 100644 --- a/src/symbolizer.cpp +++ b/src/symbolizer.cpp @@ -36,11 +36,18 @@ void symbolizer_base::add_metawriter(std::string const& name, metawriter_propert void symbolizer_base::cache_metawriters(Map const &m) { writer_ptr_ = m.find_metawriter(writer_name_); + if (writer_ptr_) { + properties_complete_ = writer_ptr_->get_default_properties(); + properties_complete_.insert(properties_.begin(), properties_.end()); + } else { + properties_complete_.clear(); + std::cerr << "WARNING: Metawriter '" << writer_name_ << "' used but not defined.\n"; + } } metawriter_with_properties symbolizer_base::get_metawriter() const { - return metawriter_with_properties(writer_ptr_, properties_); + return metawriter_with_properties(writer_ptr_, properties_complete_); } symbolizer_with_image::symbolizer_with_image(path_expression_ptr file)