package org.opentripplanner.analyst;
import junit.framework.TestCase;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opentripplanner.analyst.EmptyPolygonException;
import org.opentripplanner.analyst.PointFeature;
import org.opentripplanner.analyst.PointSet;
import org.opentripplanner.analyst.UnsupportedGeometryException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
public class PointSetTest extends TestCase {
public void testPointSets() throws IOException {
PointSet austin = PointSet.fromCsv(new File("src/test/resources/pointset/austin.csv"));
assertNotNull(austin);
assertEquals(austin.capacity, 15922);
assertEquals(-1, austin.getIndexForFeature("1"));
}
/** Factory method should return null but not throw an exception on malformed CSV. */
public void testBogusCSV() throws IOException {
PointSet points = PointSet.fromCsv(new File("src/test/resources/pointset/bogus.csv"));
assertNull(points);
}
public void testLoadGeoJson() {
PointSet points = PointSet.fromGeoJson(new File("src/test/resources/pointset/population.geo.json"));
assertNotNull(points);
assertEquals(points.capacity, 2);
assertEquals(1, points.getIndexForFeature(points.ids[1]));
assertEquals(0, points.getIndexForFeature(points.ids[0]));
assertEquals(-1, points.getIndexForFeature("THIS FEATURE DOES NOT EXIST."));
}
public void testLoadShapefile() throws NoSuchAuthorityCodeException, IOException, FactoryException, EmptyPolygonException, UnsupportedGeometryException {
PointSet points = PointSet.fromShapefile(new File("src/test/resources/pointset/shp/austin.shp"));
assertNotNull(points);
PointFeature ft = points.getFeature(0);
int pop = ft.getProperty("DEC_10_S_2");
assertEquals( pop, 42 );
}
public void testGetFeature() {
PointSet points = PointSet.fromGeoJson(new File("src/test/resources/pointset/population.geo.json"));
PointFeature pt = points.getFeature(0);
assertNotNull(pt);
assertEquals( pt.getId(), "XYZ0001");
Map<String,Integer> attrs = pt.getProperties();
assertEquals( attrs.size(), 2 );
assertEquals( pt.getProperty( "age" ), 10 );
}
public void testSlice() {
PointSet points = PointSet.fromGeoJson(new File("src/test/resources/pointset/population.geo.json"));
PointSet all = points.slice(0, points.featureCount());
assertEquals( all.featureCount(), points.featureCount() );
PointSet firstHalf = points.slice(0, 1);
assertEquals( firstHalf.featureCount(), 1 );
assertEquals( firstHalf.getFeature(0).getId(), "XYZ0001" );
PointSet lastHalf = points.slice(1, 2);
assertEquals( lastHalf.featureCount(), 1 );
assertEquals( lastHalf.getFeature(0).getId(), "XYZ0002" );
}
/**
* Load a point set from a GeoJson file, save it to a temporary file, then load it again. Assert
* that both versions are the same. This should test load and save.
*/
public void testSaveGeoJson() throws IOException {
PointSet points1 = PointSet.fromGeoJson(new File(
"src/test/resources/pointset/population.geo.json"));
File tempFile = File.createTempFile("population", "geo.json");
tempFile.deleteOnExit();
OutputStream out = new FileOutputStream(tempFile);
points1.writeJson(out);
out.close();
PointSet points2 = PointSet.fromGeoJson(tempFile);
assertEquals(points1.id, points2.id);
assertEquals(points1.label, points2.label);
assertEquals(points1.featureCount(), points2.featureCount());
for (int i = 0; i < points1.featureCount(); i++) {
PointFeature p1 = points1.getFeature(i);
PointFeature p2 = points2.getFeature(i);
assertEquals(p1.getId(), p1.getId());
assertEquals(p1.getLat(), p2.getLat());
assertEquals(p1.getLon(), p2.getLon());
assertEquals(p1.getProperties().size(), p2.getProperties().size());
for (Map.Entry<String, Integer> kv : p1.getProperties().entrySet()) {
assertEquals(kv.getValue(), new Integer(p2.getProperty(kv.getKey())));
}
}
}
}