首页 > 其他分享 >【854】通过polygon切取tif栅格数据

【854】通过polygon切取tif栅格数据

时间:2023-07-06 09:13:55浏览次数:36  
标签:854 切取 polygon image mask poly rasterio values out

参考:Cutting a polygon from TIFF with Python [closed]


import rasterio
import rasterio.mask
import geopandas as gpd

dataset = rasterio.open("wc2.1_10m_elev.tif")
gdf_africa = gpd.read_file("africa1_map.gpkg")

poly = gdf_africa.loc[0, "geometry"]

# out_image is the tiff image cut by the poly
out_image, out_transform = rasterio.mask.mask(dataset, [poly], crop=True)

下面的例子是两幅世界地图,一幅是矢量一幅是栅格,通过矢量把栅格剪切,并获取其平均值!

polys = list(gdf_africa["geometry"]) 
avg_values = []

for poly in polys:
    out_image, out_transform = rasterio.mask.mask(dataset, [poly], crop=True)

    out_image[out_image == -32768] = 0
    sum_values = out_image.sum()
    out_image[out_image != 0] = 1 
    num_values = out_image.sum()

    avg_values.append(sum_values/num_values) 

-32768对应的为最小值,也就是非数值的部分,需要去掉,之后取和,就是总体象元值的和。

再把非0的数据赋值为1,取和之后就是计算有值的象元的个数,然后两者取商就是平均值。

这样计算效率很高,最开始我是考虑遍历整个地图,然后通过判断像素点是否在polygon里面计算,效率非常低!

 

标签:854,切取,polygon,image,mask,poly,rasterio,values,out
From: https://www.cnblogs.com/alex-bn-lee/p/17531145.html

相关文章

  • P8544 禁断之门对面,是此世还是彼世
    被蓝宝薄纱。题意复制的给定一场长度为\(n\)的正整数序列\(a\)和一个长度为\(m\)的正整数序列\(b\)。现在蓝根据序列\(a\)与序列\(b\)构造了一个\(n\)行\(m\)列的正整数矩阵\(A\)满足\(A_{i,j}=a_ib_j\),你需要构造\(n+1\)行\(t\)列的正整数矩阵\(B\)......
  • QGeoPolygon
    QGeoPolygon#include<QGeoPolygon> PublicFunctions QGeoPolygon() QGeoPolygon(constQList<QGeoCoordinate>&path) QGeoPolygon(constQGeoPolygon&other) QGeoPolygon(constQGeoShape&other) ~QGeoPolygon()voi......
  • AtCoder Beginner Contest 251 G Intersection of Polygons
    洛谷传送门AtCoder传送门经典结论,一个点\(P(x,y)\)在一个凸多边形内部\(S=\{(x_i,y_i)\}\)的充要条件是\(\foralli\in[1,n],(x_{i+1}-x_i,y_{i+1}-y_i)\times(x-x_i,y-y_i)\ge0\),其中\(S\)的点按照逆时针排列。然后我们运用叉积的一个性质......
  • 【841】shapely合并多个Polygon/MultiPolygon
    参考:Convertinglistofpolygonstomultipolygonusingshapely?MultiPolygon->Polygonlistlist(multiPoly.geoms)Polygonlist->MultiPolygonshapely.geometry.MultiPolygon([poly1,poly2,poly3,poly4,poly5]) ......
  • CF437E The Child and Polygon
    TheChildandPolygon题解这世界这么大,遇到了这个奇奇怪怪的题。这道题其实可以很自然的联想到卡特兰数。在卡特兰数的计数中,有这么一个意义:\(C_n\)表示把有\(n+2\)条边的凸多边形分成\(n\)个三角形的方案数。利用这个意义可以得到\(C_n\)的另一个递推关系:\[C_n=......
  • ABB CI854AK01-EA 3BSE030220R2
    W;① ⑧ 0 ③ 0 ① 7 7 7 ⑤ 9ABB CI854AK01-EA3BSE030220R2  PFCL201CE-50KN   5SHY5045L0020  PM891 3BSE053240R1  5SHY4045L00013BHB018162R0001  PFSK152  PM891K013BSE053241R1  3BHB020720R0002  一个微调的单轴系统和一个节......
  • CI854K01 3BSE025961R1保护电机/变压器/馈线/发电机等免受接地故障影响
    CI854K013BSE025961R1保护电机/变压器/馈线/发电机等免受接地故障影响CI854K013BSE025961R1CI854K013BSE025961R1 EFR用于保护控制面板和配电盘免受接地故障影响,保护电机/变压器/馈线/发电机等免受接地故障影响,可以保护炼油厂/纸浆工业/配电等危险和敏感行业。PFR:PFR(Ph......
  • Codeforces Round 854 补题总结
    CodeforcesRound854补题总结前言昨天做这套题很不顺,今天补完题大概总结一下。总结RecentActions按题意模拟即可,考虑到前\(n\)个数一定始终在后\(m\)个数的前面,所以说当当前队列中如果没有出现\(x\)而在第\(i\)轮放进了\(x\),那么当前在队首的编号小于\(n\)的数......
  • Navicat连接Oracle报错:ORA-28547...
    使用Navicat连接正常的oracle数据库时,提示 可能是因为Navicat本地的OCI版本与Oracle数据库版本不符造成的,可以下载对应的OCI版本在Navicat中使用。1.下载OCI搜索oracleinstantclient找到相关下载地址OracleInstantClientDownloads根据实际oracle数据库版本选择对应in......
  • AP8854DC-DC降压型电源管理IC 12-80V 7V2.5A 电动车暖手套 方案
    AP8854一款宽电压范围降压型DC-D电源管理芯片,内部集成使能开关控制、基准电源、误差放大器、过热保护、限流保护、短路保护等功能,非常适合宽电压输入降压使用。AP8854带使能控制,可以大大节省外围器件,更加适合电池场合使用,具有很高的方案性价比。可内置可外置应用原理图如......