当前位置:   article > 正文

python:使用geopandas和rasterio将矢量范围内的栅格值赋为0并重新输出_将栅格数据赋给点矢量数据+python+geopandas

将栅格数据赋给点矢量数据+python+geopandas

需求:有一个点shp文件和一个栅格,想要构建shp中每个点的缓冲区,并且缓冲区范围内的栅格值重新赋为0并输出新的tif文件

解决方法:使用python中的geopandas和rasterio中的掩膜操作实现

代码如下:

import numpy as np
import rasterio
from rasterio.features import geometry_mask
import geopandas as gpd
from shapely.geometry import Point
from shapely.ops import cascaded_union
from shapely.ops import unary_union

# 读取点数据
difangdef = gpd.read_file('abc.shp')

# 创建缓冲区
buffer_distance = 10000  # 缓冲区距离(单位:米)
buffers = difangdef.geometry.to_crs('EPSG:3395').buffer(buffer_distance)

# 将缓冲区合并为一个多边形
union_buffer = unary_union(buffers)

# 读取栅格数据
with rasterio.open('ddd.tif') as src:
    # 利用栅格数据的空间参考创建一个蒙版
    mask = geometry_mask([union_buffer], out_shape=src.shape, transform=src.transform, invert=True)

    # 读取栅格数据作为numpy数组
    raster_data = src.read(1)

    # 将蒙版应用到栅格数据,这里的值可以任意修改赋的值,这里替换为-100
    raster_data[mask] = -100
    
    raster_data = np.where(raster_data == raster_data[0,0], np.nan, raster_data)
    
plt.imshow(raster_data)
plt.colorbar()
plt.show()

# 创建一个新的栅格数据文件来保存结果
with rasterio.open('path_to_output_raster.tif', 'w', **src.meta) as dst:
	dst.write(raster_data, 1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

如果已有的是面文件,想要将面文件范围内的栅格值重新赋值,可以直接读取shp后进行掩膜操作,不需要构建缓冲区。

上述代码实现后的结果如下:

在这里插入图片描述

更多内容请关注公众号:GISerQ

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/310922?site=
推荐阅读
相关标签
  

闽ICP备14008679号