osm input: remove string hack and set feature_id to osm node id

This commit is contained in:
Dane Springmeyer 2012-10-16 17:46:24 -07:00
parent b46c5ddeb1
commit 8c2604e69c
5 changed files with 10 additions and 18 deletions

View file

@ -251,6 +251,11 @@ bounds osm_way::get_bounds()
bool osm_way::is_polygon() bool osm_way::is_polygon()
{ {
if (keyvals.find("building") != keyvals.end())
{
return true;
}
for (unsigned int count = 0; count < ptypes.ptypes.size(); ++count) for (unsigned int count = 0; count < ptypes.ptypes.size(); ++count)
{ {
if (keyvals.find(ptypes.ptypes[count].first) != keyvals.end() && if (keyvals.find(ptypes.ptypes[count].first) != keyvals.end() &&

View file

@ -54,8 +54,9 @@ public:
ptypes.push_back(std::pair<std::string, std::string>("natural", "heath")); ptypes.push_back(std::pair<std::string, std::string>("natural", "heath"));
ptypes.push_back(std::pair<std::string, std::string>("natural", "marsh")); ptypes.push_back(std::pair<std::string, std::string>("natural", "marsh"));
ptypes.push_back(std::pair<std::string, std::string>("military", "danger_area")); ptypes.push_back(std::pair<std::string, std::string>("military", "danger_area"));
ptypes.push_back(std::pair<std::string, std::string>("landuse","forest")); ptypes.push_back(std::pair<std::string, std::string>("landuse", "forest"));
ptypes.push_back(std::pair<std::string, std::string>("landuse","industrial")); ptypes.push_back(std::pair<std::string, std::string>("landuse", "industrial"));
ptypes.push_back(std::pair<std::string, std::string>("leisure", "park"));
} }
}; };

View file

@ -45,7 +45,6 @@ osm_featureset<filterT>::osm_featureset(const filterT& filter,
: filter_(filter), : filter_(filter),
query_ext_(), query_ext_(),
tr_(new transcoder(encoding)), tr_(new transcoder(encoding)),
feature_id_(1),
dataset_ (dataset), dataset_ (dataset),
attribute_names_ (attribute_names), attribute_names_ (attribute_names),
ctx_(boost::make_shared<mapnik::context_type>()) ctx_(boost::make_shared<mapnik::context_type>())
@ -62,8 +61,7 @@ feature_ptr osm_featureset<filterT>::next()
if (!cur_item) return feature_ptr(); if (!cur_item) return feature_ptr();
if (dataset_->current_item_is_node()) if (dataset_->current_item_is_node())
{ {
feature = feature_factory::create(ctx_, feature_id_); feature = feature_factory::create(ctx_, cur_item->id);
++feature_id_;
double lat = static_cast<osm_node*>(cur_item)->lat; double lat = static_cast<osm_node*>(cur_item)->lat;
double lon = static_cast<osm_node*>(cur_item)->lon; double lon = static_cast<osm_node*>(cur_item)->lon;
geometry_type* point = new geometry_type(mapnik::Point); geometry_type* point = new geometry_type(mapnik::Point);
@ -83,8 +81,7 @@ feature_ptr osm_featureset<filterT>::next()
} }
if (!cur_item) return feature_ptr(); if (!cur_item) return feature_ptr();
feature = feature_factory::create(ctx_, feature_id_); feature = feature_factory::create(ctx_, cur_item->id);
++feature_id_;
geometry_type* geom; geometry_type* geom;
if (static_cast<osm_way*>(cur_item)->is_polygon()) if (static_cast<osm_way*>(cur_item)->is_polygon())
{ {

View file

@ -61,7 +61,6 @@ private:
std::vector<int> attr_ids_; std::vector<int> attr_ids_;
mutable box2d<double> feature_ext_; mutable box2d<double> feature_ext_;
mutable int total_geom_size; mutable int total_geom_size;
mutable int feature_id_;
osm_dataset *dataset_; osm_dataset *dataset_;
std::set<std::string> attribute_names_; std::set<std::string> attribute_names_;
mapnik::context_ptr ctx_; mapnik::context_ptr ctx_;

View file

@ -66,16 +66,6 @@ void osmparser::startElement(xmlTextReaderPtr reader, const xmlChar *name)
assert(xid); assert(xid);
way->id = atol((char*)xid); way->id = atol((char*)xid);
cur_item = way; cur_item = way;
// Prevent ways with no name being assigned a name of "0"
cur_item->keyvals["name"] = "";
// HACK: allows comparison with "" in the XML file. Otherwise it
// doesn't work. Only do for the most crucial tags for Freemap's
// purposes. TODO investigate why this is
cur_item->keyvals["width"] = "";
cur_item->keyvals["horse"] = "";
cur_item->keyvals["foot"] = "";
cur_item->keyvals["bicycle"] = "";
xmlFree(xid); xmlFree(xid);
} }
else if (xmlStrEqual(name,BAD_CAST "nd")) else if (xmlStrEqual(name,BAD_CAST "nd"))