尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Landsat WRS-2网格文件全解析:Path/Row索引与Python批处理实战

Landsat WRS-2网格文件全解析:Path/Row索引与Python批处理实战 简介这是一份WRS-2全球条带号分幅矢量文件包面向遥感、地理信息系统从业者与科研人员用于快速定位Landsat系列卫星影像的Path与Row编号解决不同区域影像检索与分幅查询问题。WRS全球参考系统是Landsat全球影像的标记体系通过路径号和行号两个数值唯一确定影像位置本包对应WRS-2系统覆盖Landsat 4、5、7、8卫星包含降轨白天过境与升轨黑夜过境两套分幅矢量。压缩包共16个文件主体为shp矢量数据并配有投影文件、属性表、索引、编码及元数据可直接在ArcGIS、QGIS等软件加载使用整体仅约9.94MB轻量便捷便于分发与存储。读者可借助该数据查询指定区域的条带号辅助Landsat影像订购、区域覆盖分析与批量预处理还可作为遥感教学、科研制图与课程实验的基础地理参考。目前已有6993人浏览学习数据完整度较高实用性强。 开头先交代一下背景。我前段时间帮人整理一批Landsat历史影像照例先去USGS把WRS-2的网格文件翻了出来也就是那个名为Landsat_WRS2.zip的压缩包。这东西看起来不起眼解压完就是几个shapefile但对经常和Landsat数据打交道的人来说它算是一份必须常备的“地图索引”。没有它你面对EarthExplorer上成百上千条轨道记录、或者一堆按Path/Row命名的影像文件时基本就是靠肉眼和感觉在找数据。这篇就把这个zip包从里到外拆一遍它到底是什么、解压导入时哪些坑最容易踩、怎么用Python把它变成批处理工具以及我实际遇到的几个报错和处理方法。文章不会讲花哨的东西全部是可复现的步骤和思路给准备做Landsat批量下载、影像检索或者区域覆盖分析的朋友做个参考。1. WRS-2到底是什么这个zip包为什么值得留一份1.1 一句话讲清楚Path和RowWRS-2全称Worldwide Reference System 2是全球参考系统第二代从Landsat 4开始一直沿用到现在Landsat 8和Landsat 9用的还是它。第一代WRS-1只对应Landsat 1到3现在基本上只有做历史存档研究才会碰日常处理遥感数据认准WRS-2就行。这套系统把地球表面按“轨道号-行号”切成一块块标准的景也就是Path和Row。Path是卫星轨道编号从1到233由东向西排布Row是沿轨道方向的行号从北到南编号。每个景的地面覆盖范围大约是185公里乘185公里相邻景之间还有一定重叠。正因为网格是固定的卫星每次飞过同一个Path/Row区域的当地时间基本一致这让时间序列分析有了可比性比如你可以放心去对比同一景不同年份同一天的植被指数变化。1.2 压缩包里到底有什么从USGS官网或其他渠道下载Landsat_WRS2.zip后正常解压出来是一整套shapefile文件。常见的有wrs2_descending.shp、wrs2_ascending.shp以及对应的.dbf、.shx、.prj、.sbn、.sbx、.cpg等附属文件。有的打包版本还会附带KML文件或说明文档。这里必须强调一点shapefile不是“一个文件”而是一组文件至少要包含.shp、.dbf、.shx、.prj这四件套。.shp存几何形状.dbf存属性信息.shx是索引.prj记录坐标系。缺了.prj后面导入GIS时会碰到坐标系识别问题缺了.dbf属性表就空了就算你把.shp单独拷给别人很多软件也打不开。所以这个zip包不要乱删里面的附属文件整个压缩包留着解压时也尽量保持文件完整。1.3 降轨和升轨日常到底该用哪套包里通常有两套网格名字长得很像功能完全不同。wrs2_descending是降轨卫星从北向南飞、当地上午成像这是Landsat最常见的观测模式绝大多数业务数据都是降轨获取。wrs2_ascending是升轨从南向北飞、当地夜间成像多用于高纬度地区和特殊任务。日常做研究区覆盖分析、批量下载Landsat 8/9地表反射率产品直接用wrs2_descending.shp就足够。只有当你的研究区在南北极高纬或者你明确需要夜间热红外数据才需要把ascending那套也用上。我见过有人下载完没注意把两套网格都筛了一遍结果同一个区域列出来两倍多的Path/Row清单后期拼URL时多做了大量无效请求浪费时间。2. 解压与导入这几个坑最容易被忽略2.1 解压环境、中文路径和文件完整性这个压缩包体积不大通常几兆到几十兆Windows自带解压工具、7-Zip、WinRAR都能处理。解压时有个容易被忽略的细节路径里不要带中文和空格。在ArcGIS或QGIS里如果shp所在目录包含中文字符偶尔会出现图层无法识别、属性字段乱码的情况。尤其当你后面用Python的geopandas读取时路径里的中文在某些环境下还会触发编码问题非常烦人。建议解压后统一放到英文目录比如D:\remotesensing\wrs2_shapefile。还有一点如果你习惯用命令行可以用7z命令测试一下压缩包完整性。格式大致是7z t 文件名.zip如果输出显示“Everything is Ok”说明文件结构没问题。这一步看似多余但对从网盘、镜像站转存过多次的文件来说花几秒钟验证一下能避免后面一堆莫名其妙的问题。2.2 拖进GIS时的坐标系识别官方发布的WRS-2 shapefile一般自带.prj文件坐标参考是WGS84也就是EPSG:4326。用QGIS或ArcMap直接拖进去正常就能正确显示。但如果打开后发现图层跑到地图边缘、缩放范围变得特别小、或者经纬度数值看起来像是几千上万米的投影坐标那八成是.prj丢了或者你在浏览器里直接用了在线解压工具把文件结构弄乱了。修复方式不复杂在QGIS里右键图层选择图层属性查看“信息”页面里显示的CRS如果显示Unknown就手动指定为WGS84EPSG:4326。在ArcGIS里对应的工具叫“定义投影”同样手动填上地理坐标系WGS84。这里注意别用“投影”工具那是做坐标转换的和定义坐标系是两码事。2.3 导入失败 could not find eocd 是怎么来的这个报错在QGIS里导入zip资源包时并不少见提示invalid zip archive: could not find eocd。eocd是ZIP格式里的End of Central Directory record也就是中央目录结束记录相当于压缩包的“索引尾页”位于文件末尾的固定位置。如果这段结构缺失或损坏任何解压软件都无法正确列出压缩包内容。结合我遇到的情况这个报错基本逃不出三种原因第一下载中途断了文件只保存了一部分后缀仍然是.zip但实际内容不完整第二浏览器缓存或磁盘空间不足导致文件被截断第三有人把tar.gz、7z甚至普通文件直接改了后缀名伪装成zip。排查顺序也很简单先看文件大小和源站是否一致再用7-Zip打开测试一次如果7-Zip都提示无法作为压缩包打开那基本可以断定文件坏了。重新下载完整文件即可不建议花时间去找修复工具或强行解压一个结构不完整的zip没有修复讨论的价值。3. 把WRS2变成自己的检索工具Python实操3.1 读取shp并确认基本属性用Python处理WRS2网格首选geopandas。如果环境还没装直接pip install geopandas它会连带把shapely、fiona、pyproj等依赖装好。读取代码很简单import geopandas as gpd gdf gpd.read_file(wrs2_descending.shp) print(gdf.crs) print(gdf.columns) print(gdf.head(3))输出里能看到坐标系是EPSG:4326属性字段一般有PATH、ROW可能还有其他描述字段。确认PATH和ROW存在后这个GeoDataFrame就可以直接用来做空间查询了。如果读出来的crs是None回头检查一下前面说的.prj文件别急着往下走。3.2 从经纬度反查Path/Row很多场景下你手里只有一个地面点的经纬度比如野外样地的中心点想知道它落在哪个Path/Row里。这时用空间连接或几何包含关系都行。我的做法是构造一个点然后遍历网格面去匹配from shapely.geometry import Point import geopandas as gpd gdf gpd.read_file(wrs2_descending.shp) def path_row_from_lonlat(lon, lat): pt Point(lon, lat) # 先做空间索引加速 possible_matches gdf.iloc[gdf.sindex.query(pt, predicatecontains)] if len(possible_matches) 0: return None, None row possible_matches.iloc[0] return row[PATH], row[ROW]这里要注意景与景之间有重叠区域理论上一个点可能同时落在相邻两个景的边界上。用contains匹配时返回结果可能不止一条如果你只是要一个主用条带号取第一条就好如果要严格保证覆盖把返回的多条都列出来后续下载时都纳入范围。3.3 根据研究区生成条带清单如果研究区是一个多边形比如某个县的边界你想知道完整覆盖它需要哪些Path/Row就用空间连接。实际操作时我会先给研究区做个小缓冲区避免边界处由于网格缝隙漏掉边缘景import geopandas as gpd wrs gpd.read_file(wrs2_descending.shp) study_area gpd.read_file(study_area.geojson) study_area study_area.to_crs(wrs.crs) buffered study_area.geometry.buffer(0.1) # 经纬度下约11公里按需调整 joined gpd.sjoin(wrs, gpd.GeoDataFrame(geometrybuffered, crswrs.crs), howinner, predicateintersects) path_rows joined[[PATH, ROW]].drop_duplicates() print(path_rows)buffer的数值根据你研究区大小来调如果只是省市级范围0.05到0.1度就够如果研究区特别小buffer太大反而会把无关条带卷进来。这一步输出的Path/Row列表就是后面批量拼Landsat场景名称、或者去EarthExplorer逐个精查的依据。3.4 保存成参考文件方便日常用筛选结果别只放在内存里建议直接导出成CSV或GeoJSON。CSV便于在Excel里查、做台账GeoJSON则方便传回GEE或QGIS里做可视化。导出时把路径、行号、几何范围一起带上path_rows.to_csv(study_area_wrs2_pathrows.csv, indexFalse) joined.to_file(study_area_wrs2_grid.geojson, driverGeoJSON)我自己的习惯是把原始的wrs2_descending.shp也备份一份精简版GeoJSON放在固定的数据目录里。这样以后不管是跑GEE还是本地脚本直接读取这个精简版不用每次翻压缩包。4. 常见问题与排查技巧速查4.1 问题现象、原因与处理办法对照表现象可能原因排查手段解决办法图层加载后显示在奇怪位置、范围异常坐标系丢失或错乱查看图层属性里的CRS手动定义投影为WGS84EPSG:4326QGIS导入zip资源包报could not find eocdzip文件损坏、下载截断或伪zip用7-Zip测试压缩包、核对文件大小删除并重新下载完整文件研究区边界处个别景查不到buffer不够、点落在网格缝隙放大多边形并重新空间连接对研究区做0.05~0.1度缓冲区后再匹配解压后属性字段乱码路径含中文、编码不一致查看.dbf字段内容改用纯英文路径重新解压同一区域筛出两套Path/Row升轨降轨数据混用检查属性里ascending/descending标记统一只用wrs2_descending.shp跨180度经线区域查不到完整条带几何跨越日期变更线检查几何是否被拆分对几何做split处理分别查询后合并4.2 从实践中踩出来的几个小技巧做Landsat批量处理时WRS2网格文件的作用不只是查几个Path/Row。我更常拿它当“台账底图”用每次下载完一批影像就把对应的景中心点落在网格图上一眼就能看出哪些区域已经覆盖、哪些还有空档。如果你主要用GEE做批量处理其实不必本地保留shpGEE里已经内置了WRS-2网格数据集可以直接空间查询。但本地留一份原始zip仍然有价值离线环境、局域网内数据共享、以及需要给同事或客户交付一套标准文件时一个完整的shapefile压缩包是最可靠的格式。遇到跨180度经线的研究区比如白令海或太平洋岛弧区域直接用几何求交容易出问题因为WGS84坐标下几何体在日期变更线处会被拉成一条很长的线。这个时候的稳妥做法是先把几何体在经度方向切开东西两半分别查询再把Path/Row列表合并去重。别想着用投影坐标一劳永逸解决WRS2网格本身就是在经纬度坐标系下定义的保持源坐标系处理更稳妥。关于那个eocd报错我再多说一句。QGIS里导入zip资源包的时候它对压缩包结构的要求比普通解压软件严格有时候7-Zip能打开、但QGIS就是报错这种情况多出现在文件被网盘客户端二次改写、或者浏览器快速下载时中断。遇到别慌第一步永远是重新从源站下载而不是去搜各种“zip修复工具”或者密码破解软件。一个哈希值对不上的压缩包修复的意义非常有限重下几分钟的事情远比折腾工具划算。还有一个小建议下载完Landsat_WRS2.zip后别急着覆盖原文件。USGS后续更新过WRS-2网格的版本不同年份下载到的文件在属性字段和极区覆盖上可能略有差异。我会在存放数据包的文件夹里建一个简单的文本备忘录记录下载日期、来源网址、文件大小这样过了几个月甚至几年再回头检查依然能确认自己手上这份数据的来源和时效。实际操作中我通常会把这个zip包和Landsat的批量下载脚本放到同一个项目目录下标注好版本信息然后固定成自己的工作流。第一次整理可能多花十几分钟但之后每次做区域筛选、生成下载清单、核对影像覆盖情况都能直接复用这套基础数据少走很多弯路。本文还有配套的精品资源点击获取
返回列表