扩展GeoServer数据源
今天我们来讲讲怎么扩展GeoServer(简称GS)的数据源。大家都知道,GS支持多种数据源,而且都提供了友好的界面供操作。下面我们就来简单介绍一下,如何把自定义的数据源增加到GS中,让我们可以在统一风格的界面上愉快的操作。
要完成这个任务,需要如下四个步骤(以矢量数据为例):
1 创建一个类实现接口org.geotools.data.DataStoreFactorySpi(栅格数据实现org.geotools.coverage.grid.io.GridFormatFactorySpi);
2 在目录META-INF/services/下增加文件org.geotools.data.DataStoreFactorySpi,内容为刚创建的类的完全类名;
3 将编译好的classes复制到<GeoServer install path>\webapps\geoserver\WEB-INF\classes下,或者复制打包的jar文件到<GeoServer install path>\webapps\geoserver\WEB-INF\lib目录下;
4 重启GS服务。
这里提供一个例子:
package wj.demo.geocsv; import java.awt.RenderingHints.Key;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.logging.Logger; import org.geotools.data.AbstractDataStoreFactory;
import org.geotools.data.DataAccessFactory;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFactorySpi;
import org.geotools.data.DataUtilities;
import org.geotools.util.KVP;
import org.geotools.util.logging.Logging; public class GeoCSVFileDataStoreFactory extends AbstractDataStoreFactory
implements DataStoreFactorySpi { static final Logger LOGGER = Logging.getLogger("wj.demo.geosvc"); public static final DataAccessFactory.Param URLP = new DataAccessFactory.Param(
"url", URL.class, "url to a .csv file", true, null, new KVP(
new Object[] { "ext", "csv" })); public static final DataAccessFactory.Param GEO_FIELINDEX = new DataAccessFactory.Param(
"geofield", Integer.class, "Index of geometry field.", true, "0",
new KVP(new Object[] { "level", "advanced" })); public boolean canProcess(Map params) {
if (!super.canProcess(params))
return false;
try {
URL url = (URL) URLP.lookUp(params);
if (canProcess(url)) {
return true;
} Object geofld = GEO_FIELINDEX.lookUp(params);
File dir = DataUtilities.urlToFile(url); return (dir.isDirectory())
&& ((geofld == null) || (geofld instanceof Integer));
} catch (IOException e) {
}
return false;
} public boolean canProcess(URL f) {
return (f != null) && (f.getFile().toUpperCase().endsWith("CSV"));
} public String getDescription() {
return "Comma Separated Values(CSV) file (*.csv)";
} public String getDisplayName() {
return "CSV file";
} public Param[] getParametersInfo() {
return new DataAccessFactory.Param[] { URLP, GEO_FIELINDEX };
} public boolean isAvailable() {
return true;
} public Map<Key, ?> getImplementationHints() {
return Collections.EMPTY_MAP;
} public DataStore createDataStore(Map<String, Serializable> arg0)
throws IOException {
// TODO Auto-generated method stub
return null;
} public DataStore createNewDataStore(Map<String, Serializable> arg0)
throws IOException {
// TODO Auto-generated method stub
return null;
} }
检验成果:
用数据源创建界面的前后对比照来说明:
之前:
之后:
后记:
GS还提供了自定义录入界面的方法,这个以后再说。
扩展GeoServer数据源的更多相关文章
- geoserver 源码介绍
上一章我们通过实现一个服务对如何扩展GeoServer有了一定的了解,但是,对于为何要这样做并没有说明,本章我们重点来说说GeoServer的结构,下图来自GeoServer官网(希望没有侵权),它很 ...
- 学习GeoServer遇到的问题及答案
简介:本文的记录学习GeoServer遇到的问题,如果已有答案将会附上. 1.GeoServer介绍?,功能? GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 Ge ...
- PrestoSPI安全扩展
由于Presto官方文档和谷歌搜索都没有相关的内容,git项目中也没有支持sentry的安全插件扩展,因此只能从源码中寻找答案,在梳理完SPI包的安全相关源码结构后,已实现了一个自定义的安全插件,经验 ...
- .Net Core Configuration Etcd数据源
前言 .Net Core为我们提供了一套强大的Configuration配置系统,使用简单扩展性强.通过这套配置系统我们可以将Json.Xml.Ini等数据源加载到程序中,也可以自己扩展其他形 ...
- Spring AOP实现注解式的Mybatis多数据源切换
一.为什么要使用多数据源切换? 多数据源切换是为了满足什么业务场景?正常情况下,一个微服务或者说一个WEB项目,在使用Mybatis作为数据库链接和操作框架的情况下通常只需要构建一个系统库,在该系统库 ...
- 《手写Mybatis》第5章:数据源的解析、创建和使用
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 管你吃几碗粉,有流量就行! 现在我们每天所接收的信息量越来越多,但很多的个人却没有多 ...
- KAOS模型
问题描述: 我们开发了一种针对时序数据的文件格式TSFile,本身不支持sql查询.为了让公司分析人员能够用SQL进行分析,并且应用一些机器学习算法进行预测,需要设计并实现一个TSFile与Spark ...
- cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台
目录 [TOC] 1.基本概念 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...
- windows下调用外部exe程序 SHELLEXECUTEINFO
本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...
随机推荐
- Current limiter allows large USB bypass capacitance
The USB (Universal Serial Bus) specification requires a connected USB device to present a load to th ...
- Spring EL bean引用实例
在Spring EL,可以使用点(.)符号嵌套属性参考一个bean.例如,“bean.property_name”. public class Customer { @Value("#{ad ...
- sqlserver锁大全
锁定提示 描述 HOLDLOCK 将共享锁保留到事务完成,而不是在相应的表.行或数据页不再需要时就立即释放锁.HOLDL ...
- arm交叉编译opencv
问题:undefined reference to `pthread_spin_init'解:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthre ...
- jquery动态创建表格
1.代码实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- ASP.NET 5 Beta5来了(翻译)
在6月30日微软发布了ASP.NET 5 Beta5,我们可以从http://nuget.org上获取Beta5 的packages. 随着VS2015RC发布的ASP.NET 5的版本号是Beta4 ...
- SQL OUTER JOIN
When we want to select out all the record from two table, no matter it's present at second table or ...
- MySQL服务器安装完之后如何调节性能
原文作者: Peter Zaitsev原文来源: http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server ...
- Linux统计/监控工具SAR详细介绍
转载:http://www.ctohome.com/FuWuQi/1b/688.html sysstat 工具简介 sysstat 是 Linux 系统中的常用工具包.它的主要用途是观察服务负载,比如 ...
- 在linux下安装mysql
1.下载mysql 下载地址: http://dev.mysql.com/downloads/mysql/5.5.html#downloads 2.进入系统后,检测是否安装mysql #rpm -qa ...