Skip to content

Commit bbd68ad

Browse files
committed
Switch to gson
1 parent 6807f5e commit bbd68ad

5 files changed

Lines changed: 68 additions & 37 deletions

File tree

build.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<property name="releaseVersion" value="noversion" />
66

77
<!-- classpath used for javadoc and javac, don't forget to manually update the jar manifest classpath! -->
8-
<property name="classpath" value="lib/configuration/commons-collections-3.2.1.jar:lib/configuration/commons-configuration-1.6.jar:lib/configuration/commons-lang-2.6.jar:lib/configuration/commons-logging-1.1.1.jar:lib/jogl/gluegen-rt.jar:lib/jogl/gluegen-rt-natives-linux-amd64.jar:lib/jogl/gluegen-rt-natives-linux-i586.jar:lib/jogl/gluegen-rt-natives-macosx-universal.jar:lib/jogl/gluegen-rt-natives-windows-amd64.jar:lib/jogl/gluegen-rt-natives-windows-i586.jar:lib/jogl/jogl-all.jar:lib/jogl/jogl-all-natives-linux-amd64.jar:lib/jogl/jogl-all-natives-linux-i586.jar:lib/jogl/jogl-all-natives-macosx-universal.jar:lib/jogl/jogl-all-natives-windows-amd64.jar:lib/jogl/jogl-all-natives-windows-i586.jar:lib/jewelcli/jewelcli-0.6.jar:lib/jts/jts-1.11.jar:lib/osmosis/commons-compress-1.2.jar:lib/osmosis/osmosis-core-0.41.jar:lib/osmosis/osmosis-pbf-0.41.jar:lib/osmosis/osmosis-xml-0.41.jar:lib/osmosis/osmpbf-1.1.1-754a33af.jar:lib/osmosis/protobuf-java-2.4.1.jar:lib/osmosis/xercesImpl-2.9.1.jar:lib/javaproj/javaproj-1.0.6.jar:lib/guava/guava-r08.jar:lib/trove/trove-111118193120.jar:lib/poly2tri/poly2tri-core-0.1.1-SNAPSHOT.jar:lib/slf4j/slf4j-api-1.7.5.jar:lib/slf4j/slf4j-simple-1.7.5.jar:lib/commons/commons-math3-3.0.jar:lib/javailp/javailp-1.2a.jar:lib/lp_solve/lpsolve55j.jar:lib/pngj/pngj-2.0.0.jar:lib/json/json-20160810.jar:resources/" />
9-
<property name="manifest-cp" value=". lib/configuration/commons-collections-3.2.1.jar lib/configuration/commons-configuration-1.6.jar lib/configuration/commons-lang-2.6.jar lib/configuration/commons-logging-1.1.1.jar lib/jogl/gluegen-rt.jar lib/jogl/gluegen-rt-natives-linux-amd64.jar lib/jogl/gluegen-rt-natives-linux-i586.jar lib/jogl/gluegen-rt-natives-macosx-universal.jar lib/jogl/gluegen-rt-natives-windows-amd64.jar lib/jogl/gluegen-rt-natives-windows-i586.jar lib/jogl/jogl-all.jar lib/jogl/jogl-all-natives-linux-amd64.jar lib/jogl/jogl-all-natives-linux-i586.jar lib/jogl/jogl-all-natives-macosx-universal.jar lib/jogl/jogl-all-natives-windows-amd64.jar lib/jogl/jogl-all-natives-windows-i586.jar lib/jewelcli/jewelcli-0.6.jar lib/jts/jts-1.11.jar lib/osmosis/commons-compress-1.2.jar lib/osmosis/osmosis-core-0.41.jar lib/osmosis/osmosis-pbf-0.41.jar lib/osmosis/osmosis-xml-0.41.jar lib/osmosis/osmpbf-1.1.1-754a33af.jar lib/osmosis/protobuf-java-2.4.1.jar lib/osmosis/xercesImpl-2.9.1.jar lib/javaproj/javaproj-1.0.6.jar lib/guava/guava-r08.jar lib/trove/trove-111118193120.jar lib/poly2tri/poly2tri-core-0.1.1-SNAPSHOT.jar lib/slf4j/slf4j-api-1.7.5.jar lib/slf4j/slf4j-simple-1.7.5.jar lib/commons/commons-math3-3.0.jar lib/javailp/javailp-1.2a.jar lib/lp_solve/lpsolve55j.jar lib/pngj/pngj-2.0.0.jar lib/json/json-20160810.jar resources/" />
8+
<property name="classpath" value="lib/configuration/commons-collections-3.2.1.jar:lib/configuration/commons-configuration-1.6.jar:lib/configuration/commons-lang-2.6.jar:lib/configuration/commons-logging-1.1.1.jar:lib/jogl/gluegen-rt.jar:lib/jogl/gluegen-rt-natives-linux-amd64.jar:lib/jogl/gluegen-rt-natives-linux-i586.jar:lib/jogl/gluegen-rt-natives-macosx-universal.jar:lib/jogl/gluegen-rt-natives-windows-amd64.jar:lib/jogl/gluegen-rt-natives-windows-i586.jar:lib/jogl/jogl-all.jar:lib/jogl/jogl-all-natives-linux-amd64.jar:lib/jogl/jogl-all-natives-linux-i586.jar:lib/jogl/jogl-all-natives-macosx-universal.jar:lib/jogl/jogl-all-natives-windows-amd64.jar:lib/jogl/jogl-all-natives-windows-i586.jar:lib/jewelcli/jewelcli-0.6.jar:lib/jts/jts-1.11.jar:lib/osmosis/commons-compress-1.2.jar:lib/osmosis/osmosis-core-0.41.jar:lib/osmosis/osmosis-pbf-0.41.jar:lib/osmosis/osmosis-xml-0.41.jar:lib/osmosis/osmpbf-1.1.1-754a33af.jar:lib/osmosis/protobuf-java-2.4.1.jar:lib/osmosis/xercesImpl-2.9.1.jar:lib/javaproj/javaproj-1.0.6.jar:lib/guava/guava-r08.jar:lib/trove/trove-111118193120.jar:lib/poly2tri/poly2tri-core-0.1.1-SNAPSHOT.jar:lib/slf4j/slf4j-api-1.7.5.jar:lib/slf4j/slf4j-simple-1.7.5.jar:lib/commons/commons-math3-3.0.jar:lib/javailp/javailp-1.2a.jar:lib/lp_solve/lpsolve55j.jar:lib/pngj/pngj-2.0.0.jar:lib/gson/gson-2.8.0.jar:lib/fluent-json/fluent-json-2.0.3.jar:resources/" />
9+
<property name="manifest-cp" value=". lib/configuration/commons-collections-3.2.1.jar lib/configuration/commons-configuration-1.6.jar lib/configuration/commons-lang-2.6.jar lib/configuration/commons-logging-1.1.1.jar lib/jogl/gluegen-rt.jar lib/jogl/gluegen-rt-natives-linux-amd64.jar lib/jogl/gluegen-rt-natives-linux-i586.jar lib/jogl/gluegen-rt-natives-macosx-universal.jar lib/jogl/gluegen-rt-natives-windows-amd64.jar lib/jogl/gluegen-rt-natives-windows-i586.jar lib/jogl/jogl-all.jar lib/jogl/jogl-all-natives-linux-amd64.jar lib/jogl/jogl-all-natives-linux-i586.jar lib/jogl/jogl-all-natives-macosx-universal.jar lib/jogl/jogl-all-natives-windows-amd64.jar lib/jogl/jogl-all-natives-windows-i586.jar lib/jewelcli/jewelcli-0.6.jar lib/jts/jts-1.11.jar lib/osmosis/commons-compress-1.2.jar lib/osmosis/osmosis-core-0.41.jar lib/osmosis/osmosis-pbf-0.41.jar lib/osmosis/osmosis-xml-0.41.jar lib/osmosis/osmpbf-1.1.1-754a33af.jar lib/osmosis/protobuf-java-2.4.1.jar lib/osmosis/xercesImpl-2.9.1.jar lib/javaproj/javaproj-1.0.6.jar lib/guava/guava-r08.jar lib/trove/trove-111118193120.jar lib/poly2tri/poly2tri-core-0.1.1-SNAPSHOT.jar lib/slf4j/slf4j-api-1.7.5.jar lib/slf4j/slf4j-simple-1.7.5.jar lib/commons/commons-math3-3.0.jar lib/javailp/javailp-1.2a.jar lib/lp_solve/lpsolve55j.jar lib/pngj/pngj-2.0.0.jar lib/gson/gson-2.8.0.jar lib/fluent-json/fluent-json-2.0.3.jar resources/" />
1010

1111
<target name="help">
1212
<echo message=" TARGETS:"/>
14.6 KB
Binary file not shown.

lib/gson/gson-2.8.0.jar

227 KB
Binary file not shown.

lib/json/json-20160810.jar

-53.2 KB
Binary file not shown.

src/org/osm2world/core/target/obj/ObjWriter.java

Lines changed: 66 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@
99
import java.io.IOException;
1010
import java.io.PrintStream;
1111
import java.io.PrintWriter;
12+
import java.util.Arrays;
1213
import java.util.HashMap;
1314
import java.util.Iterator;
1415
import java.util.List;
1516
import java.util.Map;
1617
import java.util.Map.Entry;
1718

18-
import org.json.JSONArray;
19-
import org.json.JSONObject;
19+
import org.apache.commons.lang.ArrayUtils;
20+
import org.jglue.fluentjson.JsonBuilder;
21+
import org.jglue.fluentjson.JsonBuilderFactory;
22+
import org.jglue.fluentjson.JsonObjectBuilder;
23+
import org.jglue.fluentjson.Mapper;
2024
import org.osm2world.core.GlobalValues;
2125
import org.osm2world.core.map_data.creation.LatLon;
2226
import org.osm2world.core.map_data.creation.MapProjection;
@@ -33,6 +37,9 @@
3337
import org.osm2world.core.target.common.rendering.Camera;
3438
import org.osm2world.core.target.common.rendering.Projection;
3539

40+
import com.google.gson.JsonArray;
41+
import com.google.gson.JsonObject;
42+
3643
/**
3744
* utility class for creating an Wavefront OBJ file
3845
*/
@@ -45,6 +52,13 @@ private static final class TiledObjTargetProvider implements TargetProvider<Rend
4552
private File tilesFolder;
4653
private MapProjection mapProjection;
4754

55+
private static final class DoubleJsonArrayMapper implements Mapper<Double> {
56+
@Override
57+
public JsonBuilder map(Double arg0) {
58+
return JsonBuilderFactory.buildPrimitive(arg0);
59+
}
60+
}
61+
4862
private static final class TargetAndStream {
4963
ObjTarget target;
5064
AxisAlignedBoundingBoxXZ boundingVolume;
@@ -182,8 +196,7 @@ public void close() {
182196
double minY = 0;
183197
double maxY = 0;
184198

185-
JSONObject tileset = new JSONObject();
186-
JSONArray children = new JSONArray();
199+
JsonArray children = new JsonArray();
187200

188201
for (Entry<String, TargetAndStream> entry : this.tile2Target.entrySet()) {
189202
TargetAndStream t = entry.getValue();
@@ -198,12 +211,13 @@ public void close() {
198211
}
199212

200213
if (generateMeta) {
201-
writeTileset(fullBBOX, minY, maxY, tileset, children);
214+
writeTileset(fullBBOX, minY, maxY, children);
202215
}
203216
}
204217

205-
private void writeTileset(AxisAlignedBoundingBoxXZ fullBBOX, double minY, double maxY,
206-
JSONObject tileset, JSONArray children) {
218+
private void writeTileset(AxisAlignedBoundingBoxXZ fullBBOX,
219+
double minY, double maxY, JsonArray children) {
220+
207221
File tilesetFile = new File(this.tilesetPath);
208222

209223
File metaFile = new File(this.tilesFolder.getPath() +
@@ -213,29 +227,36 @@ private void writeTileset(AxisAlignedBoundingBoxXZ fullBBOX, double minY, double
213227
metaFile = tilesetFile;
214228
}
215229

216-
tileset.put("asset", new JSONObject().put("version", "0.0"));
217-
218-
JSONObject rootJson = new JSONObject().put(
219-
"boundingVolume", new JSONObject().put(
220-
"region", encodeRegion(minY, maxY, fullBBOX)));
221-
222230
LatLon origin = this.mapProjection.getOrigin();
223231
VectorXYZ cartesianOrigin = WGS84Util.cartesianFromLatLon(origin, 0.0);
224232
double[] transform = WGS84Util.eastNorthUpToFixedFrame(cartesianOrigin);
233+
234+
List<Double> regionList = Arrays.asList(ArrayUtils.toObject(encodeRegion(minY, maxY, fullBBOX)));
235+
List<Double> transformList = Arrays.asList(ArrayUtils.toObject(transform));
236+
double extentDiagonal = (fullBBOX.sizeX() + fullBBOX.sizeZ()) / 2;
225237

226-
rootJson.put("transform", new JSONArray(transform));
227-
228-
tileset.put("root", rootJson);
229-
double extentDiagonal = (fullBBOX.sizeX() + fullBBOX.sizeZ()) / 20;
238+
JsonObject tileset = JsonBuilderFactory.buildObject()
239+
.addObject("asset")
240+
.add("version", "0.0")
241+
.end()
242+
.addObject("root")
243+
.addObject("boundingVolume")
244+
.addArray("region").addAll(new DoubleJsonArrayMapper(), regionList)
245+
.end()
246+
.end()
247+
.addArray("transform").addAll(new DoubleJsonArrayMapper(), transformList)
248+
.end()
249+
.add("refine", "ADD")
250+
.add("geometricError", extentDiagonal)
251+
.end()
252+
.add("geometricError", extentDiagonal)
253+
.getJson();
230254

231-
tileset.put("geometricError", extentDiagonal);
232-
rootJson.put("refine", "add");
233-
rootJson.put("children", children);
234-
rootJson.put("geometricError", extentDiagonal);
255+
tileset.getAsJsonObject("root").add("children", children);
235256

236257
try {
237258
PrintWriter metaWriter = new PrintWriter(new FileOutputStream(metaFile));
238-
metaWriter.println(tileset.toString(2));
259+
metaWriter.println(tileset.toString());
239260
metaWriter.flush();
240261
metaWriter.close();
241262
}
@@ -244,9 +265,8 @@ private void writeTileset(AxisAlignedBoundingBoxXZ fullBBOX, double minY, double
244265
}
245266
}
246267

247-
private AxisAlignedBoundingBoxXZ generateMetaInfoForTile(JSONArray children,
268+
private AxisAlignedBoundingBoxXZ generateMetaInfoForTile(JsonArray children,
248269
String tms, TargetAndStream t, AxisAlignedBoundingBoxXZ fullBBOX) {
249-
JSONObject meta = new JSONObject();
250270

251271
AxisAlignedBoundingBoxXZ tileBBOX =
252272
tile2boundingBox(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(0));
@@ -262,20 +282,31 @@ private AxisAlignedBoundingBoxXZ generateMetaInfoForTile(JSONArray children,
262282
fullBBOX = AxisAlignedBoundingBoxXZ.union(union, fullBBOX);
263283
}
264284

265-
meta.put("boundingVolume", new JSONObject());
266-
meta.getJSONObject("boundingVolume").put("region", new JSONArray(region));
285+
if (t.maxY == 0.0) {
286+
// Don't write epty tiles
287+
return fullBBOX;
288+
}
267289

268-
meta.put("geometricError", t.maxY);
290+
List<Double> regionList = Arrays.asList(ArrayUtils.toObject(region));
269291

270-
JSONObject content = new JSONObject();
271292
double[] contentRegion = encodeRegion(t.minY, t.maxY, t.boundingVolume);
272-
273-
content.put("url", tms + ".b3dm");
274-
content.put("boundingVolume", new JSONObject());
275-
content.getJSONObject("boundingVolume").put("region", new JSONArray(contentRegion));
276-
277-
meta.put("content", content);
278-
children.put(meta);
293+
List<Double> contentRegionList = Arrays.asList(ArrayUtils.toObject(contentRegion));
294+
295+
JsonObjectBuilder<?,JsonObject> meta = JsonBuilderFactory.buildObject()
296+
.addObject("boundingVolume")
297+
.addArray("region").addAll(new DoubleJsonArrayMapper(), regionList)
298+
.end()
299+
.end()
300+
.add("geometricError", t.maxY * 8)
301+
.addObject("content")
302+
.add("url", tms + ".b3dm")
303+
.addObject("boundingVolume")
304+
.addArray("region").addAll(new DoubleJsonArrayMapper(), contentRegionList)
305+
.end()
306+
.end()
307+
.end();
308+
309+
children.add(meta.getJson().getAsJsonObject());
279310

280311
return fullBBOX;
281312
}

0 commit comments

Comments
 (0)