88 */
99
1010#include " geom-from-osm.hpp"
11+
12+ #include " geom-area-assembler.hpp"
1113#include " osmtypes.hpp"
1214
13- #include < osmium/area/geom_assembler.hpp>
1415#include < osmium/osm/way.hpp>
1516
1617#include < cassert>
@@ -90,7 +91,8 @@ geometry_t create_linestring(osmium::Way const &way)
9091 return geom;
9192}
9293
93- void create_polygon (geometry_t *geom, osmium::Way const &way)
94+ void create_polygon (geometry_t *geom, osmium::Way const &way,
95+ osmium::memory::Buffer *area_buffer)
9496{
9597 auto &polygon = geom->set <polygon_t >();
9698
@@ -100,26 +102,24 @@ void create_polygon(geometry_t *geom, osmium::Way const &way)
100102 return ;
101103 }
102104
103- osmium::area::AssemblerConfig area_config;
104- area_config.ignore_invalid_locations = true ;
105- osmium::area::GeomAssembler assembler{area_config};
106- osmium::memory::Buffer area_buffer{1024 };
105+ geom::area_assembler_t assembler{area_buffer};
107106
108- if (!assembler (way, area_buffer )) {
107+ if (!assembler (way)) {
109108 geom->reset ();
110109 return ;
111110 }
112111
113- auto const &area = area_buffer. get <osmium::Area>( 0 );
112+ auto const &area = assembler. get_area ( );
114113 auto const &ring = *area.begin <osmium::OuterRing>();
115114
116115 fill_point_list (&polygon.outer (), ring);
117116}
118117
119- geometry_t create_polygon (osmium::Way const &way)
118+ geometry_t create_polygon (osmium::Way const &way,
119+ osmium::memory::Buffer *area_buffer)
120120{
121121 geometry_t geom{};
122- create_polygon (&geom, way);
122+ create_polygon (&geom, way, area_buffer );
123123 return geom;
124124}
125125
@@ -207,19 +207,17 @@ geometry_t create_multilinestring(osmium::memory::Buffer const &buffer,
207207}
208208
209209void create_multipolygon (geometry_t *geom, osmium::Relation const &relation,
210- osmium::memory::Buffer const &buffer)
210+ osmium::memory::Buffer const &buffer,
211+ osmium::memory::Buffer *area_buffer)
211212{
212- osmium::area::AssemblerConfig area_config;
213- area_config.ignore_invalid_locations = true ;
214- osmium::area::GeomAssembler assembler{area_config};
215- osmium::memory::Buffer area_buffer{1024 };
213+ geom::area_assembler_t assembler{area_buffer};
216214
217- if (!assembler (relation, buffer, area_buffer )) {
215+ if (!assembler (relation, buffer)) {
218216 geom->reset ();
219217 return ;
220218 }
221219
222- auto const &area = area_buffer. get <osmium::Area>( 0 );
220+ auto const &area = assembler. get_area ( );
223221
224222 if (area.is_multipolygon ()) {
225223 auto &multipolygon = geom->set <multipolygon_t >();
@@ -235,10 +233,11 @@ void create_multipolygon(geometry_t *geom, osmium::Relation const &relation,
235233}
236234
237235geometry_t create_multipolygon (osmium::Relation const &relation,
238- osmium::memory::Buffer const &buffer)
236+ osmium::memory::Buffer const &buffer,
237+ osmium::memory::Buffer *area_buffer)
239238{
240239 geometry_t geom{};
241- create_multipolygon (&geom, relation, buffer);
240+ create_multipolygon (&geom, relation, buffer, area_buffer );
242241 return geom;
243242}
244243
0 commit comments