python使用GDAL/OGR/OSR时设置GDAL_DATA环境变量

版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89377625

 

右键“此电脑”打开电脑属性,高级系统设置,环境变量,直接设置GDAL_DATA环境变量,如下图所示。

附注:本机是Anaconda通过pip安装的gdal。用GDAL/OGR的时候发现坐标系有问题,参照这个帖子https://blog.csdn.net/csdn_xuebing/article/details/88421708,下了gata-data.rar这个包并放在Anaconda的相关路径下。这个包的来源https://github.com/wudawxb1995/ForLearn

 

——*——*——*——*——*——*——*——*——*——*——*——*——*——*——手动分割线

 

以下是详情。

我是通过在cmd(命令提示符)窗口输入以下代码安装python的GDAL库的。可参阅:https://pypi.org/project/GDAL/

pip install GDAL

执行后可以使用ogr创建shp文件,但用ArcGIS打开被提示没有坐标信息,可是我明明在创建shp文件的时候制定了坐标系了的,为什么会这样呢?

我是在Spyder中直接执行的,没有任何报错。代码来源于ogr网页一个示例,网址为http://pcjericks.github.io/py-gdalogr-cookbook/index.html,代码如下:

import osgeo.osr as osr

srs = osr.SpatialReference()
aa=srs.ImportFromEPSG(4326)
#print(aa,srs)

我看了这个网址https://www.programcreek.com/python/example/58591/osgeo.osr.SpatialReference,再次证实代码没有问题。

在我继续寻找问题的解决办法时候,看到了这个地方。网址https://www.gdal.org/classOGRSpatialReference.html#a8a5b8c9a205eedc6b88a14aa0c219969

我试着输出了下返回值aa和srs的各个属性项,Spyder反馈给我如下。

发现aa的值似乎不对,srs的属性也输出不了。我无意间使用cmd执行这代码的时候发现了问题所在。

cmd提示我:

ERROR 4: Unable to open EPSG support file gcs.csv. Try setting the GDAL_DATA 
environment variable to point to the directory containing EPSG csv files.

看来这就是环境变量的问题了。问题的症结所在终于浮出水面:osr试图通过GDAL_DATA这个环境变量寻找相应的包,但没有这个环境变量,所以找不到相应的包,我们需要指定这个环境变量,也要保证这个环境变量指向的是osr所需要的东西。

仔细看OGRErr OGRSpatialReference::importFromEPSG    (    int     nCode    )    的内容,即上文的截图所示。看不懂英文可以看下图的翻译。

所以本文开篇即点明,需要下载gata-data.rar这个包。

那么gcs.csv是什么东西呢?是各坐标系的各参数。

我们再运行那三行代码,即成功设定了坐标系了。

 

独孤尚良dugushangliang——著

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
以下是使用pythonogrosr库,根据很多坐标点使用gdal.warp函数裁剪栅格数据的示例代码: ```python import gdal import ogr import osr # 设置输入栅格数据路径 input_raster_path = '/path/to/input/raster.tif' # 设置输出栅格数据路径 output_raster_path = '/path/to/output/raster.tif' # 设置裁剪范围的坐标点 # 这里假设有一个shapefile文件,其中包含了多个矩形范围的坐标点 clip_shapefile_path = '/path/to/clip/shapefile.shp' # 打开输入栅格数据 input_raster = gdal.Open(input_raster_path) # 获取输入栅格数据的投影信息 input_projection = input_raster.GetProjection() # 打开裁剪范围的shapefile文件 clip_shapefile = ogr.Open(clip_shapefile_path) # 获取shapefile文件中的第一个图层 clip_layer = clip_shapefile.GetLayer(0) # 获取shapefile文件中每个图形的几何体 clip_geometries = [feature.GetGeometryRef() for feature in clip_layer] # 将输入栅格数据的投影信息转换为裁剪范围的投影信息 clip_spatial_reference = clip_layer.GetSpatialRef() input_spatial_reference = osr.SpatialReference(input_projection) transform = osr.CoordinateTransformation(input_spatial_reference, clip_spatial_reference) # 将裁剪范围的坐标点转换为输入栅格数据的投影坐标系中的坐标点 clip_bounds = [] for clip_geometry in clip_geometries: clip_geometry.Transform(transform) clip_bounds.append(clip_geometry.GetEnvelope()) # 使用gdal.warp函数裁剪栅格数据 gdal.Warp(output_raster_path, input_raster, cutlineDSName=clip_shapefile_path, cropToCutline=True) ``` 在以上代码中,使用gdal.Open函数打开输入栅格数据和裁剪范围的shapefile文件,然后使用gdal.Warp函数裁剪栅格数据。在裁剪栅格数据之前,需要将输入栅格数据的投影信息转换为裁剪范围的投影信息,并将裁剪范围的坐标点转换为输入栅格数据的投影坐标系中的坐标点。最后,使用gdal.Warp函数裁剪栅格数据。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值