Power Apps中使用BingMaps.GetRouteV2计算位置距离的问题咨询
Power Apps中使用BingMaps.GetRouteV2计算位置距离的问题咨询
你好!针对你在Power Apps画布应用里计算资产与技术员位置距离时遇到的两个问题,我来帮你逐一梳理解决:
一、如何为BingMaps.GetRouteV2传递起点和终点经纬度
BingMaps.GetRouteV2函数需要接收**起点(startPoint)和终点(endPoint)**两个核心参数,每个参数都要是包含latitude和longitude字段的记录格式。结合你的场景,你可以这样传递资产和技术员的位置信息:
BingMaps.GetRouteV2( // 资产位置(起点) {latitude: relatedAsset.Latitude, longitude: relatedAsset.Longitude}, // 技术员位置(终点) {latitude: ticketLocation.Latitude, longitude: ticketLocation.Longitude}, // 可选:设置出行模式,比如驾车、步行等,默认是驾车 {travelMode: "driving"} ).travelDistance
需要注意:
- 函数返回的结果中,
travelDistance字段就是两点间的距离,默认单位是公里,如果需要英里可以乘以0.621371进行转换 - 请确认你的SharePoint列表中资产的经纬度字段名称正确(你提到的“latitude & Latitude”应该是笔误,应该是
Latitude和Longitude)
二、解决Patch时找不到Distance列的问题
你遇到这个问题的核心原因是:AddColumns函数不会修改原集合,而是返回一个包含新列的新集合,你之前的写法没有把新集合赋值回原变量,导致原集合colRelatedticketTechnicianLocation其实并没有Distance列。
修正方案1:在收集时直接添加Distance列
最简洁的方式是在初始收集技术员位置时,就直接添加Distance列,避免后续重复操作:
ClearCollect(colRelatedticketTechnicianLocation, AddColumns( Filter('Technicians Locations','ticket ID'=If(IsBlank(varticketID),varNavigationID,varticketID)), "Distance", 0 // 初始化Distance列 ) );
修正方案2:重新赋值AddColumns的结果给原集合
如果你已经单独执行了收集操作,也可以把AddColumns的结果重新赋值回原集合:
ClearCollect(colRelatedticketTechnicianLocation, AddColumns(colRelatedticketTechnicianLocation,"Distance",0) );
优化ForAll+Patch的写法
另外,Power Apps里的ForAll更适合用来生成批量更新的记录,而不是循环执行Patch,推荐你改成更高效的写法:
Patch( colRelatedticketTechnicianLocation, ForAll( colRelatedticketTechnicianLocation As ticketLocation, { ID: ticketLocation.ID, Distance: BingMaps.GetRouteV2( {latitude: relatedAsset.Latitude, longitude: relatedAsset.Longitude}, {latitude: ticketLocation.Latitude, longitude: ticketLocation.Longitude} ).travelDistance } ) );
额外注意事项
- 确保你的Power Apps已经添加了Bing Maps连接器,并且配置了正确的权限
- 确认技术员位置列表中的经纬度字段是数字类型,而非文本类型,否则会导致距离计算错误
备注:内容来源于stack exchange,提问作者microsoftdeveloperdesigner
相关产品推荐
相关产品推荐

