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

一、约束规则

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

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

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

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

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,总之不太好用,有兴趣的可以自行尝试。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513595.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三八妇女节送礼推荐:送给她的五款超值好物,绝不踩雷!

随着三八妇女节的临近&#xff0c;我们开始思考如何向身边的女性表达我们的尊重和关爱。这个特殊的节日不仅是对女性贡献的认可&#xff0c;更是展示我们关怀与感激之情的绝佳时机。在众多礼物中&#xff0c;如何挑选一份既能体现心意又实用的礼品呢&#xff1f;为了让您在这个…

MyBatis介绍

MyBatis是一个优秀的持久层框架&#xff08;就是将某些数据持久化到硬盘或其他存储器中的框架&#xff09;&#xff0c;它把jdbc对数据库的操作进行了封装&#xff0c;使用户只需关注sql本身&#xff0c;不需要去执行jdbc的那一套复杂的操作。 MyBatis通过配置xml文件或注解的方…

OWASP Top 10 网络安全10大漏洞——A01:2021-访问控制中断

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化&#xff0c;以及一些合并。 A01&#xff1a;2021-访问控制中断 从第五位上升到top1&#xff0c;94%的应用程序都经过了某种形式的访问控制破坏测试&#xff0c;平均发生率为 3.81%且在贡献的…

每日学习总结20240301

20240301 1. strchr VS strrchr strchr和strrchr是C语言标准库中的字符串处理函数&#xff0c;用于在字符串中查找特定字符的位置。 1.1 strchr函数 strchr函数用于在字符串中查找第一次出现指定字符的位置&#xff0c;并返回该位置的指针。函数原型如下&#xff1a; char…

如何创建一个VUE3项目并使用Element UI插件

1.确保已经安装了Node&#xff1a; win R 打开控制面板&#xff0c;输入“node -v”回车。出现版本号信息&#xff0c;则安装成功&#xff0c;否则请移步安装。 Node.js安装及环境配置&#xff08;简单易懂&#xff01;&#xff09;_building: c:\program files\nodejs\node…

Vue2高级篇

Vue高级 Vue生命周期 生命周期又称为生命周期回调函数、生命周期函数、生命周期钩子, 是Vue在运行过程中的关键时刻帮我们调用的一些指函数, 生命周期函数名字不可修改, 其中的this指向的是vm或组件实例对象. 常用的生命周期钩子: mounted: 发送ajax请求、启动定时器、绑定…

JavaScript观察者模式:实现对象间的事件通信!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found

UOS 20 安装redis 7.0.11 1、下载redis 7.0.112、安装redis 7.0.113、启动停止redis 7.0.114、安装过程问题记录 UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found、zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such fil…

【Redis】Redis 缓存重点解析

Redis 缓存重点解析 推荐文章&#xff1a;【Redis】Redis的特性和应用场景 数据类型 持久化 数据淘汰 事务 多机部署-CSDN博客 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#x…

数字化转型导师坚鹏:成为数字化转型顾问 引领数字化美好未来

成为数字化转型顾问 引领数字化美好未来 ——数字化人才与企业的共赢之路 数字经济新时代&#xff0c;中国企业向数字化转型要效益&#xff1b; 转型顾问创未来&#xff0c;职场精英借数字化转型成良师。 我们中国政府特别重视数字经济发展及数字化人才培养。早在2020年8月2…

消息队列-kafka-服务端处理架构(架构,Topic文件结构,服务端数据的一致性)

服务端处理架构 资料来源于网络 网络线程池&#xff1a; 接受请求&#xff0c;num.network.threads&#xff0c;默认为 3&#xff0c;专门处理客户的发送的请求。 IO 线程池&#xff1a; num.io.threads&#xff0c;默认为 8&#xff0c;专门处理业务请求。也就是它不负责发…

浅析扩散模型与图像生成【应用篇】(六)——DiffuseIT

6. Diffusion-based Image Translation using Disentangled Style and Content Representation 本文介绍了一种基于扩散模型的图像转换方法&#xff0c;图像转换就是根据文本引导或者图像的引导&#xff0c;将源图像转换到目标域中&#xff0c;如下图所示。   在图像转换中待…