Skip to content

Commit 4b787e0

Browse files
committed
Fix attributes in geojson export
1 parent f8a297b commit 4b787e0

File tree

5 files changed

+38
-2
lines changed

5 files changed

+38
-2
lines changed

src/export/export_format_json.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ void ExportFormatJSON::start_feature(const std::string& prefix, osmium::object_i
9696

9797
void ExportFormatJSON::add_option(const std::string& name) {
9898
const nlohmann::json j = name;
99-
m_buffer += ',';
10099
m_buffer += j.dump();
101100
m_buffer += ':';
102101
}
@@ -105,38 +104,47 @@ void ExportFormatJSON::add_attributes(const osmium::OSMObject& object) {
105104

106105
if (!options().type.empty()) {
107106
add_option(options().type);
107+
m_buffer += '"';
108108
m_buffer += object_type_as_string(object);
109+
m_buffer += '"';
110+
m_buffer += ',';
109111
}
110112

111113
if (!options().id.empty()) {
112114
add_option(options().id);
113115
m_buffer += std::to_string(object.type() == osmium::item_type::area ? osmium::area_id_to_object_id(object.id()) : object.id());
116+
m_buffer += ',';
114117
}
115118

116119
if (!options().version.empty()) {
117120
add_option(options().version);
118121
m_buffer += std::to_string(object.version());
122+
m_buffer += ',';
119123
}
120124

121125
if (!options().changeset.empty()) {
122126
add_option(options().changeset);
123127
m_buffer += std::to_string(object.changeset());
128+
m_buffer += ',';
124129
}
125130

126131
if (!options().uid.empty()) {
127132
add_option(options().uid);
128133
m_buffer += std::to_string(object.uid());
134+
m_buffer += ',';
129135
}
130136

131137
if (!options().user.empty()) {
132138
add_option(options().user);
133139
const nlohmann::json j = object.user();
134-
m_buffer += j.template get<std::string>();
140+
m_buffer += j.dump();
141+
m_buffer += ',';
135142
}
136143

137144
if (!options().timestamp.empty()) {
138145
add_option(options().timestamp);
139146
m_buffer += std::to_string(object.timestamp().seconds_since_epoch());
147+
m_buffer += ',';
140148
}
141149

142150
if (!options().way_nodes.empty() && object.type() == osmium::item_type::way) {
@@ -152,6 +160,7 @@ void ExportFormatJSON::add_attributes(const osmium::OSMObject& object) {
152160
} else {
153161
m_buffer += ']';
154162
}
163+
m_buffer += ',';
155164
}
156165
}
157166

test/export/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ check_export(geojson "-f geojson" input.osm output.geojson)
1414
check_export(geojsonseq "-f geojsonseq -x print_record_separator=false" input.osm output.geojsonseq)
1515
check_export(geojsonuid "-f geojsonseq -u type_id" input.osm output-uid.geojsonseq)
1616
check_export(geojsoncnt "-f geojsonseq -u counter" input.osm output-cnt.geojsonseq)
17+
check_export(geojsonattr "-f geojson -n -a type,id,version,changeset,timestamp,uid,user,way_nodes" input.osm output-attr.geojson)
18+
check_export(geojsonchar "-f geojson -n -a type,id,version,changeset,timestamp,uid,user,way_nodes" input-chars.osm output-chars.geojson)
19+
1720
check_export(pg "-f pg" input.osm output.pg)
1821

1922
check_export(missing-node "-f geojson" input-missing-node.osm output-missing-node.geojson)

test/export/input-chars.osm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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="te'st" changeset="1" lat="3" lon="1"/>
4+
<node id="11" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user='te"st' changeset="1" lat="1" lon="1"/>
5+
<node id="12" version="1" timestamp="2015-01-01T01:00:00Z" uid="1" user="test" changeset="1" lat="2" lon="1">
6+
<tag k="ame'nity" v='post"_box'/>
7+
</node>
8+
</osm>

test/export/output-attr.geojson

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{"type":"FeatureCollection","features":[
2+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,1.0]},"properties":{"@type":"node","@id":10,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000}},
3+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,2.0]},"properties":{"@type":"node","@id":11,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000}},
4+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,3.0]},"properties":{"@type":"node","@id":12,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000}},
5+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,4.0]},"properties":{"@type":"node","@id":13,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000}},
6+
{"type":"Feature","geometry":{"type":"Point","coordinates":[2.0,1.5]},"properties":{"@type":"node","@id":14,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"amenity":"post_box"}},
7+
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[1.0,1.0],[1.0,2.0],[1.0,3.0]]},"properties":{"@type":"way","@id":20,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"@way_nodes":[10,11,12],"highway":"track"}},
8+
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[1.0,1.0],[1.0,2.0],[2.0,1.5]]},"properties":{"@type":"way","@id":21,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"@way_nodes":[10,11,14],"barrier":"fence"}},
9+
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[2.0,1.5],[1.0,1.0]]},"properties":{"@type":"way","@id":22,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"@way_nodes":[14,10]}},
10+
{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[1.0,1.0],[2.0,1.5],[1.0,2.0],[1.0,1.0]]]]},"properties":{"@type":"relation","@id":30,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"landuse":"forest"}}
11+
]}

test/export/output-chars.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","geometry":{"type":"Point","coordinates":[1.0,3.0]},"properties":{"@type":"node","@id":10,"@version":1,"@changeset":1,"@uid":1,"@user":"te'st","@timestamp":1420074000}},
3+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,1.0]},"properties":{"@type":"node","@id":11,"@version":1,"@changeset":1,"@uid":1,"@user":"te\"st","@timestamp":1420074000}},
4+
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,2.0]},"properties":{"@type":"node","@id":12,"@version":1,"@changeset":1,"@uid":1,"@user":"test","@timestamp":1420074000,"ame'nity":"post\"_box"}}
5+
]}

0 commit comments

Comments
 (0)