前段时间的一个项目 本来用ae完成了种种的 查询,空间分析等等功能的代码,但是不幸的是 这是一个web项目,无奈 ae各种错误,显然ae放在server端是不好使的 无奈 一咬牙一跺脚 全部换 换成geotools 看文档 看api 从零 开始算是把 原来AE实现的东西 统统改了过来 用起来 反而觉得既稳定 效率还不错哈!
以下是部分功能总结:
1、连接数据库 这里使用的postgis 链接代码如下:
private static void conn(String dbtype, String host, String port,
String database, String userName, String password) {
Map<String, Object> params = new HashMap<String, Object>();
// params.put(PostgisNGDataStoreFactory.DBTYPE.key, "postgis"); // 两种代码方式
// params.put(PostgisNGDataStoreFactory.HOST.key, "localhost");
// params.put(PostgisNGDataStoreFactory.PORT.key, new Integer(5432));
// params.put(PostgisNGDataStoreFactory.DATABASE.key, "postgis");
// params.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
// params.put(PostgisNGDataStoreFactory.USER.key, "postgres");
// params.put(PostgisNGDataStoreFactory.PASSWD.key, "root");
params.put(PostgisNGDataStoreFactory.DBTYPE.key, dbtype);
params.put(PostgisNGDataStoreFactory.HOST.key, host);
params.put(PostgisNGDataStoreFactory.PORT.key, new Integer(port));
params.put(PostgisNGDataStoreFactory.DATABASE.key, database);
params.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
params.put(PostgisNGDataStoreFactory.USER.key, userName);
params.put(PostgisNGDataStoreFactory.PASSWD.key, password);
try {
pgDatastore = DataStoreFinder.getDataStore(params);
if (pgDatastore != null) {
System.out.println("系统连接到位于:" + host + "的空间数据库" + database
+ "成功!");
} else {
System.out.println("系统连接到位于:" + host + "的空间数据库" + database
+ "失败!请检查相关参数");
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("系统连接到位于:" + host + "的空间数据库" + database
+ "失败!请检查相关参数");
}
}
调用方法为:conn("postgis", "localhost", 5432, "postgis", "postgres", "root");
2、图层的操作
2.1 查询
public static ArrayList<SimpleFeature> queryMethod(String filterStr,
String layerName) {
//pgDatastore为上文连接数据库获取相当于AE中的workspace
//SimpleFeatureSource相当于AE中的featureClass
SimpleFeatureSource featureSource =pgDatastore.getFeatureSource(layerName);
ArrayList<SimpleFeature> featureList = new ArrayList<SimpleFeature>();
if(featureSource==null)
return featureList;
try {
Filter filter;
filter = CQL.toFilter(filterStr); // filterStr形式 如 name='武汉大学' or code like 'tt123%'
SimpleFeatureCollection result = featureSource.getFeatures(filter);
FeatureIterator<SimpleFeature> itertor = result.features();
while (itertor.hasNext()) {
SimpleFeature feature = itertor.next();
featureList.add(feature);
}
itertor.close();
return featureList;
} catch (CQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
2.2 要素操作 对上面4.1中的 SimpleFeature操作
//获取feature的geometry
Geometry geo&