/*
* Copyright (c) 2016 Martin Davis.
*
* 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.operation.distance;
import java.util.List;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.WKTFileReader;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.util.Stopwatch;
public class TestPerfFastDistanceFile
{
public static void main(String[] args) {
TestPerfFastDistanceFile test = new TestPerfFastDistanceFile();
try {
test.test();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
private static final int MAX_GEOMS = 40;
boolean testFailed = false;
public TestPerfFastDistanceFile() {
}
public void test()
throws Exception
{
// List geoms = loadWKT("C:\\data\\martin\\proj\\jts\\sandbox\\jts\\testdata\\africa.wkt");
List geoms = loadWKT("C:\\data\\martin\\proj\\jts\\sandbox\\jts\\testdata\\world.wkt");
// testAllDistances(geoms, 100);
testAllDistances(geoms, 1);
testAllDistances(geoms, 2);
testAllDistances(geoms, 5);
testAllDistances(geoms, 10);
testAllDistances(geoms, 20);
testAllDistances(geoms, 30);
testAllDistances(geoms, 40);
testAllDistances(geoms, 50);
}
static List loadWKT(String filename) throws Exception {
WKTReader rdr = new WKTReader();
WKTFileReader fileRdr = new WKTFileReader(filename, rdr);
return fileRdr.read();
}
void testAllDistances(List geoms, int maxToScan)
{
Stopwatch sw = new Stopwatch();
computeAllDistances(geoms, maxToScan);
// computePairDistance(geoms, 1, 3);
// computePairDistance(geoms, 55, 77);
System.out.println("Count = " + maxToScan
+ " Finished in " + sw.getTimeString());
}
void computeAllDistances(List geoms, int maxToScan) {
int numGeoms1 = geoms.size();
if (numGeoms1 > maxToScan)
numGeoms1 = maxToScan;
int numGeoms2 = geoms.size();
for (int i = 0; i < numGeoms1; i++) {
// PreparedGeometry pg = PreparedGeometryFactory.prepare((Geometry)
// geoms.get(i));
for (int j = 0; j < numGeoms2; j++) {
// don't compute distance to itself!
// if (i == j) continue;
Geometry g1 = (Geometry) geoms.get(i);
Geometry g2 = (Geometry) geoms.get(j);
// if (g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal()))
// continue;
// double dist = g1.distance(g2);
// double dist = BranchAndBoundFacetDistance.distance(g1, g2);
double dist = CachedBABDistance.getDistance(g1, g2);
// double distFast = SortedBoundsFacetDistance.distance(g1, g2);
// pg.intersects(g2);
}
}
}
static final int MAX_ITER = 10;
void computePairDistance(List geoms, int i, int j)
{
for (int n = 0; n < MAX_ITER; n++ ) {
Geometry g1 = (Geometry) geoms.get(i);
Geometry g2 = (Geometry) geoms.get(j);
double dist = g1.distance(g2);
// double dist = SortedBoundsFacetDistance.distance(g1, g2);
// double dist = BranchAndBoundFacetDistance.distance(g1, g2);
}
}
}