生态安全格局的构建里,生态阻力面是绕不开的一环。用GIS做区域生态网络分析,不管你是学生跑毕业设计,还是规划院做国土空间生态修复,最后几乎都会落到"源地—阻力面—廊道"这条主线上,而阻力面就是中间那块承上启下的核心拼图。说直白点,它是一张给整个研究区逐像元打分的"穿越代价地图":林地、水体这些地方物种迁得动,代价低,阻力值就小;建设用地、主干道、高陡坡这些地方过不去,阻力值就大。GIS在这里干的活,是把分散的土地利用、DEM、NDVI、道路、水体等图层,统一到同一个网格框架下,按权重叠出一张连续的阻力栅格。这篇文章我打算把从因子选取、权重确定、数据预处理,到栅格叠加、结果校核、常见报错排查的全流程讲透,适合正在做生态安全格局、生态网络、最小累积阻力模型(MCR)的朋友参考,也适合刚接触栅格叠加、想搞明白"为什么我的阻力面长得不对劲"的GIS新手。
1. 生态阻力面到底在解决什么问题
1.1 从"源地—阻力面—廊道"三步走说起
生态安全格局这套方法论,本质上是在回答一个空间问题:一片区域里,哪些地方是生态功能的核心,哪些地方是物种迁移的必经通道,哪些地方又是阻碍流动的"墙"。对应的技术路线就是三步走。第一步识别生态源地,通常是生境质量高、面积够大、生态服务功能强的斑块,比如自然保护区核心区、连片天然林、大型湿地;第二步构建阻力面,把整个区域对生态流的阻碍程度量化成一张连续栅格;第三步基于阻力面做最小累积阻力路径计算,提取源地之间的生态廊道,再叠加节点、障碍点,最终形成"源地+廊道+节点"的格局。
阻力面在这三步里是关键桥梁。源地识别决定了"从哪里出发",廊道提取决定了"怎么走",而阻力面决定了"走哪条路代价最小"。如果阻力面本身就是错的,后面无论用多花哨的算法提取廊道,结果都站不住脚。我见过不少同学,源地挑得挺认真,MCR也跑出来了,但廊道直接横穿城区、跨越高速公路,一查才发现阻力面里建设用地给了个很低的阻力值,整张面失去了区分度。
所以阻力面的核心任务只有一个:让不同景观单元对生态流的阻碍差异,在数值上如实体现出来,并且空间上连续可比。这句话听着简单,落地时会牵扯到坐标系、分辨率、重分类标准、权重体系一连串细节,任何一个环节掉链子,整张面就废了。
1.2 阻力面在最小累积阻力模型里的位置
最小累积阻力模型(MCR)是Knaapen在1992年提出的,后来在国内生态安全格局研究里被广泛应用。它的核心公式可以简化理解为:从某个源地出发,到空间上任意一点的最小累积阻力,等于沿途每个像元的阻力值乘以路径代价的累加。用GIS实现时,通常用**成本距离(Cost Distance)**工具来完成,输入就是源地图层加阻力面栅格。
这里有个容易被忽略的点:MCR对阻力面的相对值敏感,对绝对值不敏感。也就是说,你把整个阻力面同乘一个常数,廊道位置基本不变;但你把因子之间的相对关系搞反了,比如让建设用地阻力低于林地,廊道立刻就会乱跑。所以权重体系、重分类标准的设计,比单纯的数值精度重要得多。很多人纠结"阻力值该给1还是给10",其实更该纠结的是"建设用地该不该是林地的20倍还是50倍",这是量级关系问题,不是绝对值问题。
理解了这一点,你在调参时就有了主心骨:先保证因子内部的单调性和因子之间的量级合理,再去抠具体数值。这也是我后面反复强调标度设计和权重归一化的原因。
1.3 三个常见认知误区
第一个误区是因子越多越好。有人一口气塞十几个因子,高程、坡度、坡向、NDVI、土地利用、距道路、距水体、距居民点、GDP、人口密度全上。因子一多,共线性问题就来了,比如高程和坡度高度相关,土地利用和NDVI也高度相关,权重再一分摊,单个因子的贡献被稀释得几乎看不见,最后阻力面反而变成一锅"和稀泥",区分度极差。
第二个误区是分辨率越细越好。有人非要用5米甚至1米的栅格做区域尺度阻力面,结果数据量爆炸,成本距离计算跑几个小时,而且很多因子(比如NDVI、人口)本身就只有30米或更粗的精度,硬插值到1米纯属制造虚假精度。区域尺度我一般建议30米为主,城市尺度可以用10米,够用就行。
第三个误区是权重拍脑袋。有人直接给每个因子平均权重,理由是"没有依据就平均"。这不是严谨,这是偷懒。生态学过程里,土地利用对物种迁移的阻挡作用,客观上是强于坡向这类因子的。平均权重会让次要因子过度放大,破坏阻力面的生态学意义。合理的做法是用AHP或熵权法给出一个有科学依据的权重体系,哪怕粗糙一点,也比平均强。
2. 阻力因子怎么选、阻力值怎么定
2.1 因子体系的取舍逻辑
选因子无非两条线:自然本底和人为干扰。自然本底反映地形和生境本身对迁移的天然限制,常用高程、坡度、地形起伏度、NDVI、土地利用类型;人为干扰反映人类活动对生态过程的切割和压迫,常用距道路距离、距建设用地距离、距居民点距离、夜间灯光指数。
我一般建议控制在5到7个因子这个区间。太少了覆盖不全,太多了共线性严重。选的时候按"两条线各挑两三个"来配,比如自然本底选土地利用、坡度、NDVI,人为干扰选距主要道路、距建设用地、夜间灯光,正好六个,结构清晰,也好解释。
还有一个实操细节:因子之间尽量别高度相关。跑之前可以用相关系数矩阵查一下,如果两个因子相关系数超过0.8,就砍掉一个,或者把两个合成一个综合因子。比如高程和坡度在山区相关性可能到0.7以上,就得谨慎。我在华北平原做过一个项目,高程几乎没起伏,把它放进去纯属摆设,权重还分走了0.1,果断拿掉后阻力面干净多了。判断因子有没有用,最简单的办法是看它在研究区内的空间变异系数,变异太小说明它区分不了什么,留着就是噪音。
2.2 分级赋值与连续赋值
阻力值的赋值方式主要有两种。分级赋值是把每个因子按阈值切成若干等级,每级给一个固定阻力值,比如土地利用直接按地类给值。这种方式直观、可解释性强,文献里最常见。连续赋值是用函数把因子值映射到阻力值,比如用地形起伏度做归一化后乘一个系数。这种方式更平滑,避免了分级边界处的突变,但对函数形式的选择要求更高。
我的经验是土地利用类型必须用分级赋值,因为地类本身就是离散的,水域、林地、耕地、建设用地之间不存在连续过渡。而坡度、NDVI、距道路距离这类连续变量,可以用分级,也可以用连续函数,看研究区特点。如果研究区地形破碎、坡度跨度大,连续赋值更合适;如果地形简单,分级就够。
下面这张表是我常用的分级参考,具体数值要根据研究区和目标物种调整,别照抄:
| 因子 | 等级划分 | 阻力值 |
|---|---|---|
| 土地利用 | 林地/水域 | 1-10 |
| 土地利用 | 草地/湿地 | 20-30 |
| 土地利用 | 耕地/园地 | 50-70 |
| 土地利用 | 未利用地 | 100-150 |
| 土地利用 | 建设用地 | 200-300 |
| 坡度(°) | 0-3 | 1 |
| 坡度(°) | 3-8 | 10 |
| 坡度(°) | 8-15 | 30 |
| 坡度(°) | 15-25 | 60 |
| 坡度(°) | >25 | 100 |
| 距道路(m) | 0-500 | 100 |
| 距道路(m) | 500-1000 | 70 |
| 距道路(m) | 1000-2000 | 40 |
| 距道路(m) | 2000-5000 | 20 |
| 距道路(m) | >5000 | 10 |
NDVI的处理方向相反,值越高说明植被越好、阻力越低,所以映射关系是"高NDVI对应低阻力"。这个方向千万别反,我见过有人把NDVI高低和阻力高低弄反了,结果阻力面把整个建成区标成了低阻力,廊道全往城里钻。
2.3 权重:AHP、熵权与组合赋权
权重确定是阻力面里最"玄学"也最容易出错的一步。主流方法三种:层次分析法(AHP)、熵权法、组合赋权。
AHP靠专家打分,主观性强,但符合生态过程的机理判断,是生态安全格局研究里的绝对主流。熵权法靠数据本身的离散程度定权,客观,但纯粹的数据驱动会忽略生态学意义,比如某研究区建设用地面积特别小,熵权法可能给它很低权重,可实际它对迁移的阻挡是决定性的。组合赋权就是两者加权平均,兼顾主观和客观,近年挺流行。
我的建议是:如果你是做毕业设计或常规项目,AHP足够,把判断矩阵和一致性检验写清楚,比什么都强。如果导师明确要求客观赋权,那就上熵权或组合赋权。别为了显得高级硬上熵权法,结果权重解释不清,答辩时反而被问住。
2.4 AHP实操:判断矩阵与一致性检验
以5个因子为例,土地利用(L)、坡度(S)、高程(E)、距道路(D)、NDVI(V),用1-9标度构造判断矩阵。1表示同等重要,3表示稍重要,5表示明显重要,7表示强烈重要,9表示极端重要,2、4、6、8是中间值,倒数表示反向比较。
假设矩阵如下:
| L | S | E | D | V | |
|---|---|---|---|---|---|
| L | 1 | 2 | 3 | 2 | 3 |
| S | 1/2 | 1 | 2 | 1 | 2 |
| E | 1/3 | 1/2 | 1 | 1/2 | 1 |
| D | 1/2 | 1 | 2 | 1 | 2 |
| V | 1/3 | 1/2 | 1 | 1/2 | 1 |
用方根法算权重:先对每行求几何平均,再归一化。算下来大致是 L=0.36,S=0.20,E=0.10,D=0.20,V=0.10,加起来是0.96,这里是为了演示取整,实际计算要保证严格加到1。
一致性检验是AHP的必做步骤。最大特征根 λmax 约等于5.04,一致性指标 CI=(λmax-n)/(n-1)=(5.04-5)/4=0.01,查随机一致性指标 RI,n=5时 RI=1.12,一致性比例 CR=CI/RI=0.01/1.12≈0.009,小于0.1,说明矩阵一致性可以接受。
| n | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|
| RI | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 |
有一点要提醒:AHP的判断矩阵最好找2到3位相关背景的人分别打分,然后求几何平均。一个人拍出来的矩阵,主观性太强,多人平均能缓解偏差。我在项目里通常会找做生态的同事和做规划的各打一份,再取几何平均,出来的权重既符合生态机理,又兼顾规划实际,解释起来也顺。
3. 数据准备与栅格预处理
3.1 坐标系统一:投影怎么选
所有因子图层必须在同一个投影坐标系下,这一步没做好,后面全乱。注意是投影坐标系,不是地理坐标系。经纬度坐标(比如CGCS2000的经纬度形式)下,一格经度和一格纬度的实际距离不一样,做距离分析和栅格叠加时长度、面积都会失真。
区域尺度推荐用等积投影,比如Albers等积投影,它能保证面积不变形,做生态流分析比较稳。如果研究区跨度不大,用UTM投影或CGCS2000高斯克吕格3度带也完全可以。城市尺度项目我一般用当地中央经线的3度带投影,横坐标带号记得对上。投影参数定下来之后,所有数据统一重投影过去,包括矢量边界、道路、水体、DEM、影像派生的NDVI。
一个实操提醒:ArcGIS里用Project Raster(投影栅格)而不是Define Projection(定义投影)。前者是真正做坐标变换,后者只是贴标签,不做任何变换。把定义投影当成投影用,是新手最经典的错误之一,结果就是图层看着"投影对了",实际位置全错。
3.2 DEM处理:填洼、坡度、分辨率
DEM是自然本底因子的主要来源。原始DEM(比如30米SRTM、ASTER GDEM,或12.5米的高精度产品)通常带有洼地,直接算坡度、汇流会出问题。填洼(Fill Sinks)是标准预处理步骤,ArcGIS里的Fill工具、QGIS的Wang & Liu算法都能做。填洼前后差值一般很小,但能让水文和地形分析稳定很多。
坡度用Slope工具从填洼后的DEM提取,单位选度。提取完记得检查有没有异常值,比如景观边缘或水域范围会出现坡度极值,这时候要用水体掩膜把水域栅格值统一设成低阻力。
分辨率对齐是另一个大头。假设你土地利用是30米、DEM填洼后也是30米、NDVI是10米,那就得把所有图层重采样到统一的像元大小和网格原点。统一到哪个分辨率,取决于最粗的那个因子。如果NDVI只有10米而其他都是30米,就统一到30米。重采样方法:连续变量(NDVI、高程)用双线性或三次卷积,分类变量(土地利用)必须用最邻近,否则地类编码会被插成小数,彻底失去意义。
3.3 矢量转栅格的三个隐形坑
第一个坑是矢量转栅格时像元对齐。道路、水体这类矢量线要素,转栅格时如果网格原点和其他栅格不一致,会出现半像元的错位,叠加时道路阻力带就会整体偏移。解决办法是先用Snap Raster(捕捉栅格)把环境里的对齐基准设成同一张参照栅格,再转。QGIS里可以在栅格化时手动指定输出范围和像元大小,确保对齐。
第二个坑是缓冲区宽度和像元大小的匹配。道路缓冲区如果设成300米,而像元是30米,那正好10个像元宽,边界干净;如果缓冲设成250米,就会切出半像元,转栅格时边界毛糙。我一般让缓冲宽度取像元大小的整数倍,减少边界伪影。
第三个坑是NoData传递。多个栅格叠加时,只要有一个像元是NoData,结果就可能是NoData,这叫NoData传染。研究区边界外、水体内部容易出现NoData,叠加后阻力面会莫名其妙缺一块。处理办法是叠加前给每个栅格补值(比如用邻域均值填补,或把研究区外的NoData统一赋成研究区内的均值),或者在栅格计算器里用条件判断把NoData替换掉。
4. 阻力面生成的完整实操流程
4.1 各因子栅格化与重分类
第一步把每个因子加工成已经赋好阻力值、且像元大小方向一致的栅格。土地利用用Reclassify按地类编码映射到阻力值,比如编码1(林地)映射到5,编码5(建设用地)映射到250。坡度、距道路距离同理,按前面表格的分级切开。
距道路距离的计算,先在矢量道路图层上做欧几里得距离(Euclidean Distance),生成距离栅格,再重分类。注意做距离前道路矢量要统一投影,且要考虑是否排除研究区外的道路影响——如果研究区边缘有主干道,它的影响会"渗"进研究区,是保留还是截断,要按生态学意义决定。
4.2 标准化与重采样到统一网格
各因子量纲不同,有的阻力值范围是1到10,有的是1到300。如果直接加权叠加,量级大的因子会天然主导结果,权重就形同虚设。所以要先标准化。我一般把所有因子线性拉伸到 0-100 或 1-100 这个统一区间,再乘权重。标准化用栅格计算器或QGIS的Raster Calculator里的线性映射表达式完成。
标准化的意义一定要理解透:它让"权重"真正决定因子影响力,而不是让量级大的因子偷偷抢戏。很多人的阻力面"看着有权重,实际没权重",根源就是没标准化。
4.3 加权叠加:栅格计算器与Python两条路
统一网格和标准化做完后,就进入加权叠加。ArcGIS的栅格计算器表达式大致长这样:
"Res" = "LU_std" * 0.36 + "Slope_std" * 0.20 + "DEM_std" * 0.10 + "Road_std" * 0.20 + "NDVI_std" * 0.10QGIS的栅格计算器语法类似,用@1表示图层的第一波段:
"LU_std@1" * 0.36 + "Slope_std@1" * 0.20 + "DEM_std@1" * 0.10 + "Road_std@1" * 0.20 + "NDVI_std@1" * 0.10图层多、需要反复调参的时候,我更推荐用Python跑,一次写好脚本,改权重只改字典,效率高得多,也方便复现。下面这段用 rasterio + numpy 实现,核心思路是把所有因子读进同一网格,逐像元加权累加:
import rasterio import numpy as np from rasterio.enums import Resampling # 因子文件与对应权重 factors = { "LU_std.tif": 0.36, "Slope_std.tif": 0.20, "DEM_std.tif": 0.10, "Road_std.tif": 0.20, "NDVI_std.tif": 0.10, } # 以第一个因子为参照网格 with rasterio.open("LU_std.tif") as ref: meta = ref.meta.copy() height, width = ref.height, ref.width meta.update(dtype="float32", nodata=-9999) acc = np.zeros((height, width), dtype=np.float32) for fn, w in factors.items(): with rasterio.open(fn) as src: # 重采样到参照网格,连续变量用双线性 arr = src.read( 1, out_shape=(height, width), resampling=Resampling.bilinear, ).astype(np.float32) nd = src.nodata if nd is not None: arr = np.where(arr == nd, np.nan, arr) acc += np.nan_to_num(arr, nan=0.0) * w # 把累加后仍为0且原本有NoData的区域标回NoData out = np.where(acc <= 0, -9999, acc).astype(np.float32) with rasterio.open("resistance.tif", "w", **meta) as dst: dst.write(out, 1)跑之前有一点必须确认:所有因子的行列数、像元大小、左上角坐标完全一致。如果参照网格选错了,就会引入系统性的空间错位。我的习惯是先把所有因子用同一个模板栅格统一裁剪、重采样、锁定范围,再进叠加脚本,这样脚本内部基本不用做额外的对齐处理。
4.4 结果校核与平滑
叠加完先别急着出图,做三件事校核。第一,看数值分布,用直方图检查有没有异常极值,正常阻力面应该是一个右偏分布,大部分像元是中低阻力,少数高阻力(建设用地、主干道)。如果分布均匀或者异常尖峰,说明某因子标准化出了问题。
第二,看空间格局,把阻力面和土地利用图叠着看,建设用地和主干道附近应该是高值条带,林地、水体应该是低值片状,如果反了或者没区分度,回头查方向。
第三,做轻微平滑。原始叠加结果常常有椒盐噪声(孤立像元跳变),用Focal Statistics做3×3均值滤波,能显著提升后续成本距离的连续性。平滑窗口别太大,3×3到5×5足够,太大会抹掉道路这类线性障碍。平滑后阻力值范围可能略变,如果需要可以再线性拉伸回原区间。
5. 常见问题与排查实录
5.1 像元错位造成的"伪阻力"
这是最隐蔽也最坑的问题。表现是阻力面里出现和真实地物对不上的高值带,比如一条笔直的低阻力通道穿过建成区,或者道路高阻力带整体偏移几百米。根源通常是某几个因子没和参照网格严格对齐,尤其是矢量转栅格那张。
排查方法很直接:把阻力面和土地利用图半透明叠加,看高值区和建设用地的空间吻合度。不吻合就逐个因子查对齐。预防手段是全程用同一张模板栅格,转栅格、重采样、裁剪都用它做基准,最好在环境设置里把处理范围、像元大小、对齐全部锁定到模板。这一步花十分钟设置,能省掉后面两小时的返工。
5.2 NoData传染与边界缺块
阻力面边缘或水体位置出现空洞,基本都是NoData传染。原因是一个因子的NoData在叠加时"污染"了整行结果。解决思路两条:一是在叠加前把各因子的NoData用条件表达式替换成合理值(比如研究区外统一替换成研究区均值,水体内部统一替换成水域阻力值);二是在脚本里像我上面那样用np.nan_to_num把NaN先当0处理,最后再统一标记哪些区域是真正的NoData。
还有个容易混淆的点:水域到底算不算NoData。从生态流角度,大型水面物种过不去,应该给较高阻力,属于有效数据;只有研究区外的区域才是NoData。把水域设成NoData,会导致廊道直接"跨越"水面,结果失真。
5.3 结果异常的速查表
下面这张表是我这些年攒下来的排查清单,遇到阻力面不对劲可以逐条对照:
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 建设用地阻力值偏低 | NDVI或距离因子方向反了 | 检查NDVI映射方向、距离标准化公式 |
| 阻力面没区分度、一片灰 | 没做标准化或权重被量级淹没 | 检查各因子是否统一到0-100区间 |
| 高值带位置偏移 | 像元错位 | 用模板栅格重新对齐,锁定环境设置 |
| 阻力面出现空洞 | NoData传染 | 叠加前填补NoData |
| 廊道横穿建成区 | 建设用地阻力赋值过低或权重过低 | 复核地类赋值和AHP权重 |
| 结果全是NoData | 某因子整张为NoData或范围不一致 | 单独检查每个因子的范围和统计 |
| 边界出现异常极值 | 边缘效应 | 用研究区边界掩膜裁剪并补值 |
| 坡度因子无意义 | 研究区地形平坦 | 查看坡度变异系数,必要时剔除该因子 |
这张表建议存下来,跑模型时对着查,能省不少时间。
5.4 几条实操心得
心得一,标准化和重分类的顺序别搞反。正确顺序是"先重分类成阻力值,再标准化"。如果反过来,先标准化原始因子再重分类,阻力值的物理意义就没了。
心得二,权重一定归一化。所有因子权重之和严格等于1,否则加权叠加出来的阻力面量级不稳定,不同项目之间没法比。AHP算完记得手动检查一下和是不是1。
心得三,留一版未平滑的原始阻力面。平滑是为了后续分析稳定,但发表或汇报时,未平滑版本更能体现原始数据的空间细节。两版都存,按需取用。
心得四,把预处理过程写成脚本或模型。ArcGIS的ModelBuilder、QGIS的Graphical Modeler,或者干脆用Python,把"重投影—裁剪—重采样—对齐"固化成流程。换研究区、换因子时一键重跑,比自己手动点几十遍可靠得多,这一点在打GIS技能竞赛或者做多方案对比时尤其重要。
6. 阻力面之后:与廊道提取的衔接
阻力面做完,下一步就是把它喂给成本距离工具,生成从每个源地出发的累积阻力面,再叠加求最小累积阻力路径,也就是潜在生态廊道。这里有几个衔接细节值得先说清楚,避免阻力面白做。
源地栅格的制作。成本距离需要"源"图层,通常把识别出的生态源地做成二值栅格,源地内为1,其余为0(或NoData)。注意源地的像元大小必须和阻力面完全一致,行列对齐。源地边界如果来自矢量且比较碎,转栅格时用最邻近法,别用双线性,否则源地会"糊"出去一圈。
成本距离的方向性。MCR理论上是各向同性的,但现实中物种迁移可能受风向、地形梯度影响呈现方向偏好,这就是各向异性阻力面。如果想做更精细,可以把阻力面拆成"沿某方向"和"垂直于该方向"两个分量,或者用插件做方向加权。常规项目用各向同性就够,别一步跨太大。
廊道的阈值筛选。成本距离算出后,廊道不是越宽越好,得设一个累积阻力阈值,超过阈值的区域认为不可通行。阈值怎么定,可以用源地间最小成本的某个百分位数,也可以通过观测数据标定。这个阈值和阻力面的量级强相关,所以前面强调权重归一化和标准化,就是为了让阈值有意义、可迁移。
多源地的叠加逻辑。如果有多个源地,成本距离要对每个源地分别计算,再取最小值合成总的累积阻力面。企业家数一多,计算量上去了,可以用并行脚本或分区计算,避免一次性跑崩内存。
和景观连通性指标的结合。阻力面还能作为输入,喂给电路理论(Circuitscape)或图论连通性指数,从"电流密度"角度识别关键廊道和瓶颈点,比单纯MCR更能反映多点流动的冗余路径。我近两年做项目,经常是MCR和电路理论两套一起跑,交叉验证廊道位置,结论更稳。
最后说个容易被忽视的衔接问题:阻力面和源地、廊道的尺度一致性。如果源地用的是10米分辨率,阻力面却是30米,成本距离算出来会严重失真。整个链条上,分辨率、投影、范围必须从头到尾锁死。我吃过这个亏,前期图省事混用了两种分辨率,后来发现廊道位置偏了好几百米,重做了两遍。所以从项目第一天起,就把"统一网格"当成铁律,后面所有环节都轻松。
我个人在实际操作中的体会是,阻力面这活儿真正难的从来不是软件操作,而是把生态学意义翻译成数值关系。哪个因子该重、哪个该轻,建设用地该是林地的多少倍,这些判断没有标准答案,得结合研究区实际情况和目标物种习性来定。实操里我养成了一个习惯:每调一次权重,就把阻力面和土地利用图叠一遍,肉眼看看"该高的地方高没高、该低的地方低没低"。这种"边做边看、看不对就回头"的笨办法,比一次性把参数调完美然后闷头跑到底靠谱得多。