使用Python和GDAL给图片加坐标系的实现思路(坐标投影转换)

yizhihongxing

使用Python和GDAL给图片加坐标系可以通过以下步骤完成:

  1. 安装GDAL:可以通过pip安装,命令为:pip install gdal。安装完毕后,在Python代码中用import gdal语句引入模块。

  2. 读取图片:使用gdal.Open()函数打开需要添加坐标系的图片。如下所示:

```
from osgeo import gdal

filename = 'test.tif'
ds = gdal.Open(filename, gdal.GA_Update) # 打开文件,可读可写模式
```

此处使用了GDAL提供的Open()函数打开了一个名为test.tif的图片,并使用了GA_Update参数,表示可以进行读取和写入操作。

  1. 添加坐标系:使用ds.SetGeoTransform()函数设置图片的投影信息。投影信息包括左上角的x坐标、每个像素的宽度(x分辨率)、旋转角度、左上角的y坐标、旋转角度、每个像素的高度(y分辨率)。示例如下:

geo_transform = (xmin, xres, x_rot, ymax, y_rot, yres)
ds.SetGeoTransform(geo_transform)

其中,xmin为图片左上角的x坐标,xres表示每个像素的宽度,ymax为图片左上角的y坐标,yres表示每个像素的高度,x_roty_rot为旋转角度。

  1. 设置投影信息:通过ds.SetProjection()函数设置图片的投影信息。投影信息使用字符串格式表示,可以通过GDAL提供的EPSG库调用标准的投影信息。例如,设置图片的投影为WGS 84 / UTM zone 48N,则可以使用以下代码:

epsg_code = 'EPSG:32648'
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(int(epsg_code.split(':')[1]))
ds.SetProjection(target_srs.ExportToWkt())

上述代码使用epsg_code定义了投影信息代码,然后使用osr.SpatialReference()函数创建了空间参考。ImportFromEPSG()函数解析了epsg_code中的代码为整数型,然后将整数型的代码传递给空间参考中的函数,创建了“WGS 84 / UTM zone 48N”投影系的参考。

接下来,可以使用target_srs.ExportToWkt()函数将参考转换为标准的WKT(Well-Known Text)格式,并使用ds.SetProjection()函数设置图片的投影信息。

  1. 关闭文件:完成以上设置后,需要使用ds.FlushCache()函数刷新数据,以确保修改生效。并且需要使用ds = None语句或del ds语句关闭文件。完整代码如下:

```
from osgeo import gdal
from osgeo import osr

filename = 'test.tif'
ds = gdal.Open(filename, gdal.GA_Update)

xmin, xres, x_rot, ymax, y_rot, yres = 100, 0.01, 0, 50, 0, -0.01
geo_transform = (xmin, xres, x_rot, ymax, y_rot, yres)

epsg_code = 'EPSG:32648'
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(int(epsg_code.split(':')[1]))
ds.SetProjection(target_srs.ExportToWkt())

ds.SetGeoTransform(geo_transform)
ds.FlushCache()
ds = None
```

这个代码将图片的左上角坐标设为(100,50),每个像素的宽度和高度分别设为0.01和-0.01,即每个像素为正方形。这个代码还将图片的投影指定为“WGS 84 / UTM zone 48N”。

示例1:将一个无投影的tif文件添加坐标投影

```
from osgeo import gdal
from osgeo import osr

filename = 'test_no_proj.tif'
ds = gdal.Open(filename, gdal.GA_Update)

xmin, xres, x_rot, ymax, y_rot, yres = 100, 0.01, 0, 50, 0, -0.01
geo_transform = (xmin, xres, x_rot, ymax, y_rot, yres)

epsg_code = 'EPSG:32648'
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(int(epsg_code.split(':')[1]))
ds.SetProjection(target_srs.ExportToWkt())

ds.SetGeoTransform(geo_transform)
ds.FlushCache()
ds = None
```

将无痕渲染的NEM视图图像(test_no_proj.tif)从本地打开,添加了坐标投影并输出为新的文件(加坐标后得到的输出文件test.tif)。

示例2:修改一个带有投影信息的tif文件的投影

```
from osgeo import gdal
from osgeo import osr

filename = 'test.tif'
ds = gdal.Open(filename, gdal.GA_Update)

xmin, xres, x_rot, ymax, y_rot, yres = ds.GetGeoTransform()
geo_transform = (xmin, xres, x_rot, ymax, y_rot, yres)

epsg_code = 'EPSG:4326'
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(int(epsg_code.split(':')[1]))
ds.SetProjection(target_srs.ExportToWkt())

ds.SetGeoTransform(geo_transform)
ds.FlushCache()
ds = None
```

将一个已经存在“WGS 84 / UTM zone 48N”投影的tif文件(test.tif)从本地打开,将投影修改为EPSG 4326(经纬度)并输出为新的tif文件(输出文件test_4326.tif)。

以上就是使用Python和GDAL给图片加坐标系的实现思路,示例代码和相关说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python和GDAL给图片加坐标系的实现思路(坐标投影转换) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python中提高pip install速度

    下面是 Python 中提高 pip 安装速度的攻略: 1. 使用国内镜像站点 使用国内镜像站点可以加快 pip 的下载速度。下面以清华大学镜像站为例: 打开命令行工具(如 CMD、终端),进入到用户目录下,新增或编辑 .pip/pip.conf 文件(如果该文件不存在则新建)。 在打开的文件中添加以下内容: [global]trusted-host=mir…

    python 2023年5月14日
    00
  • python之openpyxl模块的安装和基本用法(excel管理)

    Python之Openpyxl模块的安装和基本用法(Excel管理) 安装 使用pip命令进行安装,命令如下: pip install openpyxl Excel 文档读取 打开Excel文档 使用Openpyxl模块可以方便的打开Excel文档。示例代码如下: from openpyxl import load_workbook # 打开一个已经存在的E…

    python 2023年5月13日
    00
  • Python3列表删除的三种方式实现

    Python3列表删除的三种方式实现 在Python3中,列表是一种常见的数据类型,可以存储多个元素。Python3提供了多种方式来删除列表中的元素,包括使用del语句、remove()函数和pop()函数。本攻略将详细介绍Python3中列表删除的三种方式实现,并提供多个示例说明。 使用del语句删除元素 在Python3中,可以使用del语句删除列表中的…

    python 2023年5月13日
    00
  • Python遍历目录的4种方法实例介绍

    Python遍历目录的4种方法实例介绍 在Python中,我们可以使用多种方法遍历目录。本文将对Python遍历目录的4种方法进行介绍,并提供实例示范。 方法一:os.listdir()方法 os.listdir()方法用于返回指定目录下的所有文件和目录名,我们可以使用for循环遍历得到每一个文件和目录的名称。具体代码示例如下: import os dir_…

    python 2023年6月2日
    00
  • 你知道吗实现炫酷可视化只要1行python代码

    下面是详细的攻略: 炫酷可视化是什么? 炫酷可视化是指通过各种图表、动画等方式展示数据或概念,以便更直观地理解和反映数据或概念的模式、趋势、关系等。常见的炫酷可视化包括热力图、地图、3D图、动态图等。 为什么可以用1行Python代码实现? Python语言的可视化库很多,其中比较常用的包括Matplotlib、Seaborn、Plotly、Bokeh等。这…

    python 2023年5月19日
    00
  • python清理子进程机制剖析

    Python 清理子进程机制剖析 在 Python 中,子进程是非常常见的一种操作。然而,如果没有正确的清理子进程,就会出现一些难以预料的问题。本文将介绍 Python 中的子进程清理机制以及如何正确的清理子进程。 为什么需要清理子进程 在 Python 中,当一个父进程结束时,所有由它创建的子进程都会变成孤儿进程。如果孤儿进程没有被正确的终止,那么它们将继…

    python 2023年5月14日
    00
  • Python数据模型与Python对象模型的相关总结

    Python数据模型与Python对象模型的相关总结 简介 Python是一种语言,具有统一的数据模型,从而可以理清它如何构建和处理任何类型的对象。同时,Python还有一个Python对象模型,与语言的实现相关,它描述了Python对象在内存中的存储方式和相互之间的关系。 Python数据模型 Python数据模型定义了一个包含若干特殊方法的接口,在Pyt…

    python 2023年6月5日
    00
  • Python 格式化输出_String Formatting_控制小数点位数的实例详解

    Python格式化输出_StringFormatting_控制小数点位数的实例详解 在Python中,格式化输出是一种常用的技巧,可以用于将变量或表达式的值以特定的格式输出到控制台或文件中。本文将详细讲解Python格式化输出_StringFormatting_控制小数点位数的实例,包括使用字符串格式化符号、使用format方法、控制小数点位数等内容,并提供…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部