void writeable_pgsql_selection::write_nodes(output_formatter &formatter) { // get all nodes - they already contain their own tags, so // we don't need to do anything else. logger::message("Fetching nodes"); element_info elem; double lon, lat; tags_t tags; pqxx::result nodes = w.prepared("extract_nodes").exec(); for (pqxx::result::const_iterator itr = nodes.begin(); itr != nodes.end(); ++itr) { extract_elem(*itr, elem, cc); lon = double((*itr)["longitude"].as<int64_t>()) / (SCALE); lat = double((*itr)["latitude"].as<int64_t>()) / (SCALE); extract_tags(w.prepared("extract_node_tags")(elem.id).exec(), tags); formatter.write_node(elem, lon, lat, tags); } }
void readonly_pgsql_selection::write_nodes(output_formatter &formatter) { // get all nodes - they already contain their own tags, so // we don't need to do anything else. logger::message("Fetching nodes"); element_info elem; double lon, lat; tags_t tags; formatter.start_element_type(element_type_node); // fetch in chunks... set<osm_id_t>::iterator prev_itr = sel_nodes.begin(); size_t chunk_i = 0; for (set<osm_id_t>::iterator n_itr = sel_nodes.begin(); ; ++n_itr, ++chunk_i) { bool at_end = n_itr == sel_nodes.end(); if ((chunk_i >= STRIDE) || ((chunk_i > 0) && at_end)) { stringstream query; query << "select n.id, n.latitude, n.longitude, n.visible, " "to_char(n.timestamp,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') as timestamp, " "n.changeset_id, n.version from current_nodes n where n.id in ("; std::copy(prev_itr, n_itr, infix_ostream_iterator<osm_id_t>(query, ",")); query << ")"; pqxx::result nodes = w.exec(query); for (pqxx::result::const_iterator itr = nodes.begin(); itr != nodes.end(); ++itr) { extract_elem(*itr, elem, cc); lon = double((*itr)["longitude"].as<int64_t>()) / (SCALE); lat = double((*itr)["latitude"].as<int64_t>()) / (SCALE); extract_tags(w.prepared("extract_node_tags")(elem.id).exec(), tags); formatter.write_node(elem, lon, lat, tags); } chunk_i = 0; prev_itr = n_itr; } if (at_end) break; } formatter.end_element_type(element_type_node); }
void snapshot_selection::write_nodes(output_formatter &formatter) { // get all nodes - they already contain their own tags, so // we don't need to do anything else. logger::message("Fetching nodes"); element_info elem; tags_t tags; pqxx::result nodes = w.prepared("extract_nodes").exec(); for (pqxx::result::const_iterator itr = nodes.begin(); itr != nodes.end(); ++itr) { extract_elem(*itr, elem); if (itr["untagged"].as<bool>()) { tags.clear(); } else { extract_tags(w.prepared("extract_node_tags")(elem.id).exec(), tags); } formatter.write_node(elem, (*itr)["lon"].as<double>(), (*itr)["lat"].as<double>(), tags); } }