基于python(arcpy模块)对栅格数据求取加权重心(MeanCenter)

加权重心是研究区域中所有要素的平均 x 坐标和 y 坐标。平均中心对于追踪分布变化,以及比较不同类型要素的分布非常有用。在ARCGIS中我们可以利用平均中心这一工具轻松实现这一操作。但当文件较多时,arcgis耗时耗力,借助arcpy便可轻松实现这一过程。首先来了解一下平均中心的算法。

这是arcgis官方使用说明,在arcpy中我们用MeanCenter()函数来实现。不过需要注意的是,此函数的输入数据格式为shp数据,故我们手里的栅格数据还不能直接进行输入,需经过处理。可以将栅格数据转换成点数据,也可以转换成面数据。本文将栅格转化成点数据。同样使用arcgis中的栅格转点工具,批量操作可以使用arcpy调用转点函数。代码如下:

 

# -*- coding:utf-8 -*- 

import arcpy
from arcpy import env
from arcpy.sa import * 
import os
arcpy.CheckOutExtension("spatial")
arcpy.env.workspace = r"/你的文件路径/"
Rasters = arcpy.ListRasters("*","tif")
outpath = r"/保存路径/"
for raster in Rasters:
    out_point = outpath + str(raster).split('.')[0]  + ".shp"#定义输出文件名字
    arcpy.RasterToPoint_conversion(raster, out_point, "Value")
    print(out_point +    "has done")
print("over")

转换完毕之后便可以进行求取平均中心操作

# -*- coding:utf-8 -*- 

import arcpy
from arcpy import env
from arcpy.sa import * 
import os
arcpy.CheckOutExtension("spatial")
arcpy.env.workspace =r"文件路径"
files = arcpy.ListFeatureClasses("*.shp")
outpath = r"输出路径"

for f in files:
    outname = os.path.join(outpath,str(f).split('.')[0]+"center" + ".shp")
    arcpy.MeanCenter_stats(f, outname, "grid_code")
    print(outname +  "    has done")
print("over")

ok,搞定。arcpy功不可没,用最简单的代码实现了复杂的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值