t298
V2EX  ›  Java

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

  •  
  •   t298 · Apr 5, 2023 · 1632 views
    This topic created in 1154 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    2 直接用 DirectoryDataStore 更省事儿。

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

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

    一般我们说 shapfile 的时候指的是一组文件,也就是你循环里面那些。如果你只传了一个 shp 一个 dbf 一个 shx ,这其实这是一个 shapefile ,也就只有一个 shpfilePath ,不存在最后一个之说。
    liplushe
        4
    liplushe  
       Apr 5, 2023   ❤️ 1
    直接用 GDAL
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1670 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:30 · PVG 00:30 · LAX 09:30 · JFK 12:30
    ♥ Do have faith in what you're doing.