Skip to content

Commit 1ca88a6

Browse files
committed
Fix multipolygon building in export command
See #288
1 parent c9c1f32 commit 1ca88a6

File tree

4 files changed

+66
-6
lines changed

4 files changed

+66
-6
lines changed

src/export/export_format_json.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -250,19 +250,18 @@ void ExportFormatJSON::create_linestring(const osmium::Way& way) {
250250

251251
void ExportFormatJSON::create_multipolygon(const osmium::Area& area) {
252252
m_buffer += R"(,"geometry":{"type":"MultiPolygon","coordinates":)";
253+
m_buffer += '[';
253254
for (const auto &outer_ring : area.outer_rings()) {
254-
m_buffer += "[[";
255+
m_buffer += '[';
255256
create_coordinate_list(outer_ring);
256-
m_buffer += ']';
257257
for (const auto &inner_ring : area.inner_rings(outer_ring)) {
258-
m_buffer += ",[";
258+
m_buffer += ",";
259259
create_coordinate_list(inner_ring);
260-
m_buffer += ']';
261260
}
262261
m_buffer += "],";
263262
}
264-
265-
m_buffer.back() = '}';
263+
m_buffer.pop_back(); // remove trailing comma
264+
m_buffer += "]}";
266265
}
267266

268267
void ExportFormatJSON::node(const osmium::Node& node) {

test/export/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function(check_export _name _options _input _output)
1111
endfunction()
1212

1313
check_export(geojson "-f geojson" input.osm output.geojson)
14+
check_export(geojsonmp "-f geojson -u type_id" input-mp.osm output-mp.geojson)
1415
check_export(geojsonseq "-f geojsonseq -x print_record_separator=false" input.osm output.geojsonseq)
1516
check_export(geojsonuid "-f geojsonseq -u type_id" input.osm output-uid.geojsonseq)
1617
check_export(geojsoncnt "-f geojsonseq -u counter" input.osm output-cnt.geojsonseq)

test/export/input-mp.osm

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<osm version="0.6" upload="false" generator="testdata">
3+
<node id="10" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="1" lon="1"/>
4+
<node id="11" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="1" lon="2"/>
5+
<node id="12" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="2" lon="2"/>
6+
<node id="13" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="2" lon="1"/>
7+
<node id="14" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="0" lon="0"/>
8+
<node id="15" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="0" lon="3"/>
9+
<node id="16" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="3" lon="3"/>
10+
<node id="17" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="3" lon="0"/>
11+
<node id="18" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="4" lon="0"/>
12+
<node id="19" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="4" lon="1"/>
13+
<node id="20" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="5" lon="1"/>
14+
<node id="21" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="5" lon="0"/>
15+
<way id="80" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
16+
<nd ref="10"/>
17+
<nd ref="11"/>
18+
<nd ref="12"/>
19+
<nd ref="13"/>
20+
<nd ref="10"/>
21+
</way>
22+
<way id="81" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
23+
<nd ref="14"/>
24+
<nd ref="15"/>
25+
<nd ref="16"/>
26+
<nd ref="17"/>
27+
<nd ref="14"/>
28+
</way>
29+
<way id="82" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
30+
<nd ref="18"/>
31+
<nd ref="19"/>
32+
<nd ref="20"/>
33+
<nd ref="21"/>
34+
<nd ref="18"/>
35+
</way>
36+
<relation id="90" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
37+
<member type="way" ref="80" role="inner"/>
38+
<member type="way" ref="81" role="outer"/>
39+
<member type="way" ref="82" role="outer"/>
40+
<tag k="type" v="multipolygon"/>
41+
<tag k="landuse" v="forest"/>
42+
</relation>
43+
<relation id="91" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
44+
<member type="way" ref="81" role="outer"/>
45+
<member type="way" ref="82" role="outer"/>
46+
<tag k="type" v="multipolygon"/>
47+
<tag k="landuse" v="forest"/>
48+
</relation>
49+
<relation id="92" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1">
50+
<member type="way" ref="80" role="inner"/>
51+
<member type="way" ref="81" role="outer"/>
52+
<tag k="type" v="multipolygon"/>
53+
<tag k="landuse" v="forest"/>
54+
</relation>
55+
</osm>

test/export/output-mp.geojson

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{"type":"FeatureCollection","features":[
2+
{"type":"Feature","id":"a185","geometry":{"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[3.0,0.0],[3.0,3.0],[0.0,3.0],[0.0,0.0]],[[1.0,1.0],[1.0,2.0],[2.0,2.0],[2.0,1.0],[1.0,1.0]]]]},"properties":{"landuse":"forest"}},
3+
{"type":"Feature","id":"a183","geometry":{"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[3.0,0.0],[3.0,3.0],[0.0,3.0],[0.0,0.0]]],[[[0.0,4.0],[1.0,4.0],[1.0,5.0],[0.0,5.0],[0.0,4.0]]]]},"properties":{"landuse":"forest"}},
4+
{"type":"Feature","id":"a181","geometry":{"type":"MultiPolygon","coordinates":[[[[0.0,0.0],[3.0,0.0],[3.0,3.0],[0.0,3.0],[0.0,0.0]],[[1.0,1.0],[1.0,2.0],[2.0,2.0],[2.0,1.0],[1.0,1.0]]],[[[0.0,4.0],[1.0,4.0],[1.0,5.0],[0.0,5.0],[0.0,4.0]]]]},"properties":{"landuse":"forest"}}
5+
]}

0 commit comments

Comments
 (0)