我需要通过rasterio和geopandas从.tif和.shp文件创建遮罩(二进制图像)。以下是我的代码:
import numpy as np
import pandas as pd
import os
import rasterio
import rasterio.features
import rasterio.warp
from rasterio.plot import show
from rasterio.mask import mask
import shapely
from fiona.crs import from_epsg
import geopandas as gpd
dataset = rasterio.open('/content/drive/My Drive/Data4Colab/Baitap2/img.tif')
polygons = gpd.read_file('/content/drive/My Drive/Data4Colab/Baitap2/shp/paddy_bg.shp')
shapes = []
geo = polygons.values[:, 1]
for i in range(len(polygons)):
shapes.append(geo[i])
out = rasterio.mask.raster_geometry_mask(dataset, shapes, crop=True)
这是我的形状(列表):
['background',
'background',
'background',
'background',
'background',
'background',
'paddy',
'paddy',
'paddy',
'paddy',
'paddy',
'paddy']
我收到一个错误:AttributeError:'str'对象没有属性'get'
这是一个类型不匹配的问题} to be "a GeoJSON-like dict or an object that implements the Python geo interface protocol (such as a Shapely Polygon)" ,但你从Geopandas上读到的可能与此不符
rasterio.mask.raster_geometry_mask
expects ^{一种方法是使用^{} 模块读取shapefile:
如果在创建遮罩后仍需要使用Geopanda,则可以在创建遮罩后再次将其与Pandas数据帧关联(通过使用形状中的简单索引顺序或ID属性等)
相关问题 更多 >
编程相关推荐