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

2023-04-05 18:05:11 +08:00
 t298

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

943 次点击
所在节点    Java
4 条回复
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
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
2023-04-05 19:14:15 +08:00
Shapefile 文件有必选的和可选的,文件格式: https://zh.wikipedia.org/wiki/Shapefile

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

一般我们说 shapfile 的时候指的是一组文件,也就是你循环里面那些。如果你只传了一个 shp 一个 dbf 一个 shx ,这其实这是一个 shapefile ,也就只有一个 shpfilePath ,不存在最后一个之说。
liplushe
2023-04-05 22:12:32 +08:00
直接用 GDAL

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX