今天我们来讲讲怎么扩展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数据源的更多相关文章

  1. geoserver 源码介绍

    上一章我们通过实现一个服务对如何扩展GeoServer有了一定的了解,但是,对于为何要这样做并没有说明,本章我们重点来说说GeoServer的结构,下图来自GeoServer官网(希望没有侵权),它很 ...

  2. 学习GeoServer遇到的问题及答案

    简介:本文的记录学习GeoServer遇到的问题,如果已有答案将会附上. 1.GeoServer介绍?,功能? GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 Ge ...

  3. PrestoSPI安全扩展

    由于Presto官方文档和谷歌搜索都没有相关的内容,git项目中也没有支持sentry的安全插件扩展,因此只能从源码中寻找答案,在梳理完SPI包的安全相关源码结构后,已实现了一个自定义的安全插件,经验 ...

  4. .Net Core Configuration Etcd数据源

    前言     .Net Core为我们提供了一套强大的Configuration配置系统,使用简单扩展性强.通过这套配置系统我们可以将Json.Xml.Ini等数据源加载到程序中,也可以自己扩展其他形 ...

  5. Spring AOP实现注解式的Mybatis多数据源切换

    一.为什么要使用多数据源切换? 多数据源切换是为了满足什么业务场景?正常情况下,一个微服务或者说一个WEB项目,在使用Mybatis作为数据库链接和操作框架的情况下通常只需要构建一个系统库,在该系统库 ...

  6. 《手写Mybatis》第5章:数据源的解析、创建和使用

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 管你吃几碗粉,有流量就行! 现在我们每天所接收的信息量越来越多,但很多的个人却没有多 ...

  7. KAOS模型

    问题描述: 我们开发了一种针对时序数据的文件格式TSFile,本身不支持sql查询.为了让公司分析人员能够用SQL进行分析,并且应用一些机器学习算法进行预测,需要设计并实现一个TSFile与Spark ...

  8. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

  9. windows下调用外部exe程序 SHELLEXECUTEINFO

    本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...

随机推荐

  1. Current limiter allows large USB bypass capacitance

    The USB (Universal Serial Bus) specification requires a connected USB device to present a load to th ...

  2. Spring EL bean引用实例

    在Spring EL,可以使用点(.)符号嵌套属性参考一个bean.例如,“bean.property_name”. public class Customer { @Value("#{ad ...

  3. sqlserver锁大全

    锁定提示                                 描述  HOLDLOCK        将共享锁保留到事务完成,而不是在相应的表.行或数据页不再需要时就立即释放锁.HOLDL ...

  4. arm交叉编译opencv

    问题:undefined reference to `pthread_spin_init'解:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthre ...

  5. jquery动态创建表格

    1.代码实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  6. ASP.NET 5 Beta5来了(翻译)

    在6月30日微软发布了ASP.NET 5 Beta5,我们可以从http://nuget.org上获取Beta5 的packages. 随着VS2015RC发布的ASP.NET 5的版本号是Beta4 ...

  7. SQL OUTER JOIN

    When we want to select out all the record from two table, no matter it's present at second table or ...

  8. MySQL服务器安装完之后如何调节性能

    原文作者: Peter Zaitsev原文来源: http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server ...

  9. Linux统计/监控工具SAR详细介绍

    转载:http://www.ctohome.com/FuWuQi/1b/688.html sysstat 工具简介 sysstat 是 Linux 系统中的常用工具包.它的主要用途是观察服务负载,比如 ...

  10. 在linux下安装mysql

    1.下载mysql 下载地址: http://dev.mysql.com/downloads/mysql/5.5.html#downloads 2.进入系统后,检测是否安装mysql #rpm -qa ...