diff --git a/src/load_map.cpp b/src/load_map.cpp index 74f7b3824..1a4522322 100644 --- a/src/load_map.cpp +++ b/src/load_map.cpp @@ -377,25 +377,15 @@ void map_parser::parse_map_include(Map & map, xml_node const& node) { if (p.is("Parameter")) { - bool is_string = true; - boost::optional type = p.get_opt_attr("type"); - if (type) - { - if (*type == "int") - { - is_string = false; - params[p.get_attr("name")] = p.get_value(); - } - else if (*type == "float") - { - is_string = false; - params[p.get_attr("name")] = p.get_value(); - } - } - if (is_string) - { - params[p.get_attr("name")] = p.get_text(); - } + std::string val = p.get_text(); + std::string key = p.get_attr("name"); + mapnik::value_bool b; + mapnik::value_integer i; + mapnik::value_double d; + if (mapnik::util::string2bool(val,b)) params[key] = b; + else if (mapnik::util::string2int(val,i)) params[key] = i; + else if (mapnik::util::string2double(val,d)) params[key] = d; + else params[key] = val; } } } diff --git a/src/save_map.cpp b/src/save_map.cpp index 27eb75518..136fdf98b 100644 --- a/src/save_map.cpp +++ b/src/save_map.cpp @@ -488,36 +488,6 @@ void serialize_datasource( ptree & layer_node, datasource_ptr datasource) } } -class serialize_type : public util::static_visitor<> -{ -public: - serialize_type( boost::property_tree::ptree & node): - node_(node) {} - - void operator () ( mapnik::value_integer ) const - { - node_.put(".type", "int" ); - } - - void operator () ( mapnik::value_double ) const - { - node_.put(".type", "float" ); - } - - void operator () ( std::string const& ) const - { - node_.put(".type", "string" ); - } - - void operator () ( mapnik::value_null ) const - { - node_.put(".type", "string" ); - } - -private: - boost::property_tree::ptree & node_; -}; - void serialize_parameters( ptree & map_node, mapnik::parameters const& params) { if (params.size()) { @@ -531,7 +501,6 @@ void serialize_parameters( ptree & map_node, mapnik::parameters const& params) boost::property_tree::ptree()))->second; param_node.put(".name", p.first ); param_node.put_value( p.second ); - util::apply_visitor(serialize_type(param_node),p.second); } } } diff --git a/tests/python_tests/extra_map_props_test.py b/tests/python_tests/extra_map_props_test.py index 06d659682..e7ffba5d4 100644 --- a/tests/python_tests/extra_map_props_test.py +++ b/tests/python_tests/extra_map_props_test.py @@ -13,13 +13,30 @@ def setup(): def test_arbitrary_parameters_attached_to_map(): m = mapnik.Map(256,256) mapnik.load_map(m,'../data/good_maps/extra_arbitary_map_parameters.xml') - eq_(len(m.parameters),6) + eq_(len(m.parameters),5) eq_(m.parameters['key'],'value2') eq_(m.parameters['key3'],'value3') eq_(m.parameters['unicode'],u'iván') eq_(m.parameters['integer'],10) eq_(m.parameters['decimal'],.999) - eq_(m.parameters['number-as-string'],u'.9998') + m2 = mapnik.Map(256,256) + for k,v in m.parameters: + m2.parameters.append(mapnik.Parameter(k,v)) + eq_(len(m2.parameters),5) + eq_(m2.parameters['key'],'value2') + eq_(m2.parameters['key3'],'value3') + eq_(m2.parameters['unicode'],u'iván') + eq_(m2.parameters['integer'],10) + eq_(m2.parameters['decimal'],.999) + map_string = mapnik.save_map_to_string(m) + m3 = mapnik.Map(256,256) + mapnik.load_map_from_string(m3,map_string) + eq_(len(m3.parameters),5) + eq_(m3.parameters['key'],'value2') + eq_(m3.parameters['key3'],'value3') + eq_(m3.parameters['unicode'],u'iván') + eq_(m3.parameters['integer'],10) + eq_(m3.parameters['decimal'],.999) def test_serializing_arbitrary_parameters():