shape檔案結構
- filename.shp: shapes
- filename.shx: 索引檔案
- filename.dbf: 結構化資料檔案
- filename.qix: 空間索引檔案
- filename.fix: fid索引檔案
- filename.sld: 樣式檔案
依賴
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>27.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>27.2</version>
</dependency>
創建連接
連接引數
| Parameter | required | Description |
|---|---|---|
| url | true | .shp檔案的url |
| namespace | false | FeatureType的URI |
| create spatial index | false | 是否創建空間索引,默認true |
| charset | false | 解碼DBF檔案的編碼,默認ISO_8859_1 |
| timezone | false | 決議DBF檔案時間的時區 |
| memory mapped buffer | false | 記憶體映射,默認false |
| cache and reuse memory maps | false | 使用記憶體映射時,快取并重用,默認true |
| enable spatial index | false | 是否使用空間索引,默認true |
代碼示例
/**
*
* 創建shape檔案
*
* */
FileDataStoreFactorySpi factory = new ShapefileDataStoreFactory();
//新建檔案
File file = new File("my.shp");
//datastore
Map<String, Object> params = new HashMap<>();
params.put("url", file.toURI().toURL());
params.put("create spatial index", Boolean.TRUE);
DataStore dataStore = factory.createNewDataStore(params);
//Feature資料定義
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
//圖層名
typeBuilder.setName("myLayer");
//空間坐標
typeBuilder.setCRS(CRS.decode("EPSG:4490"));
typeBuilder.add("the_geom", Point.class);
//普通屬性欄位
typeBuilder.add("id", String.class);
typeBuilder.length(10).add("name", String.class);//欄位長度
typeBuilder.add("number",Integer.class);
typeBuilder.add("double",Double.class);
typeBuilder.add("time",Date.class);
SimpleFeatureType featureType = typeBuilder.buildFeatureType();
//創建feature定義到shape
dataStore.createSchema(featureType);
/**
* 寫資料到shape檔案
*
* */
//shape中feature定義
Map<String, Object> params = new HashMap<>();
params.put("url", file.toURI().toURL());
DataStore dataStore2 = DataStoreFinder.getDataStore(params);
String typeName = dataStore2.getTypeNames()[0];
SimpleFeatureSource featureSource = dataStore2.getFeatureSource(typeName);
SimpleFeatureType schema = featureSource.getSchema();
//事務處理
Transaction transaction = new DefaultTransaction("create");
if (featureSource instanceof SimpleFeatureStore) {
SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
//創建一條資料 feature
List<SimpleFeature> features = new ArrayList<>();
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(schema);
Point point = geometryFactory.createPoint(new Coordinate(106.69563874,29.563694210810283));
featureBuilder.set("the_geom",point);
featureBuilder.set("id","id1");
featureBuilder.set("name","name1");
featureBuilder.set("number1",100);
featureBuilder.set("number2",66.0);
featureBuilder.set("time",new Date());
SimpleFeature feature = featureBuilder.buildFeature(null);
features.add(feature);
SimpleFeatureCollection collection = new ListFeatureCollection(schema, features);
featureStore.setTransaction(transaction);
try {
//寫入shape中
featureStore.addFeatures(collection);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
transaction.close();
}
} else {
System.out.println("寫入失敗");
}
/**
* 讀取shape檔案資料
*
* */
DataStore dataStore3 = new ShapefileDataStore(file.toURI().toURL());
String typeName = dataStore3.getTypeNames()[0];
FeatureSource<SimpleFeatureType, SimpleFeature> source =dataStore3.getFeatureSource(typeName);
Filter filter = Filter.INCLUDE;
FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures(filter);
try (FeatureIterator<SimpleFeature> features = collection.features()) {
//features必須關閉,否則會造成記憶體泄漏
while (features.hasNext()) {
SimpleFeature feature = features.next();
feature.getProperties().stream().peek(e-> System.out.println(e.getName().getLocalPart() + " = " + e.getValue()));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/551328.html
標籤:GIS
下一篇:返回列表
