2017-03-27 1 views
0

J'essaie d'ouvrir le fichier .shp téléchargé à partir de http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/ en utilisant geotools. Mon code ressemble à ceci: méthodeOuverture du fichier .shp en Java

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() renvoie NULL et qui est le problème. Avez-vous des idées de ce que je fais mal?

Je veux ouvrir et utiliser ce fichier de formes afin d'obtenir les coordonnées des frontières du pays.

Le problème était que je n'avais pas inclus d'autres fichiers jar nécessaires. Ça marche maintenant.

Répondre

0

Avez-vous gt-shapefile.jar sur le chemin de la classe?

GeoTools utilise une recherche SPI pour rechercher des banques de données en fonction de la mappe de paramètres que vous fournissez. Une autre vérification possible consiste à appeler DataStoreFinder.getAllDatastores() pour vérifier la disponibilité:

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

Ou si vous ne voulez jamais lire un Shapefile puis créez directement le ShapefileDataStore.

Aussi, comme une note de côté, je vous recommande d'utiliser DataUtilities.fileToURL(file) sur file.toUri().toUrl() car il gère mieux les fenêtres et les chemins avec des espaces.