Geotools基本增删改查Feature
Posted 行走于代码中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Geotools基本增删改查Feature相关的知识,希望对你有一定的参考价值。
postgis依赖
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>27.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-jdbc-postgis</artifactId>
<version>27.2</version>
</dependency>
创建连接JDBCDataStore
Map<String, String> params = Map.of(
PostgisNGDataStoreFactory.HOST.key, host,
PostgisNGDataStoreFactory.PORT.key, port,
PostgisNGDataStoreFactory.DATABASE.key, database,
PostgisNGDataStoreFactory.SCHEMA.key, schema,
PostgisNGDataStoreFactory.USER.key, user,
PostgisNGDataStoreFactory.PASSWD.key, passwd,
PostgisNGDataStoreFactory.DBTYPE.key, dbtype
);
JDBCDataStore jdbcDataStore = (JDBCDataStore)DataStoreFinder.getDataStore(params);
JDBCDataStore连接参数
Parameter | Description |
---|---|
dbtype | Must be the string postgis |
host | Machine name or IP address to connect to |
port | Port number to connect to, default 5432 |
schema | The database schema to access |
database | The database to connect to |
user | User name |
passwd | Password |
loose bbox | Flag controlling loose bbox comparisons, default is true |
preparedStatements | Flag controlling whether prepared statements are used, default is false |
encode functions | Flag controlling if some common functions can be encoded into their SQL equivalent |
连接池参数
Parameter | Description |
---|---|
max connections | Maximum number of connection the pool will hold at any time, default is 10 |
min connections | Minimum number of connection the pool will hold at any time, default is 1 |
connection timeout | Maximum number of second the pool will wait when trying to obtain a connection, default is 20 seconds |
validate connections | Flag controlling if the pool should validate connections when a new connection is obtained |
Max open prepared statements | Maximum number of prepared statements kept open and cached for each connection in the pool. Set to 0 to have unbounded caching, -1 to disable |
Test while idle | Periodically test if the connections are still valid also while idle in the pool |
Time between evictor runs | Number of seconds between idle object evictor runs. The default value is 300 seconds. |
Min evictable time | Number of seconds a connection needs to stay idle before the evictor starts to consider closing it |
Evictor tests per run | Number of connections checked by the idle connection evictor for each of its runs. The default value is 3 connections. |
过滤器-Filter
使用过滤器来定义要对其进行操作的Feature集合。过滤器也可以组合成一个操作集合使用。
简单说,过滤器相当于SQL语句的WHERE子句中存在的信息。
Filter有多个子类,实现了许多类型的过滤器,包括简单的属性比较和空间查询。
// 普通字段
FilterFactory ff = CommonFactoryFinder.getFilterFactory();
/**
* field 字段名
* value 条件值
* geometry 条件几何体
*
*
* matchCase 是否区分大小写,默认true-区分
* MatchAction(实现MultiValuedFilter的会有),匹配逻辑
* MatchAction.ANY-任何一个满足,默认值
* MatchAction.ALL-全部满足
* MatchAction.ONE-只有一个满足
* */
PropertyIsEqualTo equal = ff.equal(ff.property(field), ff.literal(value), true);//等于
PropertyIsLike like = ff.like(ff.property(field), "%keywords%");//模糊匹配
PropertyIsNotEqualTo notEqualTo = ff.notEqual(ff.property(field), ff.literal(value));//不等于
PropertyIsNull aNull = ff.isNull(ff.property(field));//null
PropertyIsGreaterThan greater = ff.greater(ff.property(field), ff.literal(value));// 大于
PropertyIsGreaterThanOrEqualTo greaterOrEqual = ff.greaterOrEqual(ff.property(field), ff.literal(value));// 大于等于
PropertyIsLessThan less = ff.less(ff.property(field), ff.literal(value));//小于
PropertyIsLessThanOrEqualTo lessOrEqual = ff.lessOrEqual(ff.property(field), ff.literal(value));//小于等于
PropertyIsBetween between = ff.between(ff.property(field), ff.literal(value), ff.literal(value));//在...之间
During during = ff.during(ff.property(field), ff.literal(value));//在时间期间
Before before = ff.before(ff.property(field), ff.literal(value));//在时间之前
After after = ff.after(ff.property(field), ff.literal(value));//在时间之后
// Geometry字段
FilterFactory2 ff2 = CommonFactoryFinder.getFilterFactory2();
Beyond beyond = ff2.beyond(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry), 100.0, Units.METRE.name);// 图层几何字段超出给定几何100米距离的
Contains contains = ff2.contains(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry));// 图层几何字段包含给定几何
Within within = ff2.within(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry));// 图层几何字段被给定几何包含
Intersects intersects = ff2.intersects(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry));// 图层几何字段与给定几何相交
Disjoint disjoint = ff2.disjoint(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry));// 图层几何字段与给定几何不相交
Touches touches = ff2.touches(ff2.property(featureSource.schema.geometryDescriptor.localName), ff2.literal(geometry));// 图层几何字段与给定几何相切
// filter集合的逻辑关系,and并,or或,not非
And and = ff.and(List.of(equal,like,beyond));//
Or or = ff.or(List.of(notEqualTo,greater,contains));
Not not = ff.not(during);
// Function的实现类具体实现函数,name-函数名,例如:min,strReplace,toWKT
Function function = ff.function(name,expr1,exprN);
PropertyName property = ff.property(field);
Literal v = ff.literal(value);
Function min = ff.function("min", property, v);
PropertyName property = ff.property(field);
Literal search = ff.literal("search");
Literal replace = ff.literal("replace");
Literal all = ff.literal( true );
Function replace = ff.function("strReplace", new Expression[]property,search,replace,all);
PropertyName property = ff.property(featureSource.schema.geometryDescriptor.localName);
Function toWKT = ff.function("toWKT", property);
查询
/**
* tableName 表名
* filter 过滤器
* List<String> propNames 字段名列表
*
* startIndex 起始位
* maxFeatures 最大条数
* sortField 排序字段名
* */
ContentFeatureSource featureSource = (ContentFeatureSource) jdbcDataStore.getFeatureSource(tableName);
//返回字段列
List<PropertyName> propertyNames = propNames.stream().map(ff::property).collect(Collectors.toList());
Query query = new Query(tableName,filter,propertyNames);
int count = featureSource.getCount(query);//计数
// 分页,倒序
query.setStartIndex(startIndex);
query.setMaxFeatures(maxFeatures);
query.setSortBy(new SortByImpl(ff.property(sortField), SortOrder.DESCENDING));
ContentFeatureCollection collection = featureSource.getFeatures(query);
SimpleFeatureIterator iterator = collection.features();
// SimpleFeatureIterator必须关闭,否则会造成内存泄漏
iterator.close();
新增
/**
* tableName 图层名
* fieldName1 字段名
* fieldValue1 字段值
**/
ContentFeatureSource featureSource = (ContentFeatureSource) jdbcDataStore.getFeatureSource(tableName);
SimpleFeatureStore store = (SimpleFeatureStore)featureSource; // write access!
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(store.getSchema());
featureBuilder.set(fieldName1,fieldValue1);
featureBuilder.set(fieldNameN,fieldValueN);
SimpleFeature feature = featureBuilder.buildFeature(null);
ListFeatureCollection featureCollection = new ListFeatureCollection(store.getSchema(), List.of(feature));
List<FeatureId> addFeatures = store.addFeatures(featureCollection);
删除
/**
*
* typeName 图层名
* fliter 过滤条件
*
*/
ContentFeatureSource featureSource = (ContentFeatureSource) jdbcDataStore.getFeatureSource(tableName);
SimpleFeatureStore store = (SimpleFeatureStore)featureSource; // write access!
store.removeFeatures(filter);
修改
/**
*
* typeName 图层名
* names 修改字段名数组
* values 修改值数组
* fliter 过滤条件
* names和values顺序保持一致
*/
ContentFeatureSource featureSource = (ContentFeatureSource) jdbcDataStore.getFeatureSource(tableName);
SimpleFeatureStore store = (SimpleFeatureStore)featureSource; // write access!
store.modifyFeature(names, values, filter)
增删改查sql语句
sql语句最基本就是增删改查。
软件:sqlserver2005
电脑:WIN10
系统:ISO
1、点击management studio,连接到你的数据库。
2、在你要操作的数据库点击右键--新建查询。
3、插入语句,在右侧输入命令,执行,如图3。
4、删除语句,我们把刚刚添加的删除,在右侧输入命令,执行,如图4。
5、修改语句,在右侧输入命令,查询一下看是不是改了。
参考技术A1、数据库增加数据:
1)插入单行
insert [into] <表名> (列名) values (列值)
例:insert into t_table (name,sex,birthday) values ('开心朋朋','男','1980/6/15')
2)将现有表数据添加到一个已有表 insert into <已有的新表> (列名) select <原表列名> from <原表名>
例:insert into t_table ('姓名','地址','电子邮件')
select name,address,email from t_table
3)直接拿现有表数据创建一个新表并填充 select <新建表列名> into <新建表名> from <源表名>例:select name,address,email into t_table from strde
2、数据库删除数据:
1)删除<满足条件的>行
delete from <表名> [where <删除条件>]。
例:delete from t_table where name='开心朋朋'(删除表t_table中列值为开心朋朋的行)
2)删除整个表 truncate table <表名>
truncate table tongxunlu
注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用语有外建约束引用的表
3、数据库修改数据 update <表名> set <列名=更新值> [where <更新条件>]
例:update t_table set age=18 where name='蓝色小名'
4、数据库查询数据:
1)精确(条件)查询
select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]
2)查询所有数据行和列。例:select * from a
说明:查询a表中所有行和列
3)使用like进行模糊查询
注意:like运算副只用于字符串,所以仅与char和varchar数据类型联合使用
例:select * from a where name like '赵%'
说明:查询显示表a中,name字段第一个字为赵的记录
4)使用between在某个范围内进行查询
例:select * from a where nianling between 18 and 20
说明:查询显示表a中nianling在18到20之间的记录
5)使用in在列举值内进行查询
例:select name from a where address in ('北京','上海','唐山')
说明:查询表a中address值为北京或者上海或者唐山的记录,显示name字段
扩展资料:
插入之前需要创建数据表,创建方式如下:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
例如:--流程步骤定义表
create table T_flow_step_def(
Step_no int not null, --流程步骤ID
Step_name varchar(30) not null, --流程步骤名称
Step_des varchar(64) not null, --流程步骤描述
Limit_time int not null, --时限
URL varchar(64) not null, --二级菜单链接
Remark varchar(256) not null,
)
参考资料:百度百科-sql语句大全
以上是关于Geotools基本增删改查Feature的主要内容,如果未能解决你的问题,请参考以下文章