00001
00002
00003
00004
00005
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 }