package com.revolsys.geometry.test.util;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import com.revolsys.geometry.io.GeometryReader;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.test.old.junit.GeometryUtils;
import com.revolsys.geometry.wkb.ParseException;
import com.revolsys.geometry.wkb.WKBHexFileReader;
import com.revolsys.geometry.wkb.WKBReader;
import com.revolsys.spring.resource.FileSystemResource;
public class IOUtil {
public static Geometry readGeometriesFromFile(final String filename,
final GeometryFactory geomFact) throws Exception, IOException {
final String ext = TestFileUtil.getFileNameExtension(filename);
if (ext.equalsIgnoreCase(".shp")) {
try (
GeometryReader reader = GeometryReader
.newGeometryReader(new FileSystemResource(filename))) {
final List<Geometry> geometries = reader.toList();
if (geometries.isEmpty()) {
return geomFact.geometryCollection();
} else {
final GeometryFactory geometryFactory = geometries.get(0).getGeometryFactory();
return geometryFactory.geometryCollection(geometries);
}
}
}
if (ext.equalsIgnoreCase(".wkb")) {
return readGeometryFromWKBHexFile(filename, geomFact);
}
return readGeometriesFromWKTFile(filename, geomFact);
}
public static Geometry readGeometriesFromWKBHexString(final String wkb,
final GeometryFactory geomFact) throws ParseException, IOException {
final WKBReader reader = new WKBReader(geomFact);
final WKBHexFileReader fileReader = new WKBHexFileReader(new StringReader(wkb), reader);
final List geomList = fileReader.read();
if (geomList.size() == 1) {
return (Geometry)geomList.get(0);
}
return geomFact.geometryCollection(geomList);
}
private static Geometry readGeometriesFromWKTFile(final String filename,
final GeometryFactory geomFact) throws ParseException, IOException {
return readGeometriesFromWKTString(TestFileUtil.readText(filename), geomFact);
}
/**
* Reads one or more WKT geometries from a string.
*
* @param wkt
* @param geomFactory
* @return the geometry read
* @throws ParseException
* @throws IOException
*/
public static Geometry readGeometriesFromWKTString(final String wkt,
final GeometryFactory geomFactory) throws ParseException, IOException {
final List<Geometry> geomList = GeometryUtils.readWKTFile(geomFactory, new StringReader(wkt));
if (geomList.size() == 1) {
return geomList.get(0);
}
return geomFactory.geometryCollection(geomList);
}
private static Geometry readGeometryFromWKBHexFile(final String filename,
final GeometryFactory geomFact) throws ParseException, IOException {
return readGeometriesFromWKBHexString(TestFileUtil.readText(filename), geomFact);
}
}