如何使用GeoTools获取WFS服务FeatureType的Title属性
我使用GeoTools库连接WFS服务,可以很轻松获取可用要素类型的typeNames:
var dataStore = DataStoreFinder.getDataStore(connectionParameters); var typeNames = dataStore.getTypeNames();
我本以为获取可用要素类型的标题也同样简单,这些信息确实存在于通过以下代码获取的数据结构中:
var info = dataStore.getInfo();
对应数据截图显示name和title属性均已被正确加载:
但遗憾的是CapabilitiesServiceInfo类没有提供访问capabilities相关属性的getter方法。请问除了手动解析XML响应外,还有什么方法可以获取这些明明存在却无法直接访问的信息?
以下是Ian Turton要求提供的最小可复现示例:
var url = "https://www.wfs.nrw.de/geobasis/wfs_nw_dvg?ACCEPTVERSIONS=1.1.0&SERVICE=WFS&REQUEST=GetCapabilities"; Map<String, Object> connectionParameters = new HashMap<>(); connectionParameters.put("WFSDataStoreFactory:LENIENT", true); connectionParameters.put("WFSDataStoreFactory:USEDEFAULTSRS", true); connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", url); try { var dataStore = DataStoreFinder.getDataStore(connectionParameters); // 可通过该方法获取可用要素类型的名称 var featureTypeNames = dataStore.getTypeNames(); // 将返回包含"dvg:nw_dvg1_gem"的列表 // 对应WFS XML返回结果中FeatureTypeList下FeatureType的Name字段: // (通过Postman或Chrome直接访问上述url获取的XML片段如下) // <FeatureTypeList> // <Operations> // <Operation>Query</Operation> // </Operations> // <FeatureType> // <Name>dvg:nw_dvg1_gem</Name> // <Title>DVG1 Kreisangehörige Kommunen und kreisfreie Städte</Title> // ... // ... // 我需要获取可用要素类型的标题 // 以上述要素为例,对应标题为"DVG1 Kreisangehörige Kommunen und kreisfreie Städte" // 查看wfsInfo的对象结构可以看到GeoTools已经加载了该信息,但未提供公开访问接口 // wfsInfo的结构示例可参考上述截图 var wfsInfo = dataStore.getInfo(); // 按Ian Turton的说明,以下方法可获取服务本身的标题(但我需要的是要素类型的标题) var theTitle = dataStore.getInfo().getTitle(); // 对应XML片段如下: // <ows:ServiceIdentification> // <ows:Title>WFS NW DVG</ows:Title> // var theTitle = dataStore.getInfo().getTitle(); } catch (IOException e) { e.printStackTrace(); throw new IllegalArgumentException("Failed to connect to WFS service", e); }
内容的提问来源于stack exchange,提问作者Semjon Mössinger
相关产品推荐
相关产品推荐

