14
14
std::shared_ptr<geometry_processor> geometry_processor::create (const std::string &type,
15
15
const options_t *options) {
16
16
std::shared_ptr<geometry_processor> ptr;
17
- int srid = options->projection ->target_srs ();
18
17
19
18
if (type == " point" ) {
20
- ptr = std::make_shared<processor_point>(srid );
19
+ ptr = std::make_shared<processor_point>(options-> projection );
21
20
}
22
21
else if (type == " line" ) {
23
- ptr = std::make_shared<processor_line>(srid );
22
+ ptr = std::make_shared<processor_line>(options-> projection );
24
23
}
25
24
else if (type == " polygon" ) {
26
- ptr = std::make_shared<processor_polygon>(srid, options->enable_multi );
25
+ ptr = std::make_shared<processor_polygon>(options->projection ,
26
+ options->enable_multi );
27
27
}
28
28
else {
29
29
throw std::runtime_error ((boost::format (" Unable to construct geometry processor "
@@ -38,8 +38,7 @@ geometry_processor::geometry_processor(int srid, const std::string &type, unsign
38
38
: m_srid(srid), m_type(type), m_interests(interests) {
39
39
}
40
40
41
- geometry_processor::~geometry_processor () {
42
- }
41
+ geometry_processor::~geometry_processor () = default ;
43
42
44
43
int geometry_processor::srid () const {
45
44
return m_srid;
@@ -57,40 +56,29 @@ bool geometry_processor::interests(unsigned int interested) const {
57
56
return (interested & m_interests) == interested;
58
57
}
59
58
60
- geometry_builder::pg_geom_t geometry_processor::process_node (double , double ) {
61
- return geometry_builder::pg_geom_t ();
62
- }
63
-
64
- geometry_builder::pg_geom_t geometry_processor::process_way (const nodelist_t &) {
65
- return geometry_builder::pg_geom_t ();
66
- }
67
-
68
- geometry_builder::pg_geoms_t geometry_processor::process_relation (const multinodelist_t &) {
69
- return geometry_builder::pg_geoms_t ();
59
+ geometry_processor::wkb_t
60
+ geometry_processor::process_node (osmium::Location const &)
61
+ {
62
+ return wkb_t ();
70
63
}
71
64
72
- way_helper::way_helper ( )
65
+ geometry_processor:: wkb_t geometry_processor::process_way (osmium::Way const & )
73
66
{
67
+ return wkb_t ();
74
68
}
75
- way_helper::~way_helper ()
69
+
70
+ geometry_processor::wkbs_t
71
+ geometry_processor::process_relation (osmium::Relation const &,
72
+ osmium::memory::Buffer const &)
76
73
{
74
+ return wkbs_t ();
77
75
}
78
- size_t way_helper::set (osmium::WayNodeList const &node_ids,
79
- middle_query_t const *mid, reprojection const *proj)
80
- {
81
- node_cache.clear ();
82
- mid->nodes_get_list (node_cache, node_ids, proj);
83
76
84
- // equivalent to returning node_count for complete ways, different for partial
85
- // extracts
86
- return node_cache.size ();
87
- }
88
77
89
78
relation_helper::relation_helper ()
90
79
: data(1024 , osmium::memory::Buffer::auto_grow::yes)
91
80
{}
92
81
93
- relation_helper::~relation_helper () = default ;
94
82
95
83
size_t relation_helper::set (osmium::RelationMemberList const &member_list, middle_t const *mid)
96
84
{
@@ -100,13 +88,10 @@ size_t relation_helper::set(osmium::RelationMemberList const &member_list, middl
100
88
roles.clear ();
101
89
102
90
// grab the way members' ids
103
- size_t num_input = member_list.size ();
104
- input_way_ids.reserve (num_input);
105
- roles.reserve (num_input);
106
- for (auto const &member : member_list) {
107
- if (member.type () == osmium::item_type::way) {
108
- input_way_ids.push_back (member.ref ());
109
- roles.push_back (member.role ());
91
+ for (auto const &m : member_list) {
92
+ /* Need to handle more than just ways... */
93
+ if (m.type () == osmium::item_type::way) {
94
+ input_way_ids.push_back (m.ref ());
110
95
}
111
96
}
112
97
@@ -118,21 +103,14 @@ size_t relation_helper::set(osmium::RelationMemberList const &member_list, middl
118
103
auto num_ways = mid->ways_get_list (input_way_ids, data);
119
104
120
105
// grab the roles of each way
121
- if (num_ways < input_way_ids.size ()) {
122
- size_t memberpos = 0 ;
123
- size_t waypos = 0 ;
124
- for (auto const &w : data.select <osmium::Way>()) {
125
- while (memberpos < input_way_ids.size ()) {
126
- if (input_way_ids[memberpos] == w.id ()) {
127
- roles[waypos] = roles[memberpos];
128
- ++memberpos;
129
- break ;
130
- }
131
- ++memberpos;
106
+ for (auto const &w : data.select <osmium::Way>()) {
107
+ for (auto const &member : member_list) {
108
+ if (member.ref () == w.id () &&
109
+ member.type () == osmium::item_type::way) {
110
+ roles.emplace_back (member.role ());
111
+ break ;
132
112
}
133
- ++waypos;
134
113
}
135
- roles.resize (num_ways);
136
114
}
137
115
138
116
// mark the ends of each so whoever uses them will know where they end..
@@ -147,21 +125,15 @@ multitaglist_t relation_helper::get_filtered_tags(tagtransform *transform, expor
147
125
148
126
size_t i = 0 ;
149
127
for (auto const &w : data.select <osmium::Way>()) {
150
- transform->filter_tags (w, nullptr , nullptr , el, filtered[i++ ]);
128
+ transform->filter_tags (w, nullptr , nullptr , el, filtered[++i ]);
151
129
}
152
130
153
131
return filtered;
154
132
}
155
133
156
- multinodelist_t relation_helper::get_nodes (middle_t const *mid,
157
- reprojection const *proj) const
134
+ void relation_helper::add_way_locations (middle_t const *mid)
158
135
{
159
- multinodelist_t nodes (roles.size ());
160
-
161
- size_t i = 0 ;
162
- for (auto const &w : data.select <osmium::Way>()) {
163
- mid->nodes_get_list (nodes[i++], w.nodes (), proj);
136
+ for (auto &w : data.select <osmium::Way>()) {
137
+ mid->nodes_get_list (&(w.nodes ()));
164
138
}
165
-
166
- return nodes;
167
139
}
0 commit comments