收到的AttributeError:“str”对象在使用光栅几何图形遮罩时没有属性“get”

2024-10-05 10:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要通过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'


Tags: fromimportasmaskcontentdatasetbackgroundgeopandas
1条回答
网友
1楼 · 发布于 2024-10-05 10:17:25

这是一个类型不匹配的问题rasterio.mask.raster_geometry_maskexpects ^{} to be "a GeoJSON-like dict or an object that implements the Python geo interface protocol (such as a Shapely Polygon)",但你从Geopandas上读到的可能与此不符

一种方法是使用^{}模块读取shapefile:

import fiona
import rasterio

dataset = rasterio.open('/path/to/your/img.tif')

with fiona.open("tests/data/box.shp", "r") as shapefile:
    shapes = [feature["geometry"] for feature in shapefile]

out = rasterio.mask.raster_geometry_mask(dataset, shapes, crop=True)

如果在创建遮罩后仍需要使用Geopanda,则可以在创建遮罩后再次将其与Pandas数据帧关联(通过使用形状中的简单索引顺序或ID属性等)

相关问题 更多 >

    热门问题