我正在创建一个 Web 应用程序,该应用程序将允许上传形状文件以供稍后在程序中使用。我希望能够将上传的 shapefile 读入内存并从中提取一些信息,而无需对磁盘进行任何显式写入。我使用的框架(play-framework)在上传文件时自动将临时文件写入磁盘,但它很好地为我处理了该文件的创建和删除。然而,该文件没有任何扩展名,因此通过 Geotools 读取 shapefile 的传统方法如下所示
public void readInShpAndDoStuff(File the_upload){
Map<String, Serializable> map = new HashMap<>();
map.put( "url", the_upload.toURI().toURL() );
DataStore dataStore = DataStoreFinder.getDataStore( map );
}
失败并出现异常
NAME_OF_TMP_FILE_HERE is not one of the files types that is known to be associated with a shapefile
查看 Geotools 的源代码后,我发现文件类型是通过查看文件扩展名来检查的,并且由于这是一个 tmp 文件,因此没有。 (运行 file FILENAME
显示操作系统将此文件识别为 shapefile)。
所以最后我的问题是,有没有一种方法可以在不指定 Url 的情况下读取 shapefile?某些函数或构造函数将 File 对象作为参数并且不依赖于路径?还是太麻烦了,我应该在磁盘上保存一份副本?后一个选项并不可取,因为这可能会在某个时刻在 VM 服务器上运行,并且我不想处理文件系统特定的内容。
预先感谢您的帮助!
最佳答案
我不知道这对你有什么用,一个 shapefile(尽管它的名字)是一组 3 个(或更多)文件,它们共享一个基本名称并具有 .shp、.dbf、.sbx 扩展名(通常是 .prj、.sbn、.fix、.qix 等)。
有什么办法可以让 play 用临时文件名写入扩展名吗?
关于java - 是否可以使用 geotools 读取 shapefile 而无需指定文件的 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376357/