【问题标题】:Opening .shp file in Java在 Java 中打开 .shp 文件
【发布时间】:2017-08-20 12:02:36
【问题描述】:

我正在尝试使用 geotools 打开从http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-0-countries/ 下载的 .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 文件。它现在正在工作。

【问题讨论】:

    标签: java shapefile geotools


    【解决方案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(),因为它可以更好地处理带有空格的窗口和路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多