Коллекция объектов может возвращать -1, если подсчет количества объектов является слишком дорогим. Это зависит от хранилища данных, например, Postgis может рассчитывать быстро, geo json не может, поскольку он должен прочитать и обработать весь файл.
Попробуйте использовать коллекцию, получив из нее итератор.
Обновление
Если присмотреться к вашему pom.xml
, вы обнаружите еще одну проблему:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>22.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geotools/gt-wfs -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-wfs</artifactId>
<version>11.2</version>
</dependency>
Вы смешиваете версии GeoTools, которые, вероятно, будут плохими, также вы можете Я хочу использовать более новый модуль gt-wfs-ng
вместо модуля gt-wfs
.
Обновление 2
Я использую следующий код с моим локальным GeoServer без проблем.
String getCapabilities = "http://localhost:8080/geoserver/ows?service=wfs&version=1.1.0&request=GetCapabilities";
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();
}