问题描述
我有一些西班牙市政区域的 shapefile,除了每个区域的标识符外,还包含灌溉公顷数。 我的目标是创建一个列,其值是每个市政区域相邻多边形的灌溉公顷数的总和。 例如,在下图中,中间多边形的值与黄色(选定的)灌溉公顷的总和有关。
结果数据应如下所示:
欢迎任何帮助/解决方案,尤其是 QGIS 或 R。
向大家致以最诚挚的问候,并提前致谢。
解决方法
使用 Python 和 geopandas:
import geopandas as gpd
df = gpd.read_file('shapefile.shp')
for index,row in df.iterrows():
neighbors = df[df.geometry.touches(row['geometry'])].Identitycode.tolist()
#neighbors = neighbors.remove(row.Identitycode)
# You can use list comprehension to exclude the current row in area sum
neighbors = [id for id in neighbors if row.Identitycode != id]
area = df[df.Identitycode.isin(neighbors)]['irrigated_ha'].sum()
df.at[index,"neighbour_ha"] = area
,
您可以尝试在 QGIS 3.16 中使用字段计算器。 您必须创建一个新字段 neighbor_ha,然后使用此公式
aggregate(
layer:='name layer with polygon',aggregate:='sum',expression:= "irrigated_ha",filter:= touches($geometry,geometry(@parent))
)
该公式添加字段 irrigate_ha 值,仅适用于接触当前特征的那些特征。
如果某些特征不能在考虑中标记,您可以使用 intersects() 函数代替 touches()