Открытие файла .shp в Java

Я пытаюсь открыть файл .shp, загруженный с http://www.naturalearthdata.com/downloads/10m-culture-vectors/10m-admin-0-countries/ с помощью геоинструментов. Мой код выглядит так:

File file = new File("ne_10m_admin_0_countries.shp");
try{

        Map<String, URL> map = new HashMap<String, URL>(); 
        map.put("url", file.toURI().toURL());

        DataStore dataStore = DataStoreFinder.getDataStore(map);

        System.out.println(DataStoreFinder.getDataStore(map));
        System.out.println(map);

        SimpleFeatureSource featureSource = dataStore.getFeatureSource(dataStore.getTypeNames()[0]);        
        SimpleFeatureCollection collection = featureSource.getFeatures();

        ReferencedEnvelope env = collection.getBounds();
        double left = env.getMinX();
        double right = env.getMaxX();
        double top = env.getMaxY();
        double bottom = env.getMinY();
        System.out.println(left+" "+right);
    }catch(Exception e){
        System.out.println("ahoj" +e.getMessage());
    }

Метод DataStoreFinder.getDataStore() возвращает значение null, и в этом проблема. У вас есть идеи, что я делаю неправильно?

Я хочу открыть и использовать этот шейп-файл, чтобы получить координаты границ страны.

Проблема заключалась в том, что у меня не было других необходимых файлов jar. Теперь это работает.


person Palo Lieskovsky    schedule 27.03.2017    source источник


Ответы (1)


у вас есть gt-shapefile.jar на пути к классам?

GeoTools использует поиск SPI для поиска хранилищ данных на основе карты параметров, которую вы предоставили. Другая возможная проверка — вызвать DataStoreFinder.getAllDatastores() для проверки доступности:

Iterator<DataStoreFactorySpi> it = DataStoreFinder.getAllDataStores();
  while (it.hasNext()) {
    DataStoreFactorySpi fac = it.next();
    System.out.println(fac.getDisplayName());
  }

Или, если вы хотите только прочитать Shapefile, создайте непосредственно ShapefileDataStore.

Также в качестве примечания я бы рекомендовал использовать DataUtilities.fileToURL(file) вместо file.toUri().toUrl(), так как он лучше обрабатывает окна и пути с пробелами.

person Ian Turton    schedule 28.03.2017