Add metawriter support to save_map.cpp
This commit is contained in:
parent
7dea58b625
commit
24fb874c7d
5 changed files with 70 additions and 8 deletions
|
@ -41,7 +41,7 @@
|
|||
|
||||
namespace mapnik {
|
||||
|
||||
class placement;
|
||||
struct placement;
|
||||
|
||||
/** Implementation of std::map that also returns const& for operator[]. */
|
||||
class metawriter_property_map
|
||||
|
@ -64,6 +64,7 @@ class metawriter_properties : public std::set<std::string>
|
|||
metawriter_properties() {};
|
||||
template <class InputIterator> metawriter_properties(
|
||||
InputIterator first, InputIterator last) : std::set<std::string>(first, last) {};
|
||||
std::string to_string() const;
|
||||
};
|
||||
|
||||
/** Abstract baseclass for all metawriter classes. */
|
||||
|
|
|
@ -56,10 +56,17 @@ class MAPNIK_DECL symbolizer_base {
|
|||
* This functions requires that cache_metawriters() was called first.
|
||||
*/
|
||||
metawriter_with_properties get_metawriter() const;
|
||||
/** Get properties needed for metawriter.
|
||||
/** Get metawriter properties.
|
||||
* This functions returns the default attributes of the
|
||||
* metawriter + symbolizer specific attributes.
|
||||
* \note This function is a helperfunction for class attribute_collector.
|
||||
*/
|
||||
metawriter_properties const& get_metawriter_properties() const {return properties_complete_;};
|
||||
metawriter_properties const& get_metawriter_properties() const {return properties_complete_;}
|
||||
/** Get metawriter properties which only apply to this symbolizer.
|
||||
*/
|
||||
metawriter_properties const& get_metawriter_properties_overrides() const {return properties_;}
|
||||
/** Get metawriter name. */
|
||||
std::string const& get_metawriter_name() const {return writer_name_;}
|
||||
private:
|
||||
metawriter_properties properties_;
|
||||
metawriter_properties properties_complete_;
|
||||
|
|
|
@ -1635,8 +1635,7 @@ void map_parser::parse_raster_symbolizer( rule_type & rule, ptree const & sym )
|
|||
"Expected 'RasterColorizer' but got '" + css_tag.first + "'");
|
||||
}
|
||||
}
|
||||
|
||||
parse_metawriter_in_symbolizer(raster_sym, sym);
|
||||
//Note: raster_symbolizer doesn't support metawriters
|
||||
rule.append(raster_sym);
|
||||
}
|
||||
catch (const config_error & ex)
|
||||
|
|
|
@ -50,6 +50,11 @@ metawriter_properties::metawriter_properties(boost::optional<std::string> str)
|
|||
}
|
||||
}
|
||||
|
||||
std::string metawriter_properties::to_string() const
|
||||
{
|
||||
return boost::algorithm::join(*this, ",");
|
||||
}
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
void metawriter_json_stream::start(metawriter_property_map const& properties)
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <mapnik/ptree_helpers.hpp>
|
||||
#include <mapnik/expression_string.hpp>
|
||||
#include <mapnik/raster_colorizer.hpp>
|
||||
#include <mapnik/metawriter_json.hpp>
|
||||
|
||||
// boost
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
@ -90,6 +91,7 @@ public:
|
|||
{
|
||||
set_attr( sym_node, "opacity", sym.get_opacity() );
|
||||
}
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const line_symbolizer & sym )
|
||||
|
@ -133,6 +135,7 @@ public:
|
|||
{
|
||||
set_attr( sym_node, "stroke-dashoffset", strk.dash_offset());
|
||||
}
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const line_pattern_symbolizer & sym )
|
||||
|
@ -142,6 +145,7 @@ public:
|
|||
ptree()))->second;
|
||||
|
||||
add_image_attributes( sym_node, sym );
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const polygon_symbolizer & sym )
|
||||
|
@ -162,6 +166,7 @@ public:
|
|||
{
|
||||
set_attr( sym_node, "gamma", sym.get_gamma() );
|
||||
}
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const polygon_pattern_symbolizer & sym )
|
||||
|
@ -177,6 +182,7 @@ public:
|
|||
}
|
||||
|
||||
add_image_attributes( sym_node, sym );
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const raster_symbolizer & sym )
|
||||
|
@ -204,7 +210,7 @@ public:
|
|||
serialize_raster_colorizer(sym_node, sym.get_colorizer(),
|
||||
explicit_defaults_);
|
||||
}
|
||||
|
||||
//Note: raster_symbolizer doesn't support metawriters
|
||||
}
|
||||
|
||||
void operator () ( const shield_symbolizer & sym )
|
||||
|
@ -215,6 +221,7 @@ public:
|
|||
|
||||
add_font_attributes( sym_node, sym);
|
||||
add_image_attributes( sym_node, sym);
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
|
||||
// pseudo-default-construct a shield_symbolizer. It is used
|
||||
// to avoid printing of attributes with default values without
|
||||
|
@ -242,7 +249,7 @@ public:
|
|||
ptree()))->second;
|
||||
|
||||
add_font_attributes( sym_node, sym);
|
||||
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( const building_symbolizer & sym )
|
||||
|
@ -263,6 +270,7 @@ public:
|
|||
{
|
||||
set_attr( sym_node, "height", sym.height() );
|
||||
}
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( markers_symbolizer const& sym)
|
||||
|
@ -290,6 +298,7 @@ public:
|
|||
{
|
||||
set_attr( sym_node, "fill", sym.get_fill() );
|
||||
}
|
||||
add_metawriter_attributes(sym_node, sym);
|
||||
}
|
||||
|
||||
void operator () ( glyph_symbolizer const& sym)
|
||||
|
@ -383,7 +392,7 @@ public:
|
|||
{
|
||||
set_attr( node, "angle_mode", sym.get_angle_mode() );
|
||||
}
|
||||
|
||||
add_metawriter_attributes(node, sym);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -511,6 +520,17 @@ private:
|
|||
set_attr( node, "justify_alignment", sym.get_justify_alignment() );
|
||||
}
|
||||
}
|
||||
|
||||
void add_metawriter_attributes(ptree &node, symbolizer_base const& sym)
|
||||
{
|
||||
if (!sym.get_metawriter_name().empty() || explicit_defaults_) {
|
||||
set_attr(node, "meta-writer", sym.get_metawriter_name());
|
||||
}
|
||||
if (!sym.get_metawriter_properties_overrides().empty() || explicit_defaults_) {
|
||||
set_attr(node, "meta-output", sym.get_metawriter_properties_overrides().to_string());
|
||||
}
|
||||
}
|
||||
|
||||
ptree & rule_;
|
||||
bool explicit_defaults_;
|
||||
};
|
||||
|
@ -692,6 +712,30 @@ void serialize_layer( ptree & map_node, const layer & layer, bool explicit_defau
|
|||
}
|
||||
}
|
||||
|
||||
void serialize_metawriter(ptree & map_node, Map::const_metawriter_iterator metawriter_it, bool explicit_defaults)
|
||||
{
|
||||
std::string const& name = metawriter_it->first;
|
||||
metawriter_ptr const& metawriter = metawriter_it->second;
|
||||
|
||||
ptree & metawriter_node = map_node.push_back(
|
||||
ptree::value_type("MetaWriter", ptree()))->second;
|
||||
|
||||
set_attr(metawriter_node, "name", name);
|
||||
|
||||
metawriter_json *json = dynamic_cast<metawriter_json *>(metawriter.get());
|
||||
if (json) {
|
||||
set_attr(metawriter_node, "type", "json");
|
||||
std::string const& filename = path_processor_type::to_string(*(json->get_filename()));
|
||||
if (!filename.empty() || explicit_defaults) {
|
||||
set_attr(metawriter_node, "file", filename);
|
||||
}
|
||||
}
|
||||
if (!metawriter->get_default_properties().empty() || explicit_defaults) {
|
||||
set_attr(metawriter_node, "default-output", metawriter->get_default_properties().to_string());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void serialize_map(ptree & pt, Map const & map, bool explicit_defaults)
|
||||
{
|
||||
|
||||
|
@ -739,6 +783,12 @@ void serialize_map(ptree & pt, Map const & map, bool explicit_defaults)
|
|||
{
|
||||
serialize_layer( map_node, layers[i], explicit_defaults );
|
||||
}
|
||||
|
||||
Map::const_metawriter_iterator m_it = map.begin_metawriters();
|
||||
Map::const_metawriter_iterator m_end = map.end_metawriters();
|
||||
for (; m_it != m_end; ++m_it) {
|
||||
serialize_metawriter(map_node, m_it, explicit_defaults);
|
||||
}
|
||||
}
|
||||
|
||||
void save_map(Map const & map, std::string const& filename, bool explicit_defaults)
|
||||
|
|
Loading…
Add table
Reference in a new issue