2017-03-27 57 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(),因爲它可以更好地處理窗口和空間。