V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t298
V2EX  ›  Java

解析 shp 和 dbf 文件时有点问题.

  •  
  •   t298 · 2023-04-05 18:05:11 +08:00 · 1062 次点击
    这是一个创建于 600 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如图 这是以前留下来的代码,我再努力看懂其中的奥秘,直到 101 行是对上传的文件进行处理,101 到结束是读取文件里的内容。因为读取文件的代码没有在循环里面,105 行的 shpfilePath 永远只会是循环的最后一个文件吗?

    4 条回复    2023-04-05 22:12:32 +08:00
    wangxiaoaer
        1
    wangxiaoaer  
       2023-04-05 18:23:00 +08:00
    shp 文件实际上是个文件目录,包含 5 个左右的文件,.shp .dbf 是最主要的两个。

    按照代码看来,如果用户上传了 1 个 shp 文件(实际是多个文件)还正常,如果上传了 2 个及以上的 shp 文件,就如你所说,只有一个 shp 文件实际被读取。

    严格讲,这段代码有 bug 。如果要修的话,有俩办法:

    1 把 104 开始的读取代码放到循环里面,只在遇到 shp 后缀的文件才执行。

    2 直接用 DirectoryDataStore 更省事儿。

    推荐第二种。
    t298
        2
    t298  
    OP
       2023-04-05 18:56:26 +08:00
    @wangxiaoaer 前端会传.shp .dbf .shx 三个文件过来,没看它有对 shx 文件进行处理。我只传 shp 和 dbf 文件,代码也能跑通,就是不明白 105 行读取的时候只读循环里最后的一个 shpfilePath ,那其他的那两个文件用不上吗?( shx 文件不传可以,dbf 和 shp 少一个就会少一些信息)![优化后的代码]( https://i.328888.xyz/2023/04/05/i8BIOH.png)
    wangxiaoaer
        3
    wangxiaoaer  
       2023-04-05 19:14:15 +08:00   ❤️ 1
    Shapefile 文件有必选的和可选的,文件格式: https://zh.wikipedia.org/wiki/Shapefile

    第三方类库读取 shapefile 的时候一般传入的是.shp 结尾的这个具体文件,其他文件会自动读取(除了后缀外的文件名要一致)。

    一般我们说 shapfile 的时候指的是一组文件,也就是你循环里面那些。如果你只传了一个 shp 一个 dbf 一个 shx ,这其实这是一个 shapefile ,也就只有一个 shpfilePath ,不存在最后一个之说。
    liplushe
        4
    liplushe  
       2023-04-05 22:12:32 +08:00   ❤️ 1
    直接用 GDAL
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3272 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:47 · PVG 20:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.