如何从shp文件中检索coords



我正在处理历史风道数据,可以在这里找到。

如何使用pyshp来检索所有lat&lon沿着风道正确吗?

我遵循了PyShp上的文档,最初导入了"lin.shp"文件类型,但在谷歌地球上手动检查时,返回的坐标不正确
其次,我导入了"pts.shp"文件类型,当我尝试运行"bbox"函数时,它会返回一个AttributeError: 'Shape' object has no attribute 'bbox'

这个代码应该做

lin_shp = shapefile.Reader("al212021_best_track/AL212021_lin")
coords = [s.points for s in lin_shp.shapes()]
lin_shp.close()

al212021_best_track目录的内容看起来像这个

.
..
AL212021_lin.dbf
AL212021_lin.prj
AL212021_lin.shp
AL212021_lin.shp.xml
AL212021_lin.shx
AL212021_pts.dbf
AL212021_pts.prj
AL212021_pts.shp
AL212021_pts.shp.xml
AL212021_pts.shx
AL212021_radii.dbf
AL212021_radii.prj
AL212021_radii.shp
AL212021_radii.shp.xml
AL212021_radii.shx
AL212021_windswath.dbf
AL212021_windswath.prj
AL212021_windswath.shp
AL212021_windswath.shp.xml
AL212021_windswath.shx

https://pypi.org/project/pyshp/#reading-几何

您正在正确检索坐标。谷歌地球要求所有数据都是EPSG:4326-WGS84地理。NOAA将该数据转换为KML文件,然而形状文件处于一个神秘的投影中;基于Authalic球体的未知数据-投影";那一页上的形状文件。你发送的数据下载页面中间的地图可能就在这个投影中。

您的选择是:

  1. 下载KMZ,使用python解压缩,并使用python内置的XML工具解析里面的KML文件,以提取EPSG:4326点
  2. 计算出将点转换为您需要使用的任何投影的数学方法。纯Python,但这将很困难
  3. 从使用纯Python切换到使用Fiona/Shapely来重新投影点
  4. 从Fiona/Shapely低一级,使用GDAL/OGR Python绑定来重新投影点
  5. 使用从Python调用的GDAL/OGR命令行工具来重新投影点

您的项目和环境限制,再加上您对这些工具的熟悉程度,将决定这些选项中的哪一个是最好的。

根据你在pts.shp对话框上得到的错误,问题是你试图在只包含一个点的单个形状记录上得到一个边界框。边界框只适用于每个记录至少有两个点的形状文件类型,例如该数据集中的线形状文件。您总是可以在每个形状文件类型的文件级别获得边界框。

最新更新