/* (c) 2015 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.topojson;
import java.awt.geom.AffineTransform;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.geoserver.wms.topojson.TopoGeom.GeometryColleciton;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
public class TopoJSONEncoderTest {
@Test
public void testIdentity() throws Exception {
TopoJSONEncoder encoder = new TopoJSONEncoder();
AffineTransform identity = new AffineTransform();
List<LineString> arcs = arcs("LINESTRING(0 1, 2 3)");
Collection<? extends TopoGeom> geoms = ImmutableList.of(new TopoGeom.LineString(
ImmutableList.of(1, 2, 3, 4, 5)));
GeometryColleciton layer = new GeometryColleciton(geoms);
Map<String, GeometryColleciton> layers = new HashMap<>();
layers.put("topp:states", layer);
Topology topology = new Topology(identity, arcs, layers);
Writer writer = new OutputStreamWriter(System.out);
encoder.encode(topology, writer);
}
@Test
public void testQuantization() throws Exception {
TopoJSONEncoder encoder = new TopoJSONEncoder();
final double translateX = 100d;
final double translateY = 200d;
final double scaleX = 0.001;
final double scaleY = 0.01;
AffineTransform tx = new AffineTransform();
tx.translate(translateX, translateY);
tx.scale(scaleX, scaleY);
List<LineString> arcs = arcs("LINESTRING(0 1, 2 3)");
Collection<? extends TopoGeom> geoms = ImmutableList.of(new TopoGeom.LineString(
ImmutableList.of(1, 2, 3, 4, 5)));
GeometryColleciton layer = new GeometryColleciton(geoms);
Map<String, GeometryColleciton> layers = new HashMap<>();
layers.put("topp:states", layer);
Topology topology = new Topology(tx, arcs, layers);
Writer writer = new OutputStreamWriter(System.out);
encoder.encode(topology, writer);
}
private List<LineString> arcs(String... WKT) throws ParseException {
List<LineString> arcs = new ArrayList<>();
WKTReader reader = new WKTReader();
for (String wktString : WKT) {
LineString l = (LineString) reader.read(wktString);
arcs.add(l);
}
return arcs;
}
}