建立连接
经过测试,这套连接逻辑除了支持纯PG以外,也支持人大金仓,凡是套壳PG的都可以尝试一下。我这里的测试环境是Geosence创建的pg SDE,数据库选用的是人大金仓。
/**
* 获取数据库连接资源
*
* @param connectConfig
* @return
* {@link PostgisNGDataStoreFactory} PostgisNGDataStoreFactory还有跟多的定制化参数可以进去看看
* @throws Exception
*/
public static DataStore ConnectDatabase(GISConnectConfig connectConfig) throws Exception {
if (pgDatastore != null) {
return pgDatastore;
}
//数据库连接参数配置
Map<String, Object> params = new HashMap<String, Object>();
// 数据库类型
params.put(PostgisNGDataStoreFactory.DBTYPE.key, connectConfig.getType());
params.put(PostgisNGDataStoreFactory.HOST.key, connectConfig.getHost());
params.put(PostgisNGDataStoreFactory.PORT.key, connectConfig.getPort());
// 数据库名
params.put(PostgisNGDataStoreFactory.DATABASE.key, connectConfig.getDataBase());
//用户名和密码
params.put(PostgisNGDataStoreFactory.USER.key, connectConfig.getUser());
params.put(PostgisNGDataStoreFactory.PASSWD.key, connectConfig.getPassword());
// 模式名称
params.put(PostgisNGDataStoreFactory.SCHEMA.key, "sde");
// 最大连接
params.put( PostgisNGDataStoreFactory.MAXCONN.key, 25);
// 最小连接
params.put(PostgisNGDataStoreFactory.MINCONN.key, 10);
// 超时时间
params.put( PostgisNGDataStoreFactory.MAXWAIT.key, 10);
try {
pgDatastore = DataStoreFinder.getDataStore(params);
return pgDatastore;
} catch (IOException e) {
LOG.error("获取数据源信息出错");
}
return null;
}
查询
- 查询所有的表格
/**
* 查询所有的表格
* @return
* @throws IOException
*/
public List<String> getAllTables() throws IOException {
String[] typeNames = this.dataStore.getTypeNames();
List<String> tables = Arrays.stream(typeNames).collect(Collectors.toList());
return tables;
}
属性查询&&空间查询通用
/**
* 查询要素
* @param layerName
* @param filter
* @return
* @throws IOException
*/
public SimpleFeatureCollection queryFeatures(String layerName, Filter filter) throws IOException {
SimpleFeatureCollection features = null;
try {
SimpleFeatureSource featureSource = dataStore.getFeatureSource(layerName);
features = featureSource.getFeatures(filter);
return features;
} catch (Exception e) {
e.printStackTrace();
}
return features;
}
- 属性筛选查询
用数据库查:

SELECT *FROM demoWHERE xmbh = '3308812023104' AND zzdybh = '3308812023104003' AND zzlx = '10'

用代码查:
SimpleFeatureCollection simpleFeatureCollection = pgTemplate.queryFeatures("demo", CQL.toFilter("xmbh = '3308812023104' AND zzdybh = '3308812023104003' AND zzlx = '10'"));

- 空间筛选
Geometry geometry = new WKTReader().read("Polygon ((119.13571152004580256 29.96675730309299368, 119.14239751148502933 29.62242874397260195, 119.49341206204465493 29.84975245290645063, 119.23265839591465465 30.0670471746814556, 119.13571152004580256 29.96675730309299368))");
// 直接写SQL
Filter filter = CQL.toFilter("INTERSECTS(shape," + geometry .toString() + ")");
// 或者使用FilterFactory
Within within = ff.within(ff.property("shape"), ff.literal(geometry));
SimpleFeatureCollection simpleFeatureCollection = pgTemplate.queryFeatures("demo", within);
如果不知道使用的什么关键字就比如相交INTERSECTS,可以点进对应的这个空间关系里去看这个Name,和这个保持一致。

总结:这里就在于怎么去写这个Filter,可以直接使用SQL语法。也可以自己去构造,需要借助这两个类
private static FilterFactory2 spatialFilterFc = CommonFactoryFinder.getFilterFactory2

本文详细介绍了如何在Java中使用PostgisNGDataStoreFactory获取和管理人大金仓数据库连接,包括获取连接、查询所有表格、执行SQL查询、空间筛选、追加要素、更新属性以及删除数据,展示了连接逻辑和常用操作的代码示例。
最低0.47元/天 解锁文章
1842

被折叠的 条评论
为什么被折叠?



