如何使用java代码使service=wfs&version=1.1.0&request=DescribeFeatureType。

问题描述 投票:0回答:1

我试图通过在GeoServer中执行以下代码来获取某个特定图层的详细信息,并且必须执行一些CQL操作。

String getCapabilities = "http://localhost:8080/geoserver/wfs?service=wfs&version=1.1.0&request=DescribeFeatureType&typeNames=districtwpc:ernakulam";
Map<String, Serializable> connectionParameters = new HashMap<>();
connectionParameters.put(WFSDataStoreFactory.URL.key, getCapabilities);
connectionParameters.put(WFSDataStoreFactory.TIMEOUT.key, 10000000);
WFSDataStoreFactory dsf = new WFSDataStoreFactory();
try {
    WFSDataStore dataStore = dsf.createDataStore(connectionParameters);
    String types[] = dataStore.getTypeNames();
    for (int i = 0; i < types.length; i++) {
        System.out.println(types[i]);
        String name = types[i];
        Query query = new Query(name);
        SimpleFeatureSource source = dataStore.getFeatureSource(name);
        SimpleFeatureType schema = source.getSchema();
        // System.out.println(schema);
        query.setMaxFeatures(10);
        SimpleFeatureCollection fc = source.getFeatures(query);
        try (SimpleFeatureIterator itr = fc.features()) {
            while (itr.hasNext()) {
                SimpleFeature sf = itr.next();
                System.out.println(sf);
            }
        }
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

但是我得到了这个异常。

org.geotools.data.DataSourceException: Expected {http://www.opengis.net/wfs}WFS_Capabilities but was http://www.w3.org/2001/XMLSchema#schema
    at org.geotools.data.wfs.WFSDataStoreFactory.parseCapabilities(WFSDataStoreFactory.java:557)
    at org.geotools.data.wfs.WFSDataStoreFactory.createDataStore(WFSDataStoreFactory.java:477)
    at com.hamdhan.geotooltest.controller.LayerController.TestGeoToolsRestAPI(LayerController.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java geoserver geotools
1个回答
0
投票

GeoTools WFSDataStoreFactory 希望你传递进来的URL指向的是 getCapabilities 的请求。你把它搞糊涂了,因为你传入了一个 describeFeature 请求,该请求返回的是一个功能集合的模式,而不是一个能力文档。

只需更改

String getCapabilities = "http://localhost:8080/geoserver/wfs?service=wfs&version=1.1.0&request=DescribeFeatureType&typeNames=districtwpc:ernakulam";

String getCapabilities = "http://localhost:8080/geoserver/wfs?service=wfs&version=1.1.0&request=getCapabilities";

还有几点。10000000 是一个很长的超时时间,如果遇到离线的机器,会大大降低你的程序速度。其次,我注意到你的程序叫 TestGeoToolsRestAPI - 只是要注意的是,(此时)OGC服务,如WFS,在任何方面都不是RESTful的。例如,即使服务出错,你也会得到HTTP 200的响应。

© www.soinside.com 2019 - 2024. All rights reserved.