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)

原文链接:https://www.cnblogs.com/walkAlwaysInCode/p/17347714.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Geotools基本增删改查Feature - Python技术站

(0)
上一篇 2023年4月24日 下午12:14
下一篇 2023年4月24日

相关文章

  • kafka运维consumer-groups.sh消费者组管理

    Kafka运维:consumer-groups.sh消费者组管理 什么是消费者组 Kafka中的消费者组是由一组消费者共同消费一个或多个主题(topics)的机制。消费者组可以有效地提高消息的吞吐量,同时还提供了在消费者之间分摊相同数量的分区以实现负载均衡的机制。 consumer-groups.sh命令 consumer-groups.sh是Kafka提供…

    Java 2023年5月20日
    00
  • 常见的Java诊断工具有哪些?

    常见的Java诊断工具包括以下几类: 1. JVM监控工具 这类工具主要是对Java虚拟机进行监控,例如查看程序运行时的内存情况、线程情况等。 示例使用 jstat 工具 jstat能够监控JVM中的各种指标,例如 HeapSize、Class装载信息、GC情况、线程运行情况等等。以下是使用 jstat 命令来查看 heap usage 的示例: jstat…

    Java 2023年5月11日
    00
  • Java中Controller引起的Ambiguous mapping问题及解决

    首先我们需要明确什么是Controller及Ambiguous mapping问题。 什么是Controller 在Java Web应用中,Controller是一种将请求路由到相应处理程序的设计模式。在Spring MVC框架中,Controller是处理请求的核心组件,它负责接收请求、调用处理程序并返回响应。 什么是Ambiguous mapping问题…

    Java 2023年5月25日
    00
  • SSH框架网上商城项目第3战之使用EasyUI搭建后台页面框架

    下面是 “SSH框架网上商城项目第3战之使用EasyUI搭建后台页面框架” 的完整攻略。 概述 本文将详细介绍如何使用EasyUI搭建后台管理系统页面框架。具体来说,我们将通过以下步骤实现: 引入EasyUI框架和jQuery库; 编写HTML代码,建立基础的页面框架结构; 编写JavaScript代码,调用EasyUI组件,实现各种页面布局、交互效果和表单…

    Java 2023年5月20日
    00
  • springmvc—handlermapping三种映射方式

    Spring MVC是一种基于Java的Web框架,它提供了多种方式来处理请求和响应。其中,Handler Mapping是Spring MVC中的一个重要组件,它用于将请求映射到相应的控制器方法。在Spring MVC中,有三种常用的Handler Mapping方式:BeanNameUrlHandlerMapping、RequestMappingHand…

    Java 2023年5月17日
    00
  • java实现网上购物车程序

    为了实现网上购物车程序,需要遵循以下步骤: 1. 设计数据库结构 网上购物车程序需要一个数据库来存储用户数据和商品数据,因此需要首先设计好数据库结构,并创建相应的数据表,保证程序的正常使用。 以下是一个简化版的数据库结构示例: user表 字段名 类型 默认值 描述 id int PRIMARY KEY 用户ID username varchar(50) N…

    Java 2023年5月19日
    00
  • Hibernate中Session增删改查操作代码详解

    Hibernate中Session增删改查操作详解 什么是Hibernate Session Hibernate是一个优秀的ORM框架,其核心是由多个API组成,其中最重要的是Session。Session是用于与数据库进行交互的主要接口之一,它提供了一系列的增删改查方法,这些方法需要依赖于Hibernate配置的实体类(Entity)的映射关系在数据库中完…

    Java 2023年5月20日
    00
  • Java8 Instant 时间戳实例讲解

    Java8 Instant 时间戳实例讲解 在 Java8 中,引入了 java.time 包,包含了一系列新的日期时间 API,其中 Instant 类可以用来表示时间戳。本文将详细讲解 Instant 类的使用。 Instant 类概述 Instant 类是不可变且线程安全的,它以 Unix 时间戳的形式存储时间,精确到纳秒。Unix 时间戳是指从 19…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部