扩展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数据源

时间: 2024-08-25 11:21:39

扩展GeoServer数据源的相关文章

geoserver 源码介绍

上一章我们通过实现一个服务对如何扩展GeoServer有了一定的了解,但是,对于为何要这样做并没有说明,本章我们重点来说说GeoServer的结构,下图来自GeoServer官网(希望没有侵权),它很好的揭示了GeoServer处理请求的全过程. 我们说GeoServer使用Spring框架来构建,这里就可以看到Spring的使用,虚线框中的Restlet就是用Spring引入系统的,每个服务包的“applicationContext.xml”文件里都包含了描述Route映射的信息,例如WMS就

windows下调用外部exe程序 SHELLEXECUTEINFO

本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: 1 typedef struct _SHELLEXECUTEINFO { 2 DWORD cbSize; 3 ULONG fMask; 4 HWND hwnd; 5 LPCTSTR lpVerb; 6 LPCTSTR lpFile; 7 LPCTSTR lpParameters; 8 LPCTSTR lpD

说说ShellExecuteEx

今天来说说ShellExecuteEx这个函数,先翻译MSDN,然后看个样例. ShellExecuteEx Function 对指定应用程序运行某个操作 语法: BOOL ShellExecuteEx(           LPSHELLEXECUTEINFO lpExecInfo ); 參数: lpExecInfo [in, out] 一个指向 SHELLEXECUTEINFO 结构的指针,用来传递和保存应用程序运行相关的信息. 返回值: 假设函数成功运行就返回TRUE,否则返回 FALSE

grafana的应用-新建模板

一.关于grafana的应用:   grafana一般是和一些时间序列数据库进行配合来展示数据的,例如:Graphite.OpenTSDB.InfluxDB等.grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建.共享.浏览数据.dashboard中显示了你不同metric数据源中的数据.grafana最常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器.家庭自动化.过程控制等等.grafana有热插拔控制面板和可扩展的数据源,目前已经支持Gr

Grafana与Elasticsearch

之前一直用ELK体系里的Kibana做ES的WEB前端展示,kibana功能简单,可以直接显示log的内容,非常人性化,缺陷是没有权限.用户管理(我之前用Nginx和haproxy其中之一来代替),图形展示不够丰富,管理api等限制,更由于我需要更丰富的图形展示功能,所以开始寻找他的替代品Grafana. Grafana简绍: Grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建.共享.浏览数据.dashboard中显示了你不同metric数据源中的数据. Grafa

Grafana基础配置文件

官方是怎么解释Grafana的: grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建.共享.浏览数据.dashboard中显示了你不同metric数据源中的数据. grafana最常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器.家庭自动化.过程控制等等. grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite.InfluxDB.OpenTSDB.Elasticsearch. app_mode:应用名称,默认是prod

DataTables添加额外的查询参数和删除columns等无用参数

//1.定义全局变量 var iStart = 0, searchParams={}; //2.配置datatable的ajax配置项 "ajax": { "url": "/user/query", "type": "POST", //动态请求参数设置,会应用到每次请求 "data": function (d) { //删除多余请求参数 for(var key in d){ if(key

grafana简介

grafana一般是和一些时间序列数据库进行配合来展示数据的,例如:Graphite.OpenTSDB.InfluxDB等 grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建.共享.浏览数据.dashboard中显示了你不同metric数据源中的数据. grafana最常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器.家庭自动化.过程控制等等. grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite.InfluxDB.

net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探

前言 在之前的文章中,讲解过 threadmodel,socket tcp ,socket http,log,astart ,scripts: 都是分片讲解,从今天开始,将带大家,一窥 net.sz.framework 框架: net.sz.framework 框架分为java版本和C#.net 版本,两种语言版本保持高一致性: net.sz.framework 能做什么呢? net.sz.framework 是经过多年实践和研究,包括在线项目验证的底层框架,致力于解决框架问题: 让你更轻松,愉