gis统计百分比_详细讲解ArcGIS数据统计及字段计算

本文详细讲解了如何使用ArcGIS进行数据统计分析,包括面积制表、汇总统计数据和频数工具的运用,以实现不同归属者所拥有的植被类型面积统计。同时,介绍了字段计算功能,如批量赋值、字段间赋值和Python表达式的运用,为属性字段进行复杂计算提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:详细讲解ArcGIS数据统计及字段计算

数据统计分析

如下图所示,在空间分析工具箱和分析工具箱中,均有相关的统计分析工具,使我们能够对已有数据进行统计分析。

其中,面积制表、汇总统计数据、分区统计等等都是常用的工具。现有一植被覆盖图,包含“归属者”(Owner)、“植被类型”(VEG_DESC)、“面积”(area)等字段。需要统计的是,按照归属者统计出每类用地的面积,也就是说,需要统计不同的人所拥有的每种植被覆盖类型的面积是多少。

根据上述要求,利用ArcGIS工具箱中的汇总统计数据、频数及面积制表工具均可实现上述统计要求。汇总统计数据工具可实现如下统计运算:总和、平均值、最大值、最小值、范围、标准差、计数、第一个和最后一个。输出结果表将由包含统计运算结果的字段组成,将使用以下命名约定为每种统计类型创建字段:SUM_FIELD、MAX_FIELD、MIN_FIELD、RANGE_FIELD、STD_FIELD、FIRST_FIELD、LAST_FIELD 和 COUNT_FIELD,同时,还可以指定案例分组字段,将单独为每个唯一属性值计算统计数据,则每个案例分组字段值均有一条对应的记录。更多干货敬请关注:GIS前沿如下图所示,对area字段进行总和统计,案例分组字段设置为Owner、VEG_DESC,进而可以得到不同归属者对应的植被类型的面积总数。

频数工具读取表和一组字段,并创建一个包含唯一字段值和每个唯一字段值的出现次数的新表。输出表将包含频率字段和指定的频率字段及汇总字段。汇总字段参数是可选项,选中后则频率计算的唯一属性值将由每个汇总字段的数字属性值进行汇总。Owner、VEG_DESC设置为频数字段,area字段设置为汇总字段,则可获得想要的结果,如下图所示:

面积制表工具用来计算两个数据集之间交叉制表的区域并输出表。针对上述需求,选择同一数据集即可。选择对应的区域字段:Owner、类字段:VEG_DESC即可。如下图所示:

通过面积制表的对话框不难发现,其可针对两个数据集进行处理。此处再增加一个专门针对面积制表工具的应用示例。数据为不同植被覆盖度的栅格图和不同区域归属者的矢量图,现需要统计不同归属者所拥有的不同植被覆盖面积是多少。栅格数据如下:

矢量数据如下图所示:desc_字段记录归属者信息。

利用面积制表工具,输入对应的区域矢量数据和对应的区域字段desc_,输入对应的栅格数据和对应的类字段,如下图所示:

确定后,即可得到不同的归属者所拥有的不同植被覆盖的总数二维表。

字段计算

在实际数据处理过程中 ,可能会遇到现有数据源并非是我们所想得到的数据,而需要对已有源数据进行一定的计算处理,得到我们想要的结果。

在ArcGIS中Field Calculator,也就是字段计算器是个强大的对属性字段进行各式各样计算的功能,利用字段计算器总能达到事半功倍的效果。

利用字段计算器,用以计算字段值。这些字段值,可以是属性表里相关字段的综合,比如百分比,分解字段等;更多干货敬请关注:GIS前沿可以是和图形有关的值,比如点的xy坐标,面的中心点坐标,线的长度等等;也可以是为了满足某种特定需求而创造出来的值。

1)属性字段计算器

在ArcMap中,无论是在属性框中右击字段打开的字段计算器还是在工具箱中的字段计算器工具,都支持Python 和 VB表达式。

在图层上右键,打开属性表,在要计算的字段上右键,打开字段计算器窗口,属性表中的字段计算器如下图所示:

属性字段计算器包括简单模式和高级模式两种,如下图所示,左图为简单模式,右图为复杂模式:

数据管理工具箱中字段工具集下的字段计算工具如下图所示,与属性表中的字段计算器类似,可实现对指定字段的表达式计算。

通过字段计算器可实现众多而复杂的字段计算,先从最基本最简单的字段批量复制开始。字段批量赋值给字段OWNER批量赋值“ArcGIS”

注意:如果是字符串的话双引号一定要用英文输入法下的双引号,不能用中文输入法的双引号,会报错;如果有选中要素,默认是仅计算选中部分。

2)字段之间赋值

把字段Rowid的值赋批量赋给字段FID

注意:字段间赋值时要考虑到字段类型以及字段里填写的内容,例如文本型的字段再赋给数字型的字段时会出错。需要通过函数进行转换。

在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。您可以对所有记录或选中记录执行简单计算和高级计算。此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性,可以通过 Python 或 VB 执行。

Python 是 ArcGIS 建议使用的脚本语言。如果要访问地理处理功能(包括要素几何),请使用 Python。采用 Python 作为 ArcGIS 10.0 的脚本语言为执行计算提供了许多便利。

通过 Python 表达式和“代码块”参数可执行以下操作:

在表达式中应用任意 Python 函数。

访问地理处理函数和对象。

访问要素几何的属性。

访问新的随机值运算符。

根据 if-then-else 逻辑对值进行重分类。

3)使用其他地理处理工具

在实际的处理中经常遇到根据条件为属性赋值的情况,下面就介绍如何利用Python批量替换属性列表在的值的简单例子,如下图所示,利用Python为数值型进行范围分析与统计,根据范围值,为属性计算新的分类代码值。

详细代码如下:

def Reclass(WellYield):

if (WellYield <= 50):

return 1

if (WellYield <=150 and WellYield > 50):

return 2

else:

return 3

篇幅有限,此处仅给出一个简单的Python例子,详细的内容,读者可参考ArcGIS相关帮助文档、ESRI中国社区以及ESRI在线帮助等相关资料和资源。另外,在字段计算器中,可以将表达式保存为cal格式文件,可以用记事本打开编辑。对于一个经常用的表达式,可以写好之后保存起来,下次使用的时候,只需要加载过来即可。

文章转载于csdn,作者冰清-小魔鱼

版权归原作者所有,如有侵权请告知删除

责任编辑:

### GIS计算线要素坡度的方法 在地理信息系统 (GIS) 中,计算线要素的坡度是一个常见的需求,尤其是在地形分析中。为了实现这一目标,通常会利用高程数据来提取坡度信息。 #### 使用 DEM 数据准备 首先,需要获取研究区域内的数字高程模型(DEM)。这可以通过多种途径获得,例如美国地质调查局(USGS)、国家地图服务或其他公开的数据源[^1]。 #### 坡度栅格创建 一旦有了 DEM 文件,在 ArcGIS 或 QGIS 这样的软件平台里可以使用内置工具生成坡度图层。具体操作如下: - **ArcGIS**: 利用 Spatial Analyst 扩展模块中的 Slope Tool 来处理输入的 DEM 并输出表示地面倾斜程度的结果。 - **QGIS**: 可通过 Raster -> Terrain Analysis -> Slope 功能完成相同任务。 这些过程将基于相邻像元之间的高度差值自动计算每个位置上的斜率角度或百分比形式表达的坡度值[^2]。 #### 将坡度应用于线要素 对于特定路径或者线路类型的矢量对象来说,则需进一步考虑其走向与局部地形变化间的关系。一种方法是先将上述得到的整体坡度表面转换成适合叠加在线状特征上使用的格式;另一种更精确的方式是在构建每一段直线之前就考虑到起点到终点间的海拔差异并据此估算平均坡度。 以下是 Python 脚本的一个简单例子,演示如何读取 shapefile 格式的河流网络文件,并为其添加一个新的字段存储各段河道对应的平均坡降数值: ```python import geopandas as gpd from shapely.geometry import LineString, Point import numpy as np def calculate_slope(line:LineString,elevation_data): """给定一条线和对应的高度数据集,返回该条线路上的平均坡度""" coords = list(line.coords) elevations = [] for coord in coords: # 获取坐标处的高程值 elevation_at_point = get_elevation_from_dem(coord, elevation_data) elevations.append(elevation_at_point) z_diffs = np.diff(elevations) distances = [line.project(Point(coords[i])) - line.project(Point(coords[i+1])) for i in range(len(coords)-1)] slopes = abs(z_diffs / distances) avg_slope = sum(slopes)/len(slopes)*100 # 结果转为百分数 return round(avg_slope, 2) river_network = gpd.read_file('path_to_river_shapefile.shp') elevation_dataset = load_your_DEM_here() river_network['avg_slope'] = river_network.apply(lambda row :calculate_slope(row.geometry, elevation_dataset), axis=1 ) print(river_network[['id', 'avg_slope']]) ``` 此脚本假设存在一个函数 `get_elevation_from_dem` 和另一个加载 DEM 的命令 `load_your_DEM_here()` ,它们分别负责查询单个点位的高程以及导入整个地区的 DEM 数据集。实际应用时应替换为适当的功能调用来适配所选的具体 GIS 库和技术栈环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值