geotools工具包的Java使用
时间: 2023-11-29 20:05:50 浏览: 33
Geotools是一个用Java编写的开源GIS工具包,提供了许多用于处理空间数据的工具和库。以下是使用Geotools的一些示例:
1. 创建一个Shapefile:
```java
// 创建一个Shapefile
File newFile = new File("newShapefile.shp");
Map<String, Serializable> params = new HashMap<String, Serializable>();
params.put(ShapefileDataStoreFactory.URLP.key, newFile.toURI().toURL());
DataStore newDataStore = DataStoreFinder.getDataStore(params);
// 定义数据结构
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("Location");
typeBuilder.add("the_geom", Point.class, DefaultGeographicCRS.WGS84);
typeBuilder.add("Name", String.class);
typeBuilder.add("Number", Integer.class);
SimpleFeatureType locationType = typeBuilder.buildFeatureType();
// 将数据写入Shapefile
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(locationType);
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Point point = geometryFactory.createPoint(new Coordinate(-122.426979, 37.753558));
featureBuilder.add(point);
featureBuilder.add("San Francisco");
featureBuilder.add(1);
SimpleFeature feature = featureBuilder.buildFeature(null);
List<SimpleFeature> features = new ArrayList<SimpleFeature>();
features.add(feature);
SimpleFeatureCollection collection = new ListFeatureCollection(locationType, features);
newDataStore.createSchema(locationType);
Transaction transaction = new DefaultTransaction("create");
String typeName = newDataStore.getTypeNames()[0];
SimpleFeatureSource featureSource = newDataStore.getFeatureSource(typeName);
if (featureSource instanceof SimpleFeatureStore) {
SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
featureStore.setTransaction(transaction);
try {
featureStore.addFeatures(collection);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
transaction.close();
}
}
newDataStore.dispose();
```
2. 读取一个Shapefile:
```java
// 读取一个Shapefile
File file = new File("shapefile.shp");
Map<String, Object> map = new HashMap<String, Object>();
map.put("url", file.toURI().toURL());
DataStore dataStore = DataStoreFinder.getDataStore(map);
String typeName = dataStore.getTypeNames()[0];
SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);
SimpleFeatureCollection collection = featureSource.getFeatures();
SimpleFeatureIterator iterator = collection.features();
while (iterator.hasNext()) {
SimpleFeature feature = iterator.next();
System.out.println(feature.getID() + ": " + feature.getAttribute("Name"));
}
iterator.close();
dataStore.dispose();
```
3. 进行空间查询:
```java
// 进行空间查询
File file = new File("shapefile.shp");
Map<String, Object> map = new HashMap<String, Object>();
map.put("url", file.toURI().toURL());
DataStore dataStore = DataStoreFinder.getDataStore(map);
String typeName = dataStore.getTypeNames()[0];
SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);
Filter filter = CQL.toFilter("CONTAINS(the_geom, POINT(-122.426979 37.753558))");
SimpleFeatureCollection collection = featureSource.getFeatures(filter);
SimpleFeatureIterator iterator = collection.features();
while (iterator.hasNext()) {
SimpleFeature feature = iterator.next();
System.out.println(feature.getID() + ": " + feature.getAttribute("Name"));
}
iterator.close();
dataStore.dispose();
```
这些示例演示了一些基本的Geotools操作,更多的用法可以在Geotools官方文档中找到。