2017-03-27 34 views
0

我试图打开使用地理工具从http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/下载的.shp文件。我的代码如下所示:在Java中打开.shp文件

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,这就是问题所在。你有什么想法我做错了什么?

我想打开并使用此shapefile以获取国家边界的坐标。

问题是我没有包含其他需要的jar文件。现在正在工作。

回答

0

你对类路径有gt-shapefile.jar吗?

GeoTools根据您提供的参数映射使用SPI查找来查找数据存储。另一种可能的检查是调用DataStoreFinder.getAllDatastores()查询空房:

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

或者,如果您只想读一个Shape文件,然后直接创建ShapefileDataStore。

另外,作为一个附注,我建议使用DataUtilities.fileToURL(file)而不是file.toUri().toUrl(),因为它可以更好地处理窗口和空间。