Python:如何将geotiff转换为geopandas?

Python:如何将geotiff转换为geopandas?,python,geopandas,python-xarray,geotiff,rasterio,Python,Geopandas,Python Xarray,Geotiff,Rasterio,我有一个geotiff文件 import xarray as xr urbanData = xr.open_rasterio('myGeotiff.tif') plt.imshow(urbanData) 这是文件 我可以将文件转换为以坐标为点的数据帧 ur = xr.DataArray(urbanData, name='myData') ur = ur.to_dataframe().reset_index() gdfur = gpd.GeoDataFrame(ur, geometry=

我有一个geotiff文件

import xarray as xr
urbanData = xr.open_rasterio('myGeotiff.tif')
plt.imshow(urbanData)
这是文件

我可以将文件转换为以坐标为点的数据帧

ur  = xr.DataArray(urbanData, name='myData')
ur  = ur.to_dataframe().reset_index() 
gdfur  = gpd.GeoDataFrame(ur, geometry=gpd.points_from_xy(ur.x, ur.y))

但是,我想得到一个数据帧,它包含作为多边形而不是点的像素几何体。有可能吗?

让我有点惊讶的是,我还没有找到一个包来包装
光栅。功能
以获取数据数组并生成地理数据帧

但这些可能非常有用:

我通常会这样使用:

导入仿射
作为gpd导入geopandas
导入光栅特征
将xarray作为xr导入
将shapely.geometry作为sg导入
def polygonize(da:xr.DataArray)->gpd.GeoDataFrame:
"""
将二维数据数组多边形化为多边形的GeoDataFrame。
参数
----------
da:xr.DataArray
退换商品
-------
多边形化:geopandas.GeoDataFrame
"""
如果da.dims!=(“y”、“x”):
raise VALUE ERROR('尺寸必须为“y”、“x”))
values=da.values
transform=da.attrs.get(“transform”,无)
如果“转换”为“无”:
raise VALUERROR(“da.ATTR中需要转换”)
变换=仿射。仿射(*变换)
形状=光栅。特征。形状(值,变换=变换)
几何图形=[]
colvalues=[]
对于形状中的(geom、colval):
几何体.附加(sg.多边形(几何体[“坐标”][0]))
colvalues.append(colval)
gdf=gpd.GeoDataFrame({“value”:colvalues,“geometry”:geometry})
gdf.crs=da.attrs.get(“crs”)
返回gdf
请注意,在使用
xr.open\u rasterio
读取X阵列后,应首先从X阵列中挤压带状尺寸,使其成为2D:

urbanData=xr.open\u rasterio('myGeotiff.tif')。挤压('band',drop=True)

什么是“多边形的像素几何体”?GeoTIFF是光栅文件,不是矢量格式,所以我怀疑它是否能存储多边形数据。@jramsey这就是重点。有可能将光栅文件转换为矢量文件吗?这很危险。对于art,有一些工具可以通过执行边界跟踪并将跟踪路径存储为矢量,从光栅文件生成矢量文件。但是,该场景中的光栅文件相对简单,通常包含曲线或纯色区域的描述。这种矢量追踪的一个不错的选择是扫描一幅黑白卡通画,而不是像GeoTIFF那样的内容。我觉得你好像想对光栅进行多边形化。如果是这样,这可能是一个良好的开端