zoukankan      html  css  js  c++  java
  • 扩展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>webappsgeoserverWEB-INFclasses下,或者复制打包的jar文件到<GeoServer install path>webappsgeoserverWEB-INFlib目录下;

    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;
        }
    
    }
    检验成果:
    用数据源创建界面的前后对比照来说明:
    之前:
    image 

    之后:

    image

    image

    后记:

    GS还提供了自定义录入界面的方法,这个以后再说。

  • 相关阅读:
    BZOJ1930 [Shoi2003]pacman 吃豆豆
    hdu5322 Hope
    hdu5390 tree
    hdu4609 3-idiots
    hdu5354 Bipartite Graph
    hdu4918 Query on the subtree
    hdu5314 Happy King
    [题解] PowerOJ 1741 最长递增子序列问题 (最大流)
    [题解] PowerOJ 1740 圆桌问题 (最大流)
    [题解] PowerOJ 1739 魔术球问题 (最大流)
  • 原文地址:https://www.cnblogs.com/sillyemperor/p/3862179.html
Copyright © 2011-2022 走看看