Power BI - 基于经纬度查找最近位置

4
我刚接触Power BI和DAX,希望你能帮助我。
我有两个没有任何关系的表: 表A包含跟踪位置的纬度/经度和日期。 表B包含所有体育场的名称和纬度/经度。
我想找到距离被跟踪位置最近的体育场。如果可能的话,我还想验证该位置是否在该体育场特定半径内。
非常感谢您的帮助。

我只需要找到跟踪位置和体育场位置之间的最小距离,尝试使用haversine函数,你可能可以用简单的欧几里得距离来解决。你可能想在其他地方准备好数据,然后再将其带回Power BI中。 - StelioK
1个回答

8

以下是一种可能的方法:


首先,使用Haversine函数计算最小距离。

将其作为计算列添加到您的Tracked表中。

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

在这个公式中,3959代表地球的半径(以英里为单位)。
现在我们可以通过匹配距离来找到最近的体育场:
Stadium = CALCULATE(MAX(Stadiums[Stadium]),
              FILTER(Stadiums,
                  ROUND(2 * 3959 *
                      ASIN(SQRT(
                          SIN((Stadiums[Lat] - Tracked[Lat]) * PI()/360)^2 +
                          COS(Tracked[Lat] * PI()/180) * COS(Stadiums[Lat] * PI()/180) *
                          SIN((Stadiums[Lon] - Tracked[Lon]) * PI()/360)^2)), 1)
                  = Tracked[Nearest]))

注意:我将值四舍五入以避免由可能的浮点误差导致的不匹配。这可能或可能不必要。


非常好的解决方案! - StelioK
谢谢Alexis。为了将坐标相减,我需要用哪种格式?现在我的格式是文本(34.056687222, -117.195731667)。在计算后有没有可能将它们转换回该格式? - jonas9495
你需要将它们转换为十进制数格式。你可以使用VALUE从字符串中提取数字,并使用FORMAT将数字转换为字符串。 - Alexis Olson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接