/*
* Copyright (c) 2016 Vivid Solutions.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
*
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package test.jts.perf.dissolve;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.locationtech.jts.dissolve.LineDissolver;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.util.LinearComponentExtracter;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.operation.linemerge.LineMerger;
import org.locationtech.jts.util.Memory;
import test.jts.junit.GeometryUtils;
import test.jts.perf.PerformanceTestCase;
import test.jts.perf.PerformanceTestRunner;
public class LineDissolvePerfTest extends PerformanceTestCase
{
public static void main(String args[]) {
PerformanceTestRunner.run(LineDissolvePerfTest.class);
}
public LineDissolvePerfTest(String name) {
super(name);
setRunSize(new int[] {1, 2, 3, 4, 5});
setRunIterations(1);
}
Collection data;
public void setUp() throws IOException, ParseException
{
System.out.println("Loading data...");
data = GeometryUtils.readWKTFile("/Users/mdavis/myproj/jts/svn/jts-topo-suite/trunk/jts/testdata/world.wkt");
}
public void runDissolver_World()
{
LineDissolver dis = new LineDissolver();
dis.add(data);
Geometry result = dis.getResult();
System.out.println();
System.out.println(Memory.allString());
}
public void runBruteForce_World()
{
Geometry result = dissolveLines(data);
System.out.println(Memory.allString());
}
private Geometry dissolveLines(Collection lines) {
Geometry linesGeom = extractLines(lines);
return dissolveLines(linesGeom);
}
private Geometry dissolveLines(Geometry lines) {
Geometry dissolved = lines.union();
LineMerger merger = new LineMerger();
merger.add(dissolved);
Collection mergedColl = merger.getMergedLineStrings();
Geometry merged = lines.getFactory().buildGeometry(mergedColl);
return merged;
}
Geometry extractLines(Collection geoms)
{
GeometryFactory factory = null;
List lines = new ArrayList();
for (Iterator i = geoms.iterator(); i.hasNext(); ) {
Geometry g = (Geometry) i.next();
if (factory == null)
factory = g.getFactory();
lines.addAll(LinearComponentExtracter.getLines(g));
}
return factory.buildGeometry(geoms);
}
}