java - 是否可以使用 geotools 读取 shapefile 而无需指定文件的 url?

标签 java playframework gis geotools

我正在创建一个 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/

相关文章:

java - WebDriver (Java) - 使用 driver.findElements() 时排除表下的元素

Java定时器每秒100次

java - 如何处理需要部署测试的Web应用项目中无法编译的源代码?

templates - Scala模板中的Playframework 2.X和Date格式

url - 如何生成像stackoverflow这样的复杂URL?

javascript - 如何使用leafletjs计算当前速度、平均速度和总距离?

java - Scala/Gradle 的 build.gradle 中包含什么

hibernate - Play Framework 和集合在模型类中的使用

algorithm - 地形中的匹配路径

mapping - 使用 Java 和任何外部库,如何将纬度/经度点绘制到地球的图形表示上?