/home/martin/workspace/OpenStreetNav/src/osmdb/PropertiesSelection.cpp
Go to the documentation of this file.
00001 /*
00002  * PropertiesSelection.cpp
00003  *
00004  *  Created on: Jan 1, 2012
00005  *      Author: martin
00006  */
00007 
00008 #include "PropertiesSelection.h"
00009 #include "../sqllib/sqllib.h"
00010 #include "PropertiesSelectionException.h"
00011 
00012 namespace osmdb
00013 {
00014 
00015 PropertiesSelection::PropertiesSelection(OsmDatabase& osmdb):
00016     db(osmdb),
00017     get_node_attrs_st(sqllib::get_select_node_attributes(db.get_db(), true, "ps_node_attrs")),
00018     get_way_attrs_st(sqllib::get_select_way_attributes(db.get_db(), true, "ps_way_attrs")),
00019     get_rel_attrs_st(sqllib::get_select_rel_attributes(db.get_db(), true, "ps_rel_attrs")),
00020     get_waynodes_st(sqllib::get_select_waynodes(db.get_db(), true, "ps_waynodes")),
00021     get_node_members_st(sqllib::get_select_node_members(db.get_db(), true, "ps_node_members")),
00022     get_way_members_st(sqllib::get_select_way_members(db.get_db(), true, "ps_way_members")),
00023     get_rel_members_st(sqllib::get_select_rel_members(db.get_db(), true, "ps_rel_members")),
00024     get_node_pos_st(sqllib::get_select_position(db.get_db(), true, "ps_node_pos"))
00025 {
00026 }
00027 
00028 std::set<std::pair<std::string, std::string> > PropertiesSelection::get_node_tags(int64_t id)
00029 {
00030     return get_multimap<std::set<std::pair<std::string, std::string> > >(get_node_attrs_st, id);
00031 }
00032 
00033 std::set<std::pair<std::string, std::string> > PropertiesSelection::get_way_tags(int64_t id)
00034 {
00035     return get_multimap<std::set<std::pair<std::string, std::string> > >(get_way_attrs_st, id);
00036 }
00037 
00038 std::set<std::pair<std::string, std::string> > PropertiesSelection::get_relation_tags(int64_t id)
00039 {
00040     return get_multimap<std::set<std::pair<std::string, std::string> > >(get_rel_attrs_st, id);
00041 }
00042 
00043 std::vector<int64_t> PropertiesSelection::get_waynodes(int64_t way_id)
00044 {
00045     return psql::exec_statement_col(get_waynodes_st, way_id);
00046 }
00047 
00048 std::multimap<std::string, int64_t> PropertiesSelection::get_node_members(int64_t rel_id)
00049 {
00050     return get_multimap<std::multimap<std::string, int64_t> >(get_node_members_st, rel_id);
00051 }
00052 
00053 std::multimap<std::string, int64_t> PropertiesSelection::get_way_members(int64_t rel_id)
00054 {
00055     return get_multimap<std::multimap<std::string, int64_t> >(get_way_members_st, rel_id);
00056 }
00057 
00058 std::multimap<std::string, int64_t> PropertiesSelection::get_relation_members(int64_t rel_id)
00059 {
00060     return get_multimap<std::multimap<std::string, int64_t> >(get_rel_members_st, rel_id);
00061 }
00062 
00063 geo::Point PropertiesSelection::get_position(int64_t node_id)
00064 {
00065     get_node_pos_st.execute(node_id);
00066     if (get_node_pos_st.row_count() != 1)
00067         throw PropertiesSelectionException(util::concatenate(" ", "Node with id ", node_id, "does not exist"));
00068     double a, b;
00069     std::tie(a, b) = get_node_pos_st.get_row(0);
00070     return geo::Point(b, a);
00071 }
00072 
00073 PropertiesSelection::~PropertiesSelection()
00074 {
00075 }
00076 
00077 } /* namespace osmdb */
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines