首页 > 解决方案 > 如何在 Excel 电源查询中查找两个单独查询的位置之间的距离?

问题描述

我有两个名为Review和的查询Location,其中包含存储的地址信息,包括经度和纬度。两个查询具有相同的列。纬度和经度位于不同的列中。Review查询通常包含 5 到 10 家不同商店的信息,而查询Location大约是 3500。我需要一种方法来计算商店之间的距离,以便在 Review 查询中找到离商店最近的位置。

我找到了一些代码来计算两者之间的距离,但我无法让它工作。

=MINX(Review,ROUND(2 * 3959 * ASIN(SQRT(SIN((Review[Lat] - Location[Lat]) * PI()/360)^2 + COS(Location[Lat] * PI()/180) * COS(Review[Lat] * PI()/180) * SIN((Review[Lon] - Location[Lon]) * PI()/360)^2)), 1))

标签: excelpowerquery

解决方案


假设 Table1 有 4 列名为 [Latitude_1, Longitude_1, Latitude_2, Longitude_2] 并且坐标是十进制的 [38.892456, -74.0247852] 然后下面的代码使用公式生成以英里为单位的位置之间的距离(将 3959 更改为 6371 公里):

=ACOS(SIN(lat1)*SIN(lat2)+COS(lat1)*COS(lat2)*COS(lon2-lon1))*3959

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "DistanceMiles", each Number.Acos(Number.Sin(([Latitude_1] / 180) * Number.PI) * Number.Sin(([Latitude_2] / 180) * Number.PI) + Number.Cos(([Latitude_1] / 180) * Number.PI) * Number.Cos(([Latitude_2] / 180) * Number.PI) * Number.Cos( ([Longitude_2] / 180) * Number.PI-([Longitude_1] / 180) * Number.PI)) * 3959),
in #"Added Custom"

推荐阅读