【一起学习Arcade】(6):属性规则实例_约束规则和验证规则

本文介绍了GIS编辑中如何运用约束规则来控制特定图斑操作,如禁止删除耕地、限制范围、防止碎面和超短线等,以及验证规则用于检测数据集错误。作者指出验证规则使用体验不佳,有待优化。
摘要由CSDN通过智能技术生成

一、约束规则

约束规则用于指定要素上允许的属性配置和一般关系。

与计算规则不同,约束规则不用于填充属性,而是用于确保要素满足特定条件。

简单理解,约束规则就是约束你的编辑操作在什么情况下可执行。

如果出现不符合规则的操作,就会报错,操作中断。

1、禁止删除特定的要素

如果你想控制你的编辑操作,避免某些图斑被误删除,就可以设定这样的规则。

比如在用地图斑中,我不想【耕地】被删除,可以将触发器选择为【删除】,在表达式中输入:

if ($feature.DLMC != "耕地")
{
  return true;
}

删除的图斑如果【DLMC】的字段值为“耕地”,就会弹出错误。

2、限制编辑内容在特定范围内

比如数据库里有2个图层,(因为代码要通过数据库这一共同联系作为媒介,所以2个图层一定要在同一数据库内)。

限制设施点必须在用地范围的边界内。

将触发器选择为【插入、更新】,在表达式中输入:

// 从同一个数据库里找到“用地范围”
var fw = FeatureSetByName($datastore, "用地范围", null, false);
// 用地范围和当前编辑的设施点相交,如果结果不为空(数量大于0),就给予通过。
// 否则就报错
return Count(Intersects(fw, Geometry($feature))) > 0

新创建的设施点如果在用地范围外,就会弹出错误。

3、禁止碎面

可以通过限制图斑的面积来禁止碎面的产生。

将触发器选择为【插入、更新】,在表达式中输入:

// 获取图斑面积
var mj = area(geometry($feature));
// 如果面积大于1平方米,就通过
if(mj>1)
  return true

新创建或修改的图斑面积小于1平方米,就会弹出错误:

4、禁止超短线

通过计算相邻点之间的距离,可以禁止画出超短线。

将触发器选择为【插入、更新】,在表达式中输入:

// 获取环
var rings = geometry($feature)["rings"]
// 逐环处理
for(var i in rings){
  // 环内每个点处理
  for(var j=0; j < count(rings[i])-1; j++) {
    // 算距离  
    var dis = Distance(rings[i][j],rings[i][j+1],'meters')
    if(dis>1)
      return true
  }
}

创建或修改的时候,如果边界点之间的距离小于1米,就会弹出错误:

5、禁止尖锐角

通过计算相邻3个点之间的角度,可以禁止画出尖锐角。

将触发器选择为【插入、更新】,在表达式中输入:

// 获取环
var rings = geometry($feature)["rings"]
// 逐环处理
for(var i in rings){
  // 环内每个点处理
  for(var j=0; j < count(rings[i])-2; j++) {
    // 算角度  
    var ang = Angle(rings[i][j],rings[i][j+1],rings[i][j+2])
    // 保证在180度内
    if(ang>180)
      ang = 360-ang
    // 小于20度就报错
    if(ang<20)
      return false
  }
}
return true

这里我省略了计算最后一个点的情况,要计算的话,需要把第一个点加到列表末尾,有兴趣的可以自己试试。

创建或修改的时候,如果边界点的角度小于20度,就会弹出错误:


二、验证规则

验证规则用于验证数据集中的错误。根据规则对现有要素进行评估,如果违反规则,则会创建错误要素。

表达式写法和计算、约束差不多。

这部分软件预制了许多规则,点击即用型规则,可以看到如下:

但是我试用过后,发现过程繁琐,而且有疑似bug,总之不太好用,有兴趣的可以自行尝试。

后面有空可以专门出一篇关于属性规则使用步骤的文章。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

规划GIS会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值