/home/martin/workspace/OpenStreetNav/src/osmdb/ElementInsertion.cpp
Go to the documentation of this file.
00001 /*
00002  * ElementInsertion.cpp
00003  *
00004  *  Created on: Nov 6, 2011
00005  *      Author: martin
00006  */
00007 
00008 #include "ElementInsertion.h"
00009 #include "../sqllib/sqllib.h"
00010 
00011 namespace osmdb
00012 {
00013 
00014 osmdb::ElementInsertion::ElementInsertion(OsmDatabase& db):
00015     db(db),
00016     node_ins(sqllib::get_insert_node(db.get_db(), true, "node_ins_st")),
00017     edge_ins(sqllib::get_insert_edge(db.get_db(), true, "edge_ins_st")),
00018     waynode_ins(sqllib::get_insert_way_node(db.get_db(), true, "waynode_ins_st")),
00019     way_ins(sqllib::get_insert_way(db.get_db(), true, "way_ins_st")),
00020     node_attrs_ins(sqllib::get_insert_node_attr(db.get_db(), true, "node_attrs_ins_st")),
00021     way_attrs_ins(sqllib::get_insert_way_attr(db.get_db(), true, "way_attrs_ins_st")),
00022     rel_attrs_ins(sqllib::get_insert_rel_attribute(db.get_db(), true, "rel_attrs_ins_st")),
00023     rel_ins(sqllib::get_insert_relation(db.get_db(), true, "rel_ins_st")),
00024     node_mem_ins(sqllib::get_insert_node_member(db.get_db(), true, "node_member_ins_st")),
00025     way_mem_ins(sqllib::get_insert_way_member(db.get_db(), true, "way_member_ins_st")),
00026     rel_mem_ins(sqllib::get_insert_relation_member(db.get_db(), true, "rel_member_ins_st"))
00027 {
00028 
00029 }
00030 
00031 osmdb::ElementInsertion::~ElementInsertion()
00032 {
00033 }
00034 
00035 void osmdb::ElementInsertion::insert_node(const osm::Node& nd)
00036 {
00037     node_ins.execute(nd.id, nd.position.lon, nd.position.lat);
00038     for (auto it = nd.tags.begin(); it != nd.tags.end(); ++it)
00039     {
00040         node_attrs_ins.execute(nd.id, it->first, it->second);
00041     }
00042 }
00043 
00044 void osmdb::ElementInsertion::insert_way(const osm::Way& w)
00045 {
00046     way_ins.execute(w.id);
00047     for (unsigned int i = 0; i < w.nodes.size(); ++i)
00048     {
00049         waynode_ins.execute(w.id, w.nodes[i].id, i);
00050         if (i + 1 == w.nodes.size())
00051             break;
00052         edge_ins.execute(w.id, w.nodes[i].id, w.nodes[i+1].id, i);
00053     }
00054     for (auto it = w.tags.begin(); it != w.tags.end(); ++it)
00055     {
00056         way_attrs_ins.execute(w.id, it->first, it->second);
00057     }
00058 }
00059 
00060 void osmdb::ElementInsertion::insert_relation(const osm::Relation& r)
00061 {
00062     rel_ins.execute(r.id);
00063     for (auto it = r.tags.begin(); it != r.tags.end(); ++it)
00064     {
00065         rel_attrs_ins.execute(r.id, it->first, it->second);
00066     }
00067     for (auto it = r.members.begin(); it != r.members.end(); ++it)
00068     {
00069         it->second->add_to_relation(*this, r.id, it->first);
00070     }
00071 }
00072 
00073 void ElementInsertion::insert_member_node(int64_t rel_id, const std::string& role, int64_t node_id)
00074 {
00075     node_mem_ins.execute(rel_id, role, node_id);
00076 }
00077 
00078 void ElementInsertion::insert_member_way(int64_t rel_id, const std::string& role, int64_t way_id)
00079 {
00080     way_mem_ins.execute(rel_id, role, way_id);
00081 }
00082 
00083 void ElementInsertion::insert_member_relation(int64_t parent_id, const std::string& role, int64_t child_id)
00084 {
00085     rel_mem_ins.execute(parent_id, role, child_id);
00086 }
00087 
00088 }
00089 
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines