package org.locationtech.spatial4j.io.benchmark; import org.locationtech.spatial4j.context.jts.JtsSpatialContext; import org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory; import org.locationtech.spatial4j.io.LegacyShapeWriter; import org.locationtech.spatial4j.io.ShapeIO; import org.locationtech.spatial4j.io.ShapeWriter; import org.locationtech.spatial4j.shape.Shape; import java.io.*; import java.text.NumberFormat; public class ShapeBenchmarks { public static void main(String[] args) throws Exception { JtsSpatialContextFactory factory = new JtsSpatialContextFactory(); factory.geo = true; factory.normWrapLongitude = true; JtsSpatialContext ctx = new JtsSpatialContext(factory); PrintStream out = System.out; NumberFormat nf = NumberFormat.getPercentInstance(); InputStreamReader in = new InputStreamReader(ShapeBenchmarks.class.getResourceAsStream("/samples.txt")); try (BufferedReader br = new BufferedReader(in)) { String line; while ((line = br.readLine()) != null) { line = line.trim(); if(line.startsWith("#") || line.length()==0) { continue; } Shape shape = ctx.getFormats().getWktReader().read(line); double poly = ctx.getFormats().getWriter(ShapeIO.POLY).toString(shape).getBytes().length; out.println("Format | bytes | %poly | encoded"); out.println("------ | ----- | ----- | -------"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ctx.getBinaryCodec().writeShape(new DataOutputStream(baos), shape); out.print(" binary | "); out.print(baos.size()); out.print(" | "); out.print(nf.format(poly/baos.size())); out.print(" | "); out.print("..."); out.println(); for(ShapeWriter writer : ctx.getFormats().getWriters()) { if(writer instanceof LegacyShapeWriter) { continue; } String str = writer.toString(shape); out.print(writer.getFormatName()); out.print(" | "); out.print(str.length()); out.print(" | "); out.print(nf.format(poly/str.getBytes().length)); out.print(" | "); out.print(str); out.println(); } out.println(); out.println(); } } } }