【一起学习Arcade】(2):Geometry函数

第二篇记录下Geometry函数,相对于其它语言,Arcade对Geometry的支持是一大亮点,这使得它的上限被大大提高了。


三、Geometry函数

1、Angle【角度】

单位为度(0-360),正北为90度,只考虑x-y平面。忽略任何z坐标。

// 返回点和要素之间的角度【两点之间的角度】
var pointA = Point({ "x":976259, "y":8066511, "spatialReference": { "wkid": 3857 } });
Angle(pointA, $feature)
// 三点之间的角度
var pointA = Point({ "x":976259, "y":8066511, "spatialReference": { "wkid": 3857 } });
var pointC = Point({ "x":308654, "y":9005421, "spatialReference": { "wkid": 3857 } });
Angle(pointA, $feature, pointC)

连接的字符串间可以添加符号:

Concatenate([$feature.DLBM,$feature.DLMC,$feature.QSDWMC],"/")
return "0307/其他林地/小村村"

2、Area【面积】

第二个参数是面积单位,可以不输入。

Area($feature, 'square-meters')

3、AreaGeodetic【大地测量面积】

盲猜应该就是椭球面积,待验证。

AreaGeodetic($feature, 'square-meters')

4、Buffer【缓冲区】

和缓冲工具生成的结果差不多。

Buffer($feature, 0.5, 'miles')

5、BufferGeodetic【Geodetic缓冲区

也是缓冲区,不过是大地测量的,不知道用在什么地方...

BufferGeodetic($feature, 0.5, 'miles')

6、Centroid【质心点

返回输入几何体的质心。

// 可以返回要素的质心
Centroid($feature)
// 也可以返回环(Geometry)的质心
var ringPoints = Geometry($feature).rings[0];
Centroid(ringPoints);

7、Clip【裁剪

跟裁剪工具差不多,参数1是输入要素,参数2是裁剪要素。

var envelope = Extent({ ... });
Clip($feature, envelope)

8、Contains【图形包含

判断一个几何图形是否包含另一个几何图形。Contains返回值有2个情况,一种是布尔值,一种是返回包含在内部的要素集 FeatureSet。

// 参数2是feature的话,返回布尔值
var container = Polygon({ ... });
Contains(containerGeometry, $feature);
// 参数2是features的话,返回features
var parcels = FeatureSetByName($map, 'parcels')
var projectArea = $feature;
Count(Contains(projectArea, parcels));

9、ConvexHull【凸包

计算几何体的凸包。凸包是包围几何体的最小凸多边形。

var pacman_like_shape = Polygon({"rings": [[[1, 2], [2, 0], [1, -2], [-1, -2], [-2, -1], [-1, -1.5], [0, -1.5], [-2, 1], [-1, 2]]],"spatialReference": { "wkid": 3857 }
});
return ConvexHull(pacman_like_shape).rings[0];
// Returns the geometry [[1,2],[2,0],[1,-2],[-1,-2],[-2,-1],[-2,1],[-1,2],[1,2]]

10、Crosses【相交

判断一个几何图形是否与另一个几何图元相交。

var geom2 = Polygon({ ... });
Crosses($feature, geom2);

11、Cut【剪切

包括线线剪切,线面剪切等。

var cutter = Polyline({ ... });
Cut($feature, cutter));

12、DefaultValue【获取值

如果几何体中不存在关键点,或者指定关键点处的值为null或为空文本值,则返回指定的默认值。

找一个要素的Z值的情况:

// 如果有Z值的话返回Z值,没有的话就返回1000
DefaultValue(Geometry($feature), "z", 1000)

如果是找多层的值就麻烦一点,这里找第一个环的第一个点的“z”值,值为100,就返回100。

var shape = Polygon({rings: [[Point({ x: -97.06138, y: 32.837, z: 100, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06133, y: 32.836, z: 50, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06124, y: 32.834, z: 20, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06127, y: 32.832, z: 0, hasZ: true, spatialReference: { wkid: 102100 } })]],hasZ: true,spatialReference: { wkid: 102100 }
});return DefaultValue(shape, ["rings",0,0,"z"], 1000)

 如果是去找第3个环,然而不存在这个对象,则返回默认值1000。

var shape = Polygon({rings: [[Point({ x: -97.06138, y: 32.837, z: 100, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06133, y: 32.836, z: 50, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06124, y: 32.834, z: 20, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06127, y: 32.832, z: 0, hasZ: true, spatialReference: { wkid: 102100 } })]],hasZ: true,spatialReference: { wkid: 102100 }
});return DefaultValue(shape, ["rings",2,0,"z"], 1000)

环找到,但是对应的M值没有的情况,一样返回默认值1000。

var shape = Polygon({rings: [[Point({ x: -97.06138, y: 32.837, z: 100, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06133, y: 32.836, z: 50, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06124, y: 32.834, z: 20, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06127, y: 32.832, z: 0, hasZ: true, spatialReference: { wkid: 102100 } })]],hasZ: true,spatialReference: { wkid: 102100 }
});return DefaultValue(shape, ["rings",0,0,"m"], 100)

13、Densify【加密

通过插入顶点以创建不超过指定间隔的线段来加密几何体。

// 按最大间隔10米来加密线段
var maxLength = 10;
Densify($feature, maxLength, 'meters');

14、DensifyGeodetic【Geodetic加密

DensifyGeodetic($feature, 10000, 'meters');

15、Difference【擦除

类似擦除工具。

var subtractor = Polygon({ ... });
Difference($feature, subtractor);

16、Disjoint【不相交判断

判断2个要素是否不相交,返回布尔值。

var geom2 = Polygon({ ... });
Disjoint($feature, geom2);

17、Distance【距离

以给定单位返回两个几何图形之间的平面距离。

var geom2 = Point({ ... });
Distance($feature, geom2, 'meters')

18、DistanceToCoordinate【沿线移动得到的坐标

返回基于给定距离沿输入线的坐标。返回值为Dictionary,里面含有一个coordinate属性,即坐标点。

var result = DistanceToCoordinate($feature, 1038);
return result.coordinate;

19、EnvelopeIntersects【包络线相交

判断一个几何图形的包络线(或范围)是否与另一个几何图元的包络线相交。。

var geom2 = Polygon({ ... });
EnvelopeIntersects($feature, geom2);

20、Equals【相等

在给定数据的空间参考和容差的情况下,判断两个几何图形是否相等。

var geom2 = Point({ ... });
Equals($feature, geom2);

21、Extent【范围

从字典中构造一个【Extent】对象。

Extent({xMax: -95.34,xMin: -97.06138,yMax: 32.837,yMin: 12.003,hasM: false,hasZ: false,spatialReference: { wkid: 3857 }
});

 或者从Geometry构造一个【Extent】对象。

Extent($feature);

或者从序列化的JSON文本构造Extent对象。 

var extentJSON = '{"xmin": -109.55, "ymin": 25.76, "xmax": -86.39, "ymax": 49.94, "spatialReference": { "wkid": 3857 }}';
Extent(extentJSON);

22、Generalize【概化

和编辑里的概化是一样的作用。

例如:删除顶点,使线段距离原始几何体不超过100米

Generalize($feature, 100, true, 'meters')

23、Geometry【构造Geometry

从要素、序列化的JSON文本或字典构造Geometry对象。

// 从要素
Geometry($feature)
// 从Json文本
var pointJSON = {"x": -118.15, "y": 33.80, "spatialReference": { "wkid": 3857 } };
Geometry(pointJSON);

24、HasValue【判断是否有值

判断几何图形在给定键或索引处是否具有值。

if( TypeOf(Geometry($feature)) == "Point"){return HasValue(Geometry($feature), "z")// returns true
}if( TypeOf(Geometry($feature)) == "Polygon"){return HasValue(Geometry($feature), "verticalCoordinateSystem")// returns false
}

多层查找:

var shape = Polygon({rings: [[Point({ x: -97.06138, y: 32.837, z: 100, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06133, y: 32.836, z: 50, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06124, y: 32.834, z: 20, hasZ: true, spatialReference: { wkid: 102100 } }),Point({ x: -97.06127, y: 32.832, z: 0, hasZ: true, spatialReference: { wkid: 102100 } })]],hasZ: true,spatialReference: { wkid: 102100 }
});if(HasValue(shape, ["rings",0,0,"x"])){return shape.rings[0][0].x;// returns -97.06138
}

25、Intersection【相交

和相交工具一样。

var geom2 = Polygon({ ... });
Area(Intersection($feature, geom2), 'square-miles');

26、Intersects【相交判断

判断2个要素是否相交,返回布尔值。

var geom2 = Polygon({ ... });
Intersects($feature, geom2);

27、IsSelfIntersecting【自相交判断

判断Geometry是否存在自相交。

var polyline = Polyline({ ... });
IsSelfIntersecting(polyline);

28、IsSimple【单部件判断

判断要素是否是单部件,返回布尔值。

IsSimple($feature);

29、MultiPartToSinglePart【多部件转单部件

和多部件转单部件作用相同。

var allParts = MultiPartToSinglePart($feature)

30、Multipoint【多点

从点坐标、Json文本构造多点对象。

// 从属性定义构造
Multipoint({hasM: true,hasZ: true,points: [[-97.06138,32.837,1000,0],[-97.06133,32.836,1500,15],[-97.06124,32.834,1000,30],[-97.06127,32.832,500,50],[-97.06138,32.837,1000,0]],spatialReference: { wkid: 3857 }
});
// 从Json文本构造
var multipointJSON = '{"points": [[-97.06138,32.837],[-97.06133,32.836],[-97.06124,32.834],[-97.06127,32.832]],"spatialReference" : { "wkid": 3857 }}';
Multipoint(multipointJSON);

31、NearestCoordinate【最近点

返回输入几何体与搜索点最近的坐标(而非顶点)。返回的字典还包括从搜索点到最近坐标的最短平面距离。如果搜索点与输入几何体相交,则搜索点将作为距离为零的结果返回。

var buildings = FeatureSetByPortalItem(Portal('https://www.arcgis.com'),'7b1fb95ab77f40bf8aa09c8b59045449',0,['*'],true
);
var nearestBuilding = First(Intersects(buildings, BufferGeodetic($feature, 100, "feet")));
var result = NearestCoordinate(nearestBuilding, $feature);
return result.distance;
// or
return result.coordinate;

32、Offset【偏移

和编辑里的偏移作用相同。

Offset($feature, 10, 'meters', 'square');

33、Overlaps【长度

判断一个几何图形是否与另一个几何图元重叠。

var geom2 = Polygon({ ... });
Overlaps($feature, geom2);

34、Point【构造点

// 从字典构造Point对象
Point({hasM: true,hasZ: true,x: -97.06138,y: 32.837,z: 1500,m: 15,spatialReference: { wkid: 3857 }
});
// 从JSON文本构造Point对象
var pointJSON = '{ "x": -118.15, "y": 33.80, "spatialReference": { "wkid": 3857 }}';
Point(pointJSON)

35、PointToCoordinate【点到Geometry的距离

例如:根据单击的位置返回到输入多段线上最近坐标的距离。

var result;if (TypeOf($userInput) == "Point"){result = PointToCoordinate(Geometry($feature), $userInput);
}return result.distanceAlong;

36、Polygon【构建面

// 从字典构造,有内环的情况
Polygon({rings: [[[-97.06138,32.837],[-97.06133,32.836],[-97.06124,32.834],[-97.06127,32.832],[-97.06138,32.837]],[[-97.06326,32.759],[-97.06298,32.755],[-97.06326,32.759]]],spatialReference: { wkid: 3857 }
});
// 从json构造
var polygonJSON = '{"rings": [[[-97.06138,32.837],[-97.06133,32.836],[-97.06124,32.834],[-97.06127,32.832], [-97.06138,32.837]],[[-97.06326,32.759],[-97.06298,32.755],[-97.06153,32.749], [-97.06326,32.759]]],"spatialReference": { "wkid": 3857 }}';
Polygon(polygonJSON);

37、Polyline【构造线

// 从字典构造,多部件的线
Polyline({hasM: true,hasZ: true,paths: [[[-97.06138,32.837],[-97.06133,32.836],[-97.06124,32.834],[-97.06127,32.832]],[[-97.06326,32.759],[-97.06298,32.755]]],spatialReference: { wkid: 3857 }
});
// 从json构造
var polylineJSON = '{"paths": [[[-97.06138,32.837],[-97.06133,32.836],[-97.06124,32.834],[-97.06127,32.832]], [[-97.06326,32.759],[-97.06298,32.755]]], "spatialReference": { "wkid": 3857 } }'
Polyline(polylineJSON);

38、RingIsClockwise【顺时针

判断多边形环中的点是否按顺时针方向排列。

var polygonRings = Geometry($feature).rings;
IIf(RingIsClockwise(polygonRings[0]), 'correct polygon', 'incorrect direction')

39、Rotate【旋转

按几何体的质心、指定的度数将几何体逆时针旋转。

Rotate($feature, 90)

40、SetGeometry【设置或替换Geometry

var pointFeature = Feature(Point( ... ), 'name', 'buffer centroid');
var mileBuffer = BufferGeodetic(Geometry(pointFeature), 1, 'mile');
SetGeometry(pointFeature, mileBuffer);

41、Simplify【简化

对几何图形执行简化操作。

Simplify($feature);

42、SymmetricDifference【交集取反

和交集取反工具效果相同。

var geom2 = Polygon({ ... });
SymmetricDifference($feature, geom2);

43、Union【联合

和联合工具效果相同。

var geom2 = Polygon({ ... });
Union([ $feature, geom2 ]);

44、Within【包含

判断一个几何体是否在另一个几何体内。

var outerGeom = Polygon({ ... });
Within($feature, outerGeom);

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

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

相关文章

07OpenCV 图像模糊

文章目录 图像掩膜操作模糊原理均值滤波高斯滤波中值滤波双边滤波算子代码 图像掩膜操作 图像掩膜操作 模糊原理 Smooth/Blur是图像处理中最简单和常用的操作之一 使用操作的原因之一就是为了给图像预处理时候减低噪声 图像噪声是指存在于图像数据中的不必要的或多余的干扰信…

RK3568开发笔记-qt程序运行报错Failed to move cursor on screen

目录 前言 一、qt程序运行报错 二、异常解决 总结 前言 最近在进行 RK3568 平台上的 Qt 程序开发时&

使用 Docker 部署 MrDoc 在线文档管理系统

1)MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档:https://mrdoc.pro/ MrDoc 使用手册:https://doc.mrdoc.pro/p/user-guide/ MrDoc 可以创建各类私有化部署的文档应用。你可以使用它进行知识管理、构建团队文库、制作产品手册以及在线教程等。 Mr…

在Java中如何使用Lambda表达式进行函数式编程

在Java中如何使用Lambda表达式进行函数式编程 在Java中,使用Lambda表达式进行函数式编程主要涉及以下几个步骤: 理解函数式接口: 函数式接口是一个只有一个抽象方法的接口。Java 8引入了FunctionalInterface注解,用于标记这样的接…

linux安全--DNS欺骗,钓鱼网站搭建

目录 一,实验准备 首先让client能上网 1)实现全网互通,实现全网互通过程请看 2)SNAT源地址转换 3)部署DHCP服务 4)配置DHCP服务 5)启动服务 6)安装DNS服务 7)DNS配置 8)启动DNS…

【Python笔记-设计模式】策略模式

一、说明 策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互相替换。 (一) 解决问题 在需要根据不同情况选择不同算法或策略,规避不断开发新需求后,代码变得非常臃肿难以维护管理。…

如何将图片保存成视频(imageio、opencv和ffmpeg)

测试下来发现,imageio 速度比 cv2 的要慢,所以普通保存推荐 cv2,要gpu加速需要额外配置或者修改 imageio 底层也是调用的ffmpeg,以下是python代码 import imageio import os# 读取要保存为视频的图片 images [] for filename …

UE 打包窗口及鼠标状态设置

UE 打包窗口及鼠标状态设置 打包后鼠标不锁定 显示鼠标图标 打包后设置窗口模式 找到打包路径下的配置文件GameUserSettings,设置相关项目 FullscreenMode0表示全屏模式,1表示窗口全屏模式,2表示窗口模式

模型部署 - BevFusion - (1) - 思路总结

模型部署实践 - BevFusion 思路总结一、网络结构 - 总结1.1、代码1.2、网络流程图1.3、模块大致梳理 二、Onnx 的导出 -总体思路分析三、优化思路总结 学习 BevFusion 的部署,看了很多的资料,这篇博客进行总结和记录自己的实践 思路总结 对于一个模型我…

【代码】Android|获取压力传感器、屏幕压感数据(大气压、原生和Processing)

首先需要分清自己需要的是大气压还是触摸压力,如果是大气压那么就是TYPE_PRESSURE,可以参考https://source.android.google.cn/docs/core/interaction/sensors/sensor-types?hlzh-cn。如果是触摸压力就是另一回事,我需要的是触摸压力。 不过…

软考 系统分析师系列知识点之系统分析的任务、难点与要求(1)

所属章节: 第10章. 系统分析 第1节. 系统分析概述 系统分析阶段也称为逻辑设计阶段,其任务是根据系统设计书所确定的范围,对现有系统进行详细设计调查,描述现有系统的业务流程,指出现有系统的局限性和不足之处&#x…

Qt+libhv实现各类网络通信方式(TCP-UDP-HTTP-WebSocket)

文章目录 TCP通信服务端客户端UDP通信服务端客户端HTTP通信服务端客户端WebSocket通信服务端客户端参考项目下载为了实现程序的跨进程和跨主机通信,我们通常会采用网络通信进行数据传输。常用的通信方式包括TCP/UDP、HTTP、WebSocket等,这些网络通信方式各有优劣有的是短连接…

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 目录 事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测预测效果基本描述程序设计参考资料 预测效果 基本描述 Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 运行环境: Matlab2023及以 上…

C++经典日期类实现

学完C类和对象以及四个默认成员函数&#xff0c;就可以来尝试自己实现一下日期类。完成日期类的各种功能&#xff0c;并加强自己的代码能力。 日期类实现 定义一个日期类 // 文件:Date.h #pragma once #include <iostream> using std::cout; using std::endl;//定义日…

C语言数组作为函数参数

有两种情形&#xff1b; 一种是数组元素作为函数实参&#xff1b;一种是数组名作为函数参数&#xff1b; 新建一个VC6单文档工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon图像处理Opencv初步:色彩转换、打开摄像头

文章目录 处理流程颜色空间二值图像摄像头 python图像处理教程&#xff1a;初步&#x1f4f7;插值变换&#x1f4f7;形态学处理&#x1f4f7;滤波 处理流程 opencv是跨平台图像处理库&#xff0c;为许多编程语言提供了接口&#xff0c;Python自然在列&#xff0c;但在使用pip…

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意&#xff0c;舵机的5V 线不能接到面包板上的正极&#xff0c;面包板上的正极只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我们如何驱动舵机呢&#xff1f;由之前我们介绍原理知道&#xff0c;要输出如下图对应的PWM波形才行…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能&#xff0c;在很多设备上都有这个功能。实现天气预报的功能&#xff0c;不能说很难但是也绝不简单&#xff0c;首先需要从网上获取数据&#xff0c;再解析数据&#xff0c;最后更新到界面上。 在 AWTK 串口屏中…

数字革命的浪潮:Web3如何改变一切

随着数字技术的不断发展&#xff0c;人类社会正迎来一场前所未有的数字革命浪潮。在这个浪潮中&#xff0c;Web3技术以其去中心化、安全、透明的特性&#xff0c;正在逐渐改变着我们的生活方式、商业模式以及社会结构。本文将深入探讨Web3技术如何改变一切&#xff0c;以及其所…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 &#x1f4a1;volatile保证内存可见性&#x1f4a1;单例模式&#x1f4a1;饿汉模式&#x1f4a1;懒汉模式&#x1f4a1;懒汉模式多线程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…