这是以前留下来的代码,我再努力看懂其中的奥秘,直到 101 行是对上传的文件进行处理,101 到结束是读取文件里的内容。因为读取文件的代码没有在循环里面,105 行的 shpfilePath 永远只会是循环的最后一个文件吗?
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 更省事儿。 推荐第二种。 |
2
t298 OP @wangxiaoaer 前端会传.shp .dbf .shx 三个文件过来,没看它有对 shx 文件进行处理。我只传 shp 和 dbf 文件,代码也能跑通,就是不明白 105 行读取的时候只读循环里最后的一个 shpfilePath ,那其他的那两个文件用不上吗?( shx 文件不传可以,dbf 和 shp 少一个就会少一些信息)![优化后的代码]( https://i.328888.xyz/2023/04/05/i8BIOH.png)
|
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 ,不存在最后一个之说。 |
4
liplushe 2023-04-05 22:12:32 +08:00 1
直接用 GDAL
|