📄 indexedshapefiledatastoretest.java
字号:
writer = sds.getFeatureWriter(sds.getTypeNames()[0],
Filter.INCLUDE, Transaction.AUTO_COMMIT);
while (writer.hasNext()) {
SimpleFeature feat = writer.next();
Byte b = (Byte) feat.getAttribute(1);
if ((b.byteValue() % 2) == 0) {
writer.remove();
} else {
feat.setAttribute(1, new Byte((byte) -1));
}
}
} finally {
if (writer != null) {
writer.close();
}
}
FeatureCollection<SimpleFeatureType, SimpleFeature> fc = loadFeatures(sds);
assertEquals(10, fc.size());
for (FeatureIterator<SimpleFeature> i = fc.features(); i.hasNext();) {
assertEquals(-1, ((Byte) i.next().getAttribute(1)).byteValue());
}
sds.dispose();
} catch (Throwable t) {
if (System.getProperty("os.name").startsWith("Windows")) {
System.out.println("Ignore " + t
+ " because you are on windows");
return;
} else {
throw t;
}
}
}
/**
* Create a test file, then continue removing the first entry until there
* are no features left.
*/
public void testRemoveFromFrontAndClose() throws Throwable {
try {
IndexedShapefileDataStore sds = createDataStore();
int idx = loadFeatures(sds).size();
while (idx > 0) {
FeatureWriter<SimpleFeatureType, SimpleFeature> writer = null;
try {
writer = sds.getFeatureWriter(sds.getTypeNames()[0],
Filter.INCLUDE, Transaction.AUTO_COMMIT);
writer.next();
writer.remove();
} finally {
if (writer != null) {
writer.close();
writer = null;
}
}
assertEquals(--idx, loadFeatures(sds).size());
}
sds.dispose();
} catch (Throwable t) {
if (System.getProperty("os.name").startsWith("Windows")) {
System.out.println("Ignore " + t
+ " because you are on windows");
return;
} else {
throw t;
}
}
}
/**
* Create a test file, then continue removing the last entry until there are
* no features left.
*/
public void testRemoveFromBackAndClose() throws Throwable {
try {
IndexedShapefileDataStore sds = createDataStore();
int idx = loadFeatures(sds).size();
while (idx > 0) {
FeatureWriter<SimpleFeatureType, SimpleFeature> writer = null;
try {
writer = sds.getFeatureWriter(sds.getTypeNames()[0],
Filter.INCLUDE, Transaction.AUTO_COMMIT);
while (writer.hasNext()) {
writer.next();
}
writer.remove();
} finally {
if (writer != null) {
writer.close();
writer = null;
}
}
assertEquals(--idx, loadFeatures(sds).size());
}
sds.dispose();
} catch (Throwable t) {
if (System.getProperty("os.name").startsWith("Windows")) {
System.out.println("Ignore " + t
+ " because you are on windows");
return;
} else {
throw t;
}
}
}
public void testTestTransaction() throws Exception {
IndexedShapefileDataStore sds = createDataStore();
int idx = sds.getCount(Query.ALL);
FeatureStore<SimpleFeatureType, SimpleFeature> store = (FeatureStore<SimpleFeatureType, SimpleFeature>) sds.getFeatureSource(sds
.getTypeNames()[0]);
Transaction transaction = new DefaultTransaction();
store.setTransaction(transaction);
SimpleFeature[] newFeatures1 = new SimpleFeature[1];
SimpleFeature[] newFeatures2 = new SimpleFeature[2];
GeometryFactory fac = new GeometryFactory();
newFeatures1[0] = DataUtilities.template(sds.getSchema());
newFeatures1[0].setDefaultGeometry(fac
.createPoint(new Coordinate(0, 0)));
newFeatures2[0] = DataUtilities.template(sds.getSchema());
newFeatures2[0].setDefaultGeometry(fac
.createPoint(new Coordinate(0, 0)));
newFeatures2[1] = DataUtilities.template(sds.getSchema());
newFeatures2[1].setDefaultGeometry(fac
.createPoint(new Coordinate(0, 0)));
store.addFeatures(DataUtilities.collection(newFeatures1));
store.addFeatures(DataUtilities.collection(newFeatures2));
transaction.commit();
transaction.close();
assertEquals(idx + 3, sds.getCount(Query.ALL));
sds.dispose();
}
private SimpleFeatureType createExampleSchema() {
SimpleFeatureTypeBuilder build = new SimpleFeatureTypeBuilder();
build.setName("junk");
build.add("a", Point.class);
build.add("b", Byte.class);
build.add("c", Short.class);
build.add("d", Double.class);
build.add("e", Float.class);
build.add("f", String.class);
build.add("g", Date.class);
build.add("h", Boolean.class);
build.add("i", Number.class);
build.add("j", Long.class);
build.add("k", BigDecimal.class);
build.add("l", BigInteger.class);
return build.buildFeatureType();
}
private FeatureCollection<SimpleFeatureType, SimpleFeature> createFeatureCollection() throws Exception {
SimpleFeatureType featureType = createExampleSchema();
SimpleFeatureBuilder build = new SimpleFeatureBuilder(featureType);
FeatureCollection<SimpleFeatureType, SimpleFeature> features = FeatureCollections.newCollection();
for (int i = 0, ii = 20; i < ii; i++) {
build.add(new GeometryFactory().createPoint(new Coordinate(1, -1)));
build.add(new Byte((byte) i));
build.add(new Short((short) i));
build.add(new Double(i));
build.add(new Float(i));
build.add(new String(i + " "));
build.add(new Date(i));
build.add(new Boolean(true));
build.add(new Integer(22));
build.add(new Long(1234567890123456789L));
build.add(new BigDecimal(new BigInteger(
"12345678901234567890123456789"), 2));
build.add(new BigInteger("12345678901234567890123456789"));
SimpleFeature feature = build.buildFeature(null);
features.add(feature);
}
return features;
}
public void testAttributesWriting() throws Exception {
FeatureCollection<SimpleFeatureType, SimpleFeature> features = createFeatureCollection();
File tmpFile = getTempFile();
tmpFile.createNewFile();
IndexedShapefileDataStore s = new IndexedShapefileDataStore(tmpFile
.toURL());
writeFeatures(s, features);
s.dispose();
}
public void testGeometriesWriting() throws Exception {
String[] wktResources = new String[] { "point", "multipoint", "line",
"multiline", "polygon", "multipolygon" };
for (int i = 0; i < wktResources.length; i++) {
Geometry geom = readGeometry(wktResources[i]);
String testName = wktResources[i];
try {
runWriteReadTest(geom, false);
make3D(geom);
testName += "3d";
runWriteReadTest(geom, true);
} catch (Throwable e) {
throw new Exception("Error in " + testName, e);
}
}
}
private void make3D(Geometry g) {
Coordinate[] c = g.getCoordinates();
for (int i = 0, ii = c.length; i < ii; i++) {
c[i].z = 42 + i;
}
}
private void writeFeatures(IndexedShapefileDataStore s, FeatureCollection<SimpleFeatureType, SimpleFeature> fc)
throws Exception {
s.createSchema(fc.features().next().getFeatureType());
FeatureWriter<SimpleFeatureType, SimpleFeature> fw = s.getFeatureWriter(s.getTypeNames()[0],
Transaction.AUTO_COMMIT);
FeatureIterator<SimpleFeature> it = fc.features();
while (it.hasNext()) {
SimpleFeature feature = it.next();
SimpleFeature newFeature = fw.next();
newFeature.setAttributes(feature.getAttributes());
fw.write();
}
fw.close();
assertEquals(20, s.getFeatureSource().getFeatures().size());
}
private void runWriteReadTest(Geometry geom, boolean d3) throws Exception {
// make features
SimpleFeatureTypeBuilder ftb = new SimpleFeatureTypeBuilder();
ftb.setName("Junk");
ftb.add("a", geom.getClass());
SimpleFeatureType type = ftb.buildFeatureType();
FeatureCollection<SimpleFeatureType, SimpleFeature> features = FeatureCollections.newCollection();
for (int i = 0, ii = 20; i < ii; i++) {
SimpleFeature feature = SimpleFeatureBuilder.build(type,
new Object[] { geom.clone() }, null);
features.add(feature);
}
// set up file
File tmpFile = getTempFile();
tmpFile.delete();
// write features
IndexedShapefileDataStore s = new IndexedShapefileDataStore(tmpFile
.toURL());
s.createSchema(type);
writeFeatures(s, features);
s.dispose();
// read features
s = new IndexedShapefileDataStore(tmpFile.toURL());
FeatureCollection<SimpleFeatureType, SimpleFeature> fc = loadFeatures(s);
FeatureIterator<SimpleFeature> fci = fc.features();
// verify
while (fci.hasNext()) {
SimpleFeature f = fci.next();
Geometry fromShape = (Geometry) f.getDefaultGeometry();
if (fromShape instanceof GeometryCollection) {
if (!(geom instanceof GeometryCollection)) {
fromShape = ((GeometryCollection) fromShape)
.getGeometryN(0);
}
}
try {
Coordinate[] c1 = geom.getCoordinates();
Coordinate[] c2 = fromShape.getCoordinates();
for (int cc = 0, ccc = c1.length; cc < ccc; cc++) {
if (d3) {
assertTrue(c1[cc].equals3D(c2[cc]));
} else {
assertTrue(c1[cc].equals2D(c2[cc]));
}
}
} catch (Throwable t) {
fail("Bogus : " + Arrays.asList(geom.getCoordinates()) + " : "
+ Arrays.asList(fromShape.getCoordinates()));
}
}
s.dispose();
tmpFile.delete();
}
public void testIndexOutOfDate() throws Exception {
File shpFile = copyShapefiles(STATE_POP);
ShpFileType fix = ShpFileType.FIX;
File fixFile = sibling(shpFile, fix.extension);
fixFile.delete();
IndexedShapefileDataStore ds = new IndexedShapefileDataStore(shpFile.toURI().toURL());
assertFalse(ds.needsGeneration(fix));
long fixMod = fixFile.lastModified();
shpFile.setLastModified(fixMod+1000);
assertTrue(ds.needsGeneration(fix));
fixFile.setLastModified(shpFile.lastModified());
assertFalse(ds.needsGeneration(fix));
assertTrue(fixFile.delete());
assertTrue(ds.needsGeneration(fix));
ds.dispose();
}
public static void main(java.lang.String[] args) throws Exception {
junit.textui.TestRunner.run(suite(IndexedShapefileDataStoreTest.class));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -