2023-02-12 UiPath中利用Invoke Code引用VB代码计算两个地点间距离

第一、找ChatGPT询问如何计算两个地点(分别提供经度longitude和纬度latitude)的距离。得到以下的答案和代码:

如果您想在 UiPath 中计算两个经纬度之间的距离,可以使用"Haversine"公式。

公式如下:

a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c

其中:

lat1, lat2是两个点的纬度。

Δlat = lat2 − lat1。

Δlong = long2 − long1。

R是地球的半径(一般设置为6,371km)。

您可以使用以下代码实现此功能:

Public Function Distance(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double) As Double
    Const R As Double = 6371 ' Earth's radius in km
    Dim lat As Double = Math.Abs(lat2 - lat1) * (Math.PI / 180)
    Dim lon As Double = Math.Abs(lon2 - lon1) * (Math.PI / 180)
    lat1 = lat1 * (Math.PI / 180)
    lat2 = lat2 * (Math.PI / 180)
    Dim a As Double = Math.Sin(lat / 2) * Math.Sin(lat / 2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Sin(lon / 2) * Math.Sin(lon / 2)
    Dim c As Double = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a))
    Return R * c
End Function

第二、可以在UiPath中使用Invoke code活动来引用VB代码。在UiPath中插入Invoke code活动,见下图:

Invoke Code Activity

在Edit Code里面输入上面的VB代码,但要做出一定调整,需要去掉头尾两句声明,并将输入数据的定义声明放入Edit Arguments里面,使用Arguments获取相关的数据并输出结果:

不用Public function的声明和End function的声明,对于输入变量lat1, lon1, lat2, lon2都无需单独声明。另外Return功能不支持,改为输入变量Distance,并在Edit Arguments中声明
Name要对应Edit Code中所需的输入和输出的变量。Value是输入变量的值的来源,即UiPath的变量。

第三,设置工作流,输入数据并测试计算结果输出数据

测试计算两个地点(珠海和上海)的距离的全部工作流、
结果是1319.4989千米,用百度地图测试结果基本一致

成功!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容