扩展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 ...
随机推荐
- DC-DC converter Control techniques
As shown in figure 3.4, PWM controller contains two main parts; voltage error-amplifier and voltage ...
- Vue.js插件开发
Vue.js插件是为应用添加全局功能的一种强大而且简单的方式.插件的用途很广泛,从全局组件,到为应用添加一些额外的功能.如路由(Vue Router),存储在应用程序里的不可变数据(Vuex). 一般 ...
- win8升级8.1提示卸载sentinel runtime drivers
Win8升级8.1时提示需卸载sentinel runtime drivers的解决方法 第一步:打开sentinelcustomer.safenet-inc.com/sentineldownload ...
- U-Boot中的filesize环境变量
U-Boot中的环境命令可以使用$(filesize)来确定刚下载(传输)得到的文件大小. 因为使用类似tftp命令传输文件后,会自动更新filesize环境变量.如:setenv updateroo ...
- 【资料】wod地城掉落
•林中强盗第三层樵夫的皮带子蓝色毡帽面包刀(必定掉) •前往米勒巴赫的旅程第一层木棒邪恶强盗披风邪恶强盗匕首第二层地精盾第三层一瓶啤酒(必定掉大啤酒杯(必定掉 •喧嚷的酒吧第一层指挥棒(传奇等级10旅 ...
- Appium+python自动化22-Appium Desktop
Appium Desktop 原滋原味的官方文档 Appium Desktop是一款用于Mac.Windows和Linux的开源应用,它提供了Appium自动化服务器在一个漂亮灵活的UI中的强大功能. ...
- Shell编程入门(第二版)(中)
注:test測试语句一般不单独使用,一般作为if语句的測试条件,如; if test -d file then .... fi test的变量的简写形式"[]" 演示样例-apac ...
- @ERR Unsupported CONFIG parameter: notify-keyspace-events
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Unsupported CONFIG parameter: noti ...
- json-lib 的maven dependency
项目中要用到json-lib,mvnrepository.com查找它的dependency时结果如下: <dependency> <groupId>net.sf.json-l ...
- android 模拟器无法ping通主机
很多时候我们通过adb 连接 android 模拟器调试网络程序,也许你能直接访问浏览器,浏览网站,但是却无法ping同局网的一个机器,比如: # ping www.sina.com ...