Python ArcPy批量将大量栅格文件的投影坐标系转为地理坐标系

ops/2024/10/17 22:12:54/

  本文介绍基于Python语言中的ArcPy模块,批量将多个遥感影像由投影坐标系转为地理坐标系的方法。

  在之前的文章中,我们介绍过将单独1景遥感影像的投影坐标系转为地理坐标系的方法,大家可以参考文章投影坐标系转为地理坐标系:GDAL命令行实现(https://blog.csdn.net/zhebushibiaoshifu/article/details/136371267);但是,这个方法对于少量遥感影像的场景比较有优势,而对于具有大量待处理遥感影像批处理场景而言并不是很友好(主要是我不知道怎么在命令行写批量操作的脚本)。而在本文中,我们就介绍一下基于PythonArcPy模块,实现上述需求的批量操作的方法;此外,如果大家需要反过来,将地理坐标系转为投影坐标系,也可以参考本文的方法,亦可以参考文章GDAL一行代码实现投影:将栅格的地理坐标系转为投影坐标系(https://blog.csdn.net/zhebushibiaoshifu/article/details/136200172),或者是文章ArcGIS矢量图层投影与地理坐标系转为投影坐标系——ArcMap(https://blog.csdn.net/zhebushibiaoshifu/article/details/115216717)。

  首先,明确一下本文的需求。现有一个文件夹,其中含有大量不同格式的文件,如下图所示。其中,我们希望将所有.tif格式的遥感影像文件,由原本的投影坐标系转为地理坐标系

  如果我们用ArcMap等软件将上述遥感影像文件打开,可以看到其坐标系为投影坐标系WGS_1984_UTM_Zone_48N,且单位为;如下图所示。我们希望将这个投影坐标系转为地理坐标系,本文就以转为WGS_1984这个地理坐标系为例来介绍。

  本文所需要的代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Thu May  2 13:05:43 2024@author: fkxxgis
"""import os
import arcpyinput_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF"
output_folder = r"E:\04_Reconstruction\99_MODIS\new_data\GF_WGS84"
arcpy.env.workspace = input_folder
target_spatial_reference = arcpy.SpatialReference(4326)input_files = arcpy.ListRasters("*.tif")for input_file in input_files:output_file = os.path.join(output_folder, os.path.splitext(input_file)[0] + "_WGS84.tif")arcpy.ProjectRaster_management(input_file, output_file, target_spatial_reference)print input_file + " finished!"

  首先,我们导入所需使用的库。其中,os库用于文件和路径操作,arcpy则用于处理GIS数据。

  随后,我们定义输入输出文件的路径。其中,使用r前缀是为了将字符串视为原始字符串,从而避免转义字符的处理。同时,使用arcpy.env.workspace将工作空间设置为输入文件夹,这样在后续处理数据时可直接使用文件名而不需使用完整的路径。随后,通过arcpy.SpatialReference()创建一个代表WGS84地理坐标系的空间参考对象。大家在使用代码时,将这里的4326坐标系编号修改为自己所需目标坐标系的EPSG编号即可;其中,可以在这个网站(https://epsg.io/)中,找到自己所需坐标系的EPSG编号。

  接下来,首先使用arcpy.ListRasters()获取输入文件夹中所有的.tif格式文件,随后使用for循环遍历每一个输入文件。在循环中,通过os.path.join()os.path.splitext()构建输出文件的路径,将输入文件的文件名作为基础,并在结尾加上_WGS84作为标识。然后,使用arcpy.ProjectRaster_management()函数将输入文件投影到WGS84地理坐标系,并将结果保存到输出文件中。最后,通过print语句打印处理完成的文件名。

  执行上述代码,即可得到如下图所示的界面。我这里在print输出内容时,文件名称finished!之间忘记加空格了,大家理解即可。

  此外,可以在结果文件夹中看到如下图所示的结果文件。

  用ArcMap等软件将上述遥感影像文件打开,可以看到其坐标系为地理坐标系WGS_1984,且单位为;如下图所示。

  至此,大功告成。

欢迎关注:疯狂学习GIS


http://www.ppmy.cn/ops/38615.html

相关文章

手动实现简易版RPC(四)

手动实现简易版RPC(四) 往期内容 手动实现简易版RPC(一):RPC简介及系统架构 手动实现简易版RPC(二):简单RPC框架实现 手动实现简易版RPC(三):mock数据生成 前言 接上几篇博客我们实现了最…

第一天复习Qt文件读取

Qt文件操作: 1、QFile QTextStream操作文件案例: 1、打开文件 QFile file(absolute filepath | relative path); file.readLine()返回内容长度,如果为-1就是读取失败 file. Close()读取后关闭 file.errorString()返回文件打开发生的错误2、…

面试:CopyOnWriteArrayList

问题: ArrayList 是线程不安全的,同一时间写和读会造成线程不安全,怎么解决呢? 答:可以使用CopyOnWriteList。 CopyOnWriteList特点 CopyOnWriteArrayList是Java中的一种并发集合类,它实现了List接口&am…

DNS 解析在网络传输中有什么意义?

首先我们先说说什么是DNS解析? DNS解析是将域名解析为对应的IP地址的过程。DNS它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS解析的过程就是寻找哪个IP地址对应你所输入的网址,然后将网页内容返回给用户…

6份不用辞职就能赚钱的副业,上班族必看!

在这个经济浪潮中,生活成本的上升与工资增长的缓慢形成了鲜明对比。对于许多上班族来说,寻找额外收入的途径显得尤为迫切。 今天,就让我们一起探索那些适合在业余时间开展的副业,为你的财务自由之路添砖加瓦。 1. 闲鱼二手手机售卖…

nginx代理原理(端口复用)探究

前言:对于一些常用的插件,我们应该学会如何使用。同时,其实现原理也要进行深究,可以为其他的项目开发做借鉴。 探究方案: 一、发布两个不同的服务,这两个服务的端口不致 二、配置nginx,让这两…

TB交易开拓者旗舰版自动交易的设置

本文针对TB交易开拓者旗舰版V6.0.7.0(期货程序化交易软件下载 - 交易开拓者),目前网上没有自动交易设置的完整教程,特写此篇。 1. 设置期货账户的自动登录和登出。点击菜单“文件/系统设置”,然后在“安全”tab做如下设置: 2 设置你的期货账…

前端代码优化

嗯,最近pc更新了一版,目前没有什么活,就检查自己写的代码,去优化,发现有一个函数if嵌套了很多层,重复的代码也有很多,所以我就把重复的进行来了提取,以及一些其他优化 原代码 可以…