擴展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;
    }

}
檢驗成果:
用數據源創建界面的前后對比照來說明:
之前:
image 

之后:

image

image

后記:

GS還提供了自定義錄入界面的方法,這個以后再說。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM