加权重心是研究区域中所有要素的平均 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功不可没,用最简单的代码实现了复杂的操作。