使用 BingMaps.GetRouteV2 计算 2 个位置(纬度和纬度)之间的距离

问题描述 投票:0回答:2

我正在开发 Power Apps 画布应用程序,我有一个包含纬度和纬度的共享点资产列表,并且我使用以下公式获取单个资产:-

Set(relatedAsset,LookUp(Assets,ID=LookUp('Asset Faces',ID= LookUp('ticket Details',ID=If(IsBlank(varticketID),varNavigationID,varticketID)).'Asset Face ID').'Asset ID'));

然后我从 SharePoint 列表中获取当前技术人员的纬度和纬度,如下所示:-

ClearCollect(colRelatedticketTechnicianLocation,Filter('Technicians Locations','ticket ID'=If(IsBlank(varticketID),varNavigationID,varticketID)));

向集合中添加一列:-

AddColumns(colRelatedticketTechnicianLocation,"Distance",0);

然后我尝试获取集合中的所有项目并计算资产和技术人员之间的距离:-

ForAll(colRelatedticketTechnicianLocation As ticketLocation,

Patch(colRelatedticketTechnicianLocation,LookUp(colRelatedticketTechnicianLocation,ID=ticketLocation.ID),{Distance: BingMaps.GetRouteV2()});
Blank()
)
 

但目前我面临着这两个问题:-

  1. 我不确定如何在 BingMaps.GetRouteV2 方法中传递源和扩展纬度 & 纬度?

  2. 在最后的语句中,我发现它找不到名为“距离”的列,尽管我使用“添加列”添加了它,有什么建议吗?

谢谢

sharepoint-online bing-maps powerapps powerapps-formula
2个回答
0
投票

我无法与 BingMaps.GetRouteV2 通话,但您添加“距离”列的方式存在问题。即使所有行都已被删除,集合也会保留其列名称。这意味着,运行后:

AddColumns(colRelatedticketTechnicianLocation,"Distance",0);

从那时起,集合 colRelatedticketTechnicianLocation 将会有一个名为 Distance 的列。即使您运行clear()或clearCollect(),列名仍然保留。

这意味着,当您尝试再次运行 AddColumns() 时,您应该会遇到某种错误。老实说,我忘记了如何完全删除这些列名称。也许可以从应用程序中删除对该集合的所有引用,运行应用程序,然后重新添加引用。

但是...这是正确的方法:在过滤“技术人员位置”和清除收集的同一步骤中添加列。

替换这个:

ClearCollect(colRelatedticketTechnicianLocation,Filter('Technicians Locations','ticket ID'=If(IsBlank(varticketID),varNavigationID,varticketID)));

有了这个:

ClearCollect(colRelatedticketTechnicianLocation,AddColumns(Filter('Technicians Locations','ticket ID'=If(IsBlank(varticketID),varNavigationID,varticketID))),"Distance",0);

我知道这会使代码变得更加麻烦,但您现在要确保 colRelatedticketTechnicianLocation 始终具有您希望的“距离”列。但是,由于您要将列“添加”到临时表(即,在添加到集合之前 Filter() 函数的结果),您知道您正在从一个没有“距离”的表开始”列,并以具有“距离”列的表格结尾。

请注意,您还可以通过不给出距离列值 0 而是给出实际公式,将距离计算合并到同一步骤中,如下所示:

ClearCollect(colRelatedticketTechnicianLocation,AddColumns(Filter('Technicians Locations','ticket ID'=If(IsBlank(varticketID),varNavigationID,varticketID))),"Distance",BingMaps.GetRouteV2());

这完全取决于你是好是坏。它使代码更短,并且您永远不会得到 0 距离值,这可能会产生误导,但也使代码更加麻烦。然而,它也会将当前不起作用的事情(Bing 调用)与应该简单的步骤结合起来。再说一次,这是你的决定。


0
投票

你真的必须使用BingMap功能吗? 您可以使用数学公式在 powerapps 中获取两个地理位置之间的距离

© www.soinside.com 2019 - 2024. All rights reserved.