【一起學習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.pswp.cn/news/718192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718192.shtml
英文地址,請注明出處:http://en.pswp.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 修飾的變量能夠保證“內存可見性”以及防…