我试图从esri shapefiles在java中获得属性表,但我只设法获得使用Geotools库的头表?这是我的源代码:
File dbfFile = new File("C:/Users/ilyasse2.0/Desktop/shapefiles/marocShp/mar_admbndp_admALL_unhcr_itos_20201203.dbf");
FileInputStream fis = new FileInputStream(dbfFile);
DbaseFileReader dbfReader = new DbaseFileReader(fis.getChannel(), false, Charset.forName("ISO-8859-1"));
DbaseFileHeader dbfHeader = dbfReader.getHeader();
System.out.println(dbfHeader.getRecordLength());
List<String> names = new Vector<String>();
int n = dbfHeader.getNumFields();
for (int i = 0; i < n; i++) names.add(dbfHeader.getFieldName(i));
System.out.println(names);
您需要使用ShapefileDataStore
来读取Shapefile,然后可以遍历功能并提取属性。注意:文件应该以.shp
结尾,GeoTools会找到其他必要的文件。
List attributes = new ArrayList<>();
FileDataStore store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource source = store.getFeatureSource();
FeatureType schema = source.getSchema();
try(SimpleFeatureCollection features = source.getFeatures();SimpleFeatureIterator iterator = featureCollection.features()) {
while (iterator.hasNext()) {
// copy the contents of each feature and transform the geometry
SimpleFeature feature = iterator.next();
attributes.add(feature.getAttributes());
}
}