尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GIS生态阻力面构建全流程:投影对齐、修正赋值与廊道验证

GIS生态阻力面构建全流程:投影对齐、修正赋值与廊道验证 阻力面这件事我前后返工过不下五遍最惨的一次是廊道全部贴着公路走导师看了一眼就说你这阻力面等于没做。后来复盘才发现问题根本不在赋值的数值上而在最前面几步坐标系混着用、像元差半个格、NoData 被当成 0 参与了运算。基于 GIS 构建生态安全格局生态阻力面的建立是整个链条里最脏也最容易被跳过验证的一环——源地识别有成熟工具廊道提取有一键式脚本唯独阻力面从因子选取到赋值到修正每一步都带着强烈的主观判断。这篇就把我踩过的坑、试过的参数和最后跑通的那套流程完整摊开从投影带号一直讲到电路理论的输入规范适合正在做生态安全格局、景观连通性或者生态网络规划的朋友直接照着复现。1. 生态阻力面究竟在生态安全格局里扮演什么角色1.1 从源地—阻力—廊道三段式定位阻力面生态安全格局这套方法论的骨架其实很朴素先找出区域内生境质量最高、最值得保护的那批斑块叫生态源地再给整个区域表面铺上一层通行代价也就是生态阻力面最后在阻力面上算最小累积阻力路径把源地连起来得到廊道和节点。阻力面处在中间它的角色很像导航软件里的路况图层——源地告诉你从哪出发、到哪去阻力面决定你走哪条路。很多人做这个流程功夫全花在源地识别上形态学空间格局分析、生境质量评估、生态系统服务重要性分级一轮轮调参数。但真正决定最终图纸长什么样的往往是阻力面。同一批源地换一套阻力赋值廊道走向能差出一条山谷。我做过一次对比实验只把建设用地的阻力值从 500 提到 800主干廊道就从城区西侧绕到了东侧而两条路线在生态学上的合理性完全不是一个量级。所以阻力面不是中间产物它是整个分析里承载假设最多的那一层。你用的每一个阻力值本质上都是在声明我认为目标物种穿越这类地表需要付出多大代价。这句话有没有依据、能不能被质疑直接决定了成果是论文里的插图还是能进规划的图件。1.2 只按土地利用赋值的阻力面问题出在哪最常见的做法是拿一期土地利用栅格重分类林地给 10、草地给 30、耕地给 100、建设用地给 500出图。这套流程半小时能跑完但它藏着一个致命假设——同一类土地利用阻力处处相同。现实显然不是这样。同是耕地城郊那种被道路切割、化肥农药高强度投入的菜地和山区梯田式的零星耕地对野生动物通行的阻碍完全不是一个概念。同是林地郁闭度高、林下灌草层完整的天然林和刚栽三年、地表裸露的人工林穿透难度也差得远。更典型的例子是水域对两栖类和部分涉水哺乳动物河流是通路不是阻隔对旱生的啮齿类一条河就是硬墙。同一张阻力面不可能同时服务所有物种这也是为什么现在越来越多的研究开始做物种特异性阻力面。我自己现在固定用两层结构第一层是土地利用重分类得到的阻力基值负责表达地表覆盖类型带来的基础差异第二层是修正因子用夜间灯光、植被覆盖度、坡度、距道路距离这些连续变量去调节基值让同一类地里也能拉开梯度。这个思路不新鲜但真正把修正做到量纲可控、不出现极端值的人不多后面第 4 节会详细拆。1.3 一张合格的阻力面交付时应满足哪些硬条件在动手之前先把验收标准列清楚能省掉很多返工。下面这张表是我自己用的检查清单每一条都对应过具体的翻车经历。检查项硬性要求常见错误坐标系与源地栅格完全一致推荐等积投影一个用地理坐标系一个用投影坐标系面积算出来是错的像元大小与源地栅格严格相同一个 30 m 一个 100 m廊道出现阶梯栅格原点像元边界可整除对齐差半个像元加权叠加后整体错位值域统一且固定如 1 到 1000每次重跑值域都变结果无法比较NoData只用于研究区外区内不得有洞源地写成 NoData成本距离直接断数据类型浮点型参与运算最后按需转整型中途转整型小数阻力全部被截断命名与版本带年份、分辨率、权重方案后缀三个版本混在一起自己都分不清提示把值域固定这一条写进流程文档。阻力面本身没有绝对物理意义它的价值在于可比较一旦值域漂移不同年份、不同情景之间的对比就全部失效。2. 建面之前必须钉死的三件事投影、分辨率、栅格对齐2.1 投影选择为什么等积投影和带号会决定后面的成败地理坐标系下的一度经度在赤道和在高纬度对应的实际距离完全不同。如果你直接拿 WGS84 经纬度栅格去算欧氏距离得到的距离会有明显的南北向拉伸坡度计算也会失真。所以只要涉及距离、面积、坡度第一步就是投影。国内的生态安全格局研究主流选择是Albers 等积圆锥投影参数一般是中央经线 105°E双标准纬线 25°N 和 47°N椭球用 CGCS2000 或 Krasovsky 1940。为什么是等积而不是等距因为阻力面后续要参与面积统计比如源地面积、廊道缓冲区面积面积守恒比距离守恒更关键而距离的形变在中等纬度范围内可以接受。如果你习惯用高斯—克吕格投影那就要特别注意带号。CGCS2000 的 3 度带带号规则是带号 N 对应中央经线 3N 度比如 39 带对应 117°E。很多从 CAD 导过来的底图坐标是 6 位数甚至 7 位数前两位其实就是带号比如 39500000 表示 39 带、实际东坐标 500000。这时候要做的操作是把带号剥掉、按带号选对应的投影文件而不是直接把 6 位坐标塞进不带带号的坐标系里。我见过最离谱的一次CAD 坐标没处理就转成 GIS 图层整个研究区偏出去几百公里叠加底图后发现跑到隔壁省去了。注意CAD 到 GIS 的坐标转换核心不是转格式而是确认带号 确认单位 确认是否有假东偏移。这一步做错后面所有分析全废而且因为栅格看起来还是有值的很容易蒙混过关。2.2 分辨率怎么定30 m、100 m 还是 1 km分辨率的选择要在三个约束之间找平衡数据源精度、研究区尺度、计算可行性。土地利用产品主流是 30 m如全国逐年土地覆被产品DEM 常用 30 m 或 12.5 m夜间灯光原始分辨率差异很大——老一代灯光产品是 1 km 左右新一代可到 500 m 甚至更细。这些数据放到一起最终阻力面的分辨率由最粗的那一层决定。你可以把 30 m 重采样到 1 km但不能反过来凭空造出 30 m 的灯光细节。从计算量看成本距离这类算法的时间复杂度近似与像元数成正比或稍高。一个地级市范围在 30 m 分辨率下大约几千万个像元现代工作站跑得动但如果是省域甚至更大范围30 m 会直接让内存爆掉这时候 100 m 到 500 m 是更现实的选择。我的习惯是市域及以下用 30 m省域用 100 m 或 250 m全国尺度至少 1 km。廊道宽度如果预期在几百米量级分辨率再粗就分辨不出来了。重采样时要区分数据类型。土地利用是类别数据必须用最近邻法用双线性或三次卷积会把类别边界糊成一团、产生不存在的过渡类别。坡度、灯光、植被指数这类连续数据可以用双线性。这个规则听起来基础但真到批量处理的时候很多人脚本里一个Resample函数对全部图层用同一个参数最后土地利用边界变得像水彩画。2.3 Snap Raster 与像元对齐九成廊道偏移的源头这一节是全文最想让你记住的部分。栅格叠加有一个隐藏前提所有栅格的像元边界必须落在同一个网格上。如果 A 栅格的左下角是 (400000, 3000000)B 栅格是 (400015, 3000000)虽然像元大小都是 30 m但两者的像元边界错开了 15 m。ArcGIS 在叠加时会自动选一个参考网格去重采样其中一个结果是地类边界整体平移半个像元。在最终廊道图上这种平移表现为廊道在某个位置莫名其妙地拐了个直角或者两条本该重合的路径错开一条带。解决办法是显式设置三个环境变量Snap Raster指定一个参考栅格所有输出像元的原点都对齐到它Cell Size强制输出像元大小防止自动取最小公约数Extent和Mask统一分析范围避免不同图层边界不一致导致边缘出现 NoData 条带。在 ArcGIS 里这些在环境设置面板里配置在 arcpy 里对应arcpy.env。另外DEM 裁剪千万不要用矩形框直接切要用研究区边界做掩膜提取否则边缘会留下一圈无意义的矩形边界后续距离计算会把这些边缘当成真实边界。3. 阻力基值的确定从土地利用重分类到多因子加权3.1 土地利用重分类赋值表该怎么编赋值表是整个阻力面的地基也是审稿人和评审专家最爱挑的地方。编表时我遵循三条原则。第一值域跨度控制在 100 倍以内。如果林地给 1、建设用地给 1000那么其他所有因子叠加进去几乎不起作用最终结果完全被土地利用主导那还不如不做多因子。我一般把最低阻力设成 10、最高设成 1000跨度恰好两个数量级既有区分度又给修正因子留了空间。第二赋值的相对关系比绝对数值重要。成本距离算法里阻力值是乘性的你把它整体乘 2最终阻力面的相对格局不变只有廊道的绝对长度指标会变。所以真正需要斟酌的是建设用地是林地的多少倍耕地是草地的多少倍这类比例关系而不是纠结给 500 还是 550。第三方向要跟目标物种对齐。这是我吃过亏的地方。早期我按通用做法给水域赋了高阻力结果廊道全部绕开水系走但这个区域的旗舰物种恰恰是沿河迁移的两栖类。后来改成水域低阻力廊道立刻贴合河网跟野外红外相机记录到的活动路径对上了。下面这张表是我目前常用的一套基值仅供参考实际用之前一定要结合本地物种和文献调整。一级地类二级地类阻力基值赋值逻辑林地有林地、灌木林10 到 30生境质量高通行代价最低草地高、中覆盖度草地40 到 80中等通透性视草高调整水域河渠、湖泊、水库60 到 150方向取决于物种涉水物种应下调湿地沼泽、滩涂50 到 100季节性变化大条件允许时按水期调整耕地水田、旱地150 到 250人类活动频繁地表频繁扰动未利用地裸地、沙地、盐碱地200 到 350生境质量差遮蔽条件不足建设用地城镇、农村居民点、工矿800 到 1000强阻隔几乎不可穿透3.2 因子体系与数据源一张可直接照抄的表基值之外修正因子决定阻力面精细度。因子不是越多越好加一个因子就意味着多一个权重、多一处主观判断。我的经验是控制在 4 到 6 个其中至少两个是连续的、覆盖全区的数据。因子数据源对阻力的方向归一化方式土地利用30 m 土地覆被产品直接赋基值重分类夜间灯光夜间灯光遥感产品灯光越强阻力越大均值归一或极差归一植被覆盖度植被指数产品反演覆盖度越高阻力越小线性拉伸到 0 到 1坡度DEM 派生坡度越大阻力越大视物种分级重分类距道路距离路网矢量 欧氏距离越近阻力越大分级重分类距水体距离水系矢量 欧氏距离方向视物种而定分级重分类提示这两年有人尝试用带位置信息的移动监测设备、视频点位之类的高频数据作为人类活动强度的代理变量思路本身有意思但采样偏差极大、覆盖不均而且涉及个人隐私合规问题我建议最多作为辅助验证不要当主因子用。3.3 权重怎么定AHP、熵权法与组合权重的取舍权重是阻力面里最容易被质疑的部分。方法上分两派主观赋权以层次分析法为代表客观赋权以熵权法为代表。层次分析法的流程是构造判断矩阵两两比较因子重要性用 1 到 9 标度求最大特征值和特征向量归一化得到权重最后算一致性比例小于 0.1 才算通过。它的优点是能表达领域知识缺点是专家意见一旦偏了整套权重都偏。熵权法的逻辑完全相反看数据本身的离散程度。某个因子在各像元间差异越大、信息量越大权重越高如果所有像元值都一样熵最大权重趋近于零。它的优点是客观可复现缺点是有时候会把生态学上很重要但空间变异小的因子权重压得很低。我的做法是取两者加权平均主观权重占六成、客观占四成再拿这个组合权重回到文献里核对一遍合理性。下面是一组四因子的示例权重实际计算时用工具跑这里只是展示量级关系因子层次分析法权重熵权法权重组合权重土地利用基值0.540.480.52坡度0.210.260.23距道路距离0.160.170.16距水体距离0.090.090.09这张表里的判断矩阵一致性比例大约 0.02属于通过范围。熵权法权重是把每个因子做极差归一后按像元统计熵值算出来的公式是e_j -k * Σ p_ij * ln(p_ij)其中k 1 / ln(n)n是像元数权重是(1 - e_j)归一化。这套计算用 Python 十几行就能搞定没必要手工算。3.4 重分类与字段计算器里的类型陷阱实操里最耽误时间的往往不是原理是字段类型。第一个坑是属性表里的字符型排序。土地利用的二级类编码如果存成字符型10在排序时会排在9前面因为字符是按字典序比较的。做重分类映射表的时候如果依赖排序结果就会出现错位赋值。要么把编码统一转成整型要么老老实实用显式的旧值到新值映射不要靠位置对应。第二个坑是取整方式。栅格重分类之后如果值里有小数中间过程用Int()会直接截断Int(2.9)等于 2用Round()是四舍五入。做阻力面时我建议全程保留浮点最后输出成果时再决定是否转整型。一旦中途转成整型像元二分模型算出来的植被覆盖度会变成 0 或 1 两个值整个修正就废了。第三个坑是重分类工具的范围截断。ArcGIS 的重分类有个容易被忽略的行为输入栅格里出现映射表之外的值时默认会输出 NoData。如果土地利用产品里有个别类别你没注意比如某年的分类体系多了一类其他重分类后这些区域就变成空洞而空洞在后续成本距离里会被识别为不可通行直接改变廊道走向。所以每次重分类后一定要统计一遍 NoData 像元数和原始数据的有效值数量对一遍。第四个坑是掩膜和裁剪的先后。正确顺序是先把所有原始数据统一投影、统一分辨率、统一范围再做重分类和运算。如果先重分类再裁剪边界上因为重采样产生的新像元值可能不在映射表里又会产生一圈 NoData。4. 阻力面修正让同类地不再共享同一个阻力值4.1 夜间灯光修正系数公式、饱和与均值归一夜间灯光是表达人类活动强度最直接的连续变量用它来调节阻力基值是目前最主流的做法。核心公式很简单R_i R_i × (NTL_i / NTL_mean)其中R_i是基值NTL_i是该像元的灯光值NTL_mean是研究区灯光均值。直观理解就是灯光强度高于平均的地方人类干扰更强阻力上浮低于平均的地方阻力下调。这样同一类耕地在城郊会自动比在深山高出好几倍阻力符合直觉。但这个公式有几个必须处理的技术细节。饱和问题。早期灯光产品在城区普遍存在饱和现象核心区像元值都卡在上限区分不出强弱。处理办法是做饱和校正用植被指数或者人口密度做参考做回归校正或者干脆换成不含饱和的新一代灯光产品。如果研究区主要是中小城市饱和影响有限如果是大城市群不做校正会导致整个中心城区的阻力值被低估。年际可比性。不同年份的灯光产品、不同传感器之间没有统一定标直接跨年比较会出问题。如果要做多期阻力面对比必须先做年际校正把各期数据拉到同一参考系上。均值归一的分母。我一开始用的是全区均值后来发现如果研究区里包含大片无人区均值会被拉得很低导致建成区系数轻松上到 10 以上阻力值直接飞了。后来改成用建成区灯光的均值或者中位数做分母系数基本落在 0.5 到 5 之间量纲可控得多。这个细节论文里很少有人写但实际影响很大。4.2 植被覆盖度修正NDVI 到 FVC 的像元二分模型植被覆盖度是另一个常用修正项逻辑是植被越密生境质量越好通行阻力越小。计算走的是像元二分模型FVC (NDVI - NDVI_soil) / (NDVI_veg - NDVI_soil)NDVI_soil是纯裸土的植被指数NDVI_veg是纯植被的植被指数。这两个端点的取法是关键分歧点。有人直接用固定值比如 0.05 和 0.7更稳妥的做法是按研究区累计频率分布取 5% 和 95% 分位因为不同气候区的 NDVI 动态范围差别很大固定值在干旱区或高植被区都会失真。算完 FVC 之后要做边界约束小于 0 的置 0、大于 1 的置 1否则会渗入极端值。修正公式是R_i R_i × (1 - FVC_i)到这里有一个必须警惕的问题重复计算。土地利用重分类时林地已经拿到了最低阻力再用植被覆盖度乘一遍林地阻力会趋近于零而建设用地因为植被覆盖度极低几乎不受影响结果就是林地与建设用地的阻力差距被动拉大。如果这不是你的本意就要二选一要么降低基值表的区分度、让修正因子承担更多区分工作要么只用一种修正方式。我在实际项目里通常的做法是植被覆盖度修正只作用于非建设用地的像元建成区直接跳过用条件函数实现。4.3 修正顺序与量纲统一两种流程的适用场景流程上有两种常见顺序各有适用条件。流程 A先加权后修正。先把各因子加权叠加得到综合阻力再乘修正系数。优点是修正只做一次量纲好控制缺点是修正系数作用在综合值上对单个因子的差异化影响不够精细。流程 B先修正后加权。先对土地利用基值做灯光和植被修正再和其他因子加权。优点是每个因子都被充分调节缺点是修正项和加权项之间可能出现量纲不匹配必须每一步都做归一化。如果修正因子只有一两个我推荐流程 A简单可控。如果修正因子三个以上、且你希望精细控制每个因子的贡献那就走流程 B但务必在每一步结束后检查值域最好写一个统一的归一化函数把所有因子都拉到 0 到 1 或 1 到 100再参与加权。最后一步是成果值域固定。不管中间怎么算最终输出的阻力面要统一拉伸到你事先定好的值域我一般用 1 到 1000这样不同情景、不同年份的结果才能放在一起比较做差值图也有意义。4.4 源地赋零0 和 NoData 千万别搞混廊道提取时源地内部应该是零代价起点否则物种从源地边缘出发就已经消耗了成本廊道长度会被系统性高估。实现方式是把源地栅格二值化用条件函数把源地范围内的阻力值替换成一个极小值。这里有一个关键选择——赋 0 还是赋 1。赋 0 看起来最干净但成本距离算法里 0 是合法的成本值某些实现下会导致传播速度异常甚至出现除零风险。赋一个极小正值比如 1前提是你的值域下限就是 1更稳妥效果等价。真正致命的是用 NoData 表示源地。NoData 在成本距离里表示不可通行源地一旦成了 NoData物种根本出不来最终结果要么报错要么生成一堆破碎的短廊道。我最初就是把源地转成 NoData 再参与运算的跑出来的廊道全是残缺的小段排查了两个小时才定位到这个问题。正确写法是用条件函数源地范围内输出 1范围外输出修正后的阻力值。这一步做完之后务必再用统计工具检查一遍确认 NoData 像元数只出现在研究区外边界。5. 出图之前的自检阻力面的体检清单与五类常见故障5.1 值域、直方图与 NoData 数量的三分钟体检阻力面跑完先别急着算廊道花三分钟做四项检查。最小值与最大值是否落在预设值域内。如果最大值飙到几万说明某个修正系数失控通常是分母取错了或者量纲没统一。均值与标准差均值大致反映区域平均通行代价标准差过小说明因子区分度不够整张图一片灰做出来的廊道会非常随机。NoData 像元数和研究区外面积核对区内出现空洞必须逐一排查来源。直方图形态健康的阻力面通常呈右偏分布——大部分区域是中低阻力少数高强度人类活动区形成高阻力峰。如果直方图出现双峰或者极端长尾往往意味着某个因子在打架。这些用栅格属性工具和直方图面板就能看成本极低收益极高。5.2 栅格放大不显示、金字塔与显示范围有个几乎人人都会遇到的现象栅格在小比例尺下正常一放大就变成空白或者全灰。这基本不是数据问题而是显示层面的问题常见原因有三个。一是没有构建金字塔。大尺寸栅格在放大时按需重采样缺少金字塔会导致渲染失败。解决办法是构建金字塔并在构建时选择合适的重采样方式——类别数据用最近邻连续数据用双线性。二是没有计算统计值。属性面板里最小最大值为空软件就无法做拉伸渲染图面可能全黑或全白。批量计算统计值可以写在脚本里一次处理整个文件夹。三是显示比例范围被限制。图层属性里的可见比例范围如果设置了阈值超出范围就不显示。这种情况在接手别人工程文件时特别常见。顺带说一句在线底图的加载对排查这类问题很有用。把阻力面半透明叠加在影像底图上一眼就能看出栅格有没有错位、范围有没有对齐比反复看属性表高效得多。三维场景也能用尤其在山区坡度因子和地形的对应关系在三维视图里一目了然。5.3 叠加验证底图、保护边界与物种点位三重交叉阻力面合不合理光看统计量不够必须做空间交叉验证。我固定做三件事。第一叠加保护地边界。生态保护红线、自然保护区、饮用水源保护区这些区域的阻力值应该普遍偏低。如果某个保护区内部阻力均值很高说明土地利用分类和实际不符或者修正因子出了偏差。第二叠加物种分布点位。如果有红外相机、样线调查或公开的物种分布数据把它们叠到阻力面上看高阻力区是否避开了这些点位。我做过一次这样的检验发现某条被赋高阻力的山脊其实是多种兽类的活动通道回头一查是坡度因子取值太激进把中等坡度也当成了高阻力。第三叠加道路和水系。阻力面在道路两侧应该出现明显的高值带在水系附近应该有低值通道如果目标物种涉水。如果道路在阻力面上完全没有体现说明距离因子没参与运算或者权重被压得太低。5.4 用 arcpy 把整套流程串成可复现脚本手工点工具最大的问题是不可复现三个月后自己都不记得当时怎么点的。下面这段脚本把前面讲的流程基本串起来了环境设置、重分类、加权、灯光修正、源地赋值、保存输出都在里面直接改路径就能用。import arcpy from arcpy.sa import * arcpy.env.workspace rD:\ESP\data.gdb arcpy.env.overwriteOutput True arcpy.CheckOutExtension(Spatial) # 统一基准捕捉栅格、范围、像元、掩膜 arcpy.env.snapRaster ref_30m arcpy.env.extent ref_30m arcpy.env.cellSize ref_30m arcpy.env.mask study_area # 1) 土地利用重分类为阻力基值 remap RemapValue([[1, 20], [2, 60], [3, 100], [4, 180], [5, 280], [6, 900]]) res_base Reclassify(lucc_2020, VALUE, remap, NODATA) # 2) 多因子加权叠加 res_w (Raster(res_base) * 0.52 Raster(res_slope) * 0.23 Raster(res_road) * 0.16 Raster(res_water) * 0.09) # 3) 夜间灯光修正用建成区均值做分母避免系数失控 ntl Raster(ntl_2020) built_mean float(arcpy.GetRasterProperties_management( ntl_built_mask, MEAN).getOutput(0)) res_night res_w * (Float(ntl) / built_mean) # 4) 植被覆盖度修正仅作用于非建设用地 fvc Con(ndvi 0.05, 0, Con(ndvi 0.75, 1, (Raster(ndvi) - 0.05) / 0.70)) res_veg Con(Raster(res_base) 800, res_night, res_night * (1 - fvc)) # 5) 统一拉伸到 1-1000 res_min float(arcpy.GetRasterProperties_management(res_veg, MINIMUM).getOutput(0)) res_max float(arcpy.GetRasterProperties_management(res_veg, MAXIMUM).getOutput(0)) res_norm ((res_veg - res_min) / (res_max - res_min)) * 999 1 # 6) 源地赋极小值 src Raster(source_areas) final Con(IsNull(src), res_norm, 1) arcpy.BuildPyramidsandStatistics_management(D:/ESP/data.gdb) final.save(resistance_final_2020) print(done, min/max , res_min, res_max)脚本里有两个细节值得单独说。一是snapRaster、extent、cellSize、mask这四行必须在任何栅格运算之前设置而且一旦设置了mask所有输出都会被裁到研究区范围这正是我们想要的。二是最后的归一化必须在源地赋值之前做否则源地的 1 会被卷进极值里导致拉伸失真。6. 阻力面之后的衔接最小累积阻力、电路理论与多情景对比6.1 成本距离与 MCR 对输入的隐性要求最小累积阻力模型的表达式是MCR f_min Σ (D_ij × R_i)其中D_ij是从源地 j 到像元 i 的空间距离R_i是像元 i 的阻力值。实操里对应成本距离和成本路径两个工具输入是源地栅格和阻力面栅格。这对输入有两条隐性要求。第一源地栅格和阻力面必须完全同基准像元大小、原点、范围三项都要一致否则工具会自动重采样结果不可控。第二源地必须是整型且只有两种值有些工具对源地栅格的取值范围敏感建议统一成 0 和 1其中 1 表示源地。还有一点成本距离的输出是累积成本栅格它本身没有物理单位只是相对值。所以不要拿不同分辨率、不同值域的累积成本去直接比较必须先把阻力面拉到统一值域再重跑。6.2 电路理论与 Linkage Mapper 的输入规范电路理论把景观看作导电表面阻力低的地方电导率高通过计算电流密度识别关键廊道和夹点。相比最小累积阻力它的一大优势是能识别多条备选路径和关键节点更适合做保护优先区划定。输入要求非常明确一张阻力面栅格、一张源地栅格两者同基准。参数上有几个必须调好的量。廊道宽度决定输出廊道的缓冲区范围一般取目标物种典型扩散距离的几分之一到一半常见取值在 500 m 到 5 km 之间。宽度设太窄会切碎廊道太宽会把整个区域涂满。相邻源地连接阈值定义哪些源地之间需要计算连接超过这个距离的不参与可以显著降低计算量。是否启用屏障分析用于识别廊道上的高阻力节点如果研究区有明确的道路、大坝等阻隔建议开启。跑完之后输出通常包括廊道栅格、夹点栅格和连接度统计。夹点区域是最该优先保护的位置往往只有几个像元宽但一旦被切断整条廊道就断了。6.3 结果反常识时的排查思路与多情景延展如果跑出来的廊道出现了下面几种情况基本可以断定阻力面有问题而不是算法有问题。廊道沿着公路走。这是最典型的症状说明道路距离因子方向搞反了或者权重太低。检查距离分级表确认越近阻力越大。廊道穿过城市建成区。建设用地的基值可能设得太低或者灯光修正没生效。检查修正系数是不是恒等于 1。廊道跨越大江大河。如果不涉及涉水物种检查水域阻力值是不是被设得太低如果涉及那就不是问题反而说明赋值正确。廊道呈现规则的网格状。这是像元没对齐的典型信号回头检查捕捉栅格和像元大小。如果想要更进一步可以把这个流程做成多情景对比。常见做法是先用土地利用变化模拟模型推演未来几期土地覆被再按同一套赋值和权重重建每期的阻力面最后对比不同情景下廊道数量和连通性指数的变化。这里的关键是赋值和权重必须完全一致只有输入的土地覆被不同否则结果没法归因。我在做这类对比时会把赋值表、权重表和归一化参数单独存成一个配置文件每期阻力面都从同一份配置生成这样无论隔多久重跑结果都可复现。最后分享一个我自己摸索出来的小技巧每次跑完阻力面随手把关键中间量各因子权重、值域上下限、NoData 像元数、源地面积占比记在一个文本文件里跟成果放一起。等过半年回头看或者别人接手你的数据时这几行记录比任何说明文档都管用。阻力面这东西最怕的不是做不出来而是三个月后自己都说不清当时是怎么算的。
返回列表